get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/45729/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 45729,
    "url": "http://patches.dpdk.org/api/patches/45729/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20180929020006.71505-5-ajit.khaparde@broadcom.com/",
    "project": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20180929020006.71505-5-ajit.khaparde@broadcom.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20180929020006.71505-5-ajit.khaparde@broadcom.com",
    "date": "2018-09-29T01:59:55",
    "name": "[v3,04/15] net/bnxt: update HWRM version",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "d9b6332eea36397c5190061f4569a048c1c8602f",
    "submitter": {
        "id": 501,
        "url": "http://patches.dpdk.org/api/people/501/?format=api",
        "name": "Ajit Khaparde",
        "email": "ajit.khaparde@broadcom.com"
    },
    "delegate": {
        "id": 319,
        "url": "http://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20180929020006.71505-5-ajit.khaparde@broadcom.com/mbox/",
    "series": [
        {
            "id": 1590,
            "url": "http://patches.dpdk.org/api/series/1590/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=1590",
            "date": "2018-09-29T01:59:54",
            "name": "bnxt patchset",
            "version": 3,
            "mbox": "http://patches.dpdk.org/series/1590/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/45729/comments/",
    "check": "warning",
    "checks": "http://patches.dpdk.org/api/patches/45729/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 723E82C0C;\n\tMon,  1 Oct 2018 11:38:02 +0200 (CEST)",
            "from rnd-relay.smtp.broadcom.com (rnd-relay.smtp.broadcom.com\n\t[192.19.229.170]) by dpdk.org (Postfix) with ESMTP id CAE081B1D6\n\tfor <dev@dpdk.org>; Sat, 29 Sep 2018 04:00:15 +0200 (CEST)",
            "from nis-sj1-27.broadcom.com (nis-sj1-27.lvn.broadcom.net\n\t[10.75.144.136])\n\tby rnd-relay.smtp.broadcom.com (Postfix) with ESMTP id 8DC2C30C045;\n\tFri, 28 Sep 2018 19:00:13 -0700 (PDT)",
            "from C02VPB22HTD6.vpn.broadcom.net (unknown [10.10.118.196])\n\tby nis-sj1-27.broadcom.com (Postfix) with ESMTP id 54824AC074A;\n\tFri, 28 Sep 2018 19:00:12 -0700 (PDT)"
        ],
        "DKIM-Filter": "OpenDKIM Filter v2.10.3 rnd-relay.smtp.broadcom.com 8DC2C30C045",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=broadcom.com;\n\ts=dkimrelay; t=1538186413;\n\tbh=yuA5nt/QPbN32eCuSV8AuSwsaGACq4/C6uJZpY867Wk=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=CqK6yrHFhqLlLWrR5uL0+VhsodRMeYlqq1hNKigLEaUxcw2grSZnKyyIV49e/5Ug8\n\tZWq1bO2w5FAY5HgnjJtXkWwMTuiLOGKNvlzBWlvp+APF3iuhBQEQ7ZUF5vyR+REsSR\n\tJNlL9snGWfveFpA2kU29XF5sP8YSvF177IBVwhtE=",
        "From": "Ajit Khaparde <ajit.khaparde@broadcom.com>",
        "To": "dev@dpdk.org",
        "Cc": "ferruh.yigit@intel.com",
        "Date": "Fri, 28 Sep 2018 18:59:55 -0700",
        "Message-Id": "<20180929020006.71505-5-ajit.khaparde@broadcom.com>",
        "X-Mailer": "git-send-email 2.17.1 (Apple Git-112)",
        "In-Reply-To": "<20180929020006.71505-1-ajit.khaparde@broadcom.com>",
        "References": "<95301884-14c8-bbfd-ade9-ded04bdb6a95@intel.com>\n\t<20180929020006.71505-1-ajit.khaparde@broadcom.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=UTF-8",
        "Content-Transfer-Encoding": "8bit",
        "X-Mailman-Approved-At": "Mon, 01 Oct 2018 11:37:59 +0200",
        "Subject": "[dpdk-dev] [PATCH v3 04/15] net/bnxt: update HWRM version",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "Update the HWRM API to version 1.9.2.53\nSigned-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>\n--\nv1->v2:\nUpdate from 1.9.2.45 to version 1.9.2.53\nv2->v3:\nSplit the patch into smaller patches\n---\n drivers/net/bnxt/bnxt_stats.c          |    12 +-\n drivers/net/bnxt/hsi_struct_def_dpdk.h | 16311 +++++++----------------\n 2 files changed, 5029 insertions(+), 11294 deletions(-)",
    "diff": "diff --git a/drivers/net/bnxt/bnxt_stats.c b/drivers/net/bnxt/bnxt_stats.c\nindex a5d3c8660..f7e6ce4b2 100644\n--- a/drivers/net/bnxt/bnxt_stats.c\n+++ b/drivers/net/bnxt/bnxt_stats.c\n@@ -26,8 +26,8 @@ static const struct bnxt_xstats_name_off bnxt_rx_stats_strings[] = {\n \t\t\t\trx_256b_511b_frames)},\n \t{\"rx_512b_1023b_frames\", offsetof(struct rx_port_stats,\n \t\t\t\trx_512b_1023b_frames)},\n-\t{\"rx_1024b_1518_frames\", offsetof(struct rx_port_stats,\n-\t\t\t\trx_1024b_1518_frames)},\n+\t{\"rx_1024b_1518b_frames\", offsetof(struct rx_port_stats,\n+\t\t\t\trx_1024b_1518b_frames)},\n \t{\"rx_good_vlan_frames\", offsetof(struct rx_port_stats,\n \t\t\t\trx_good_vlan_frames)},\n \t{\"rx_1519b_2047b_frames\", offsetof(struct rx_port_stats,\n@@ -93,12 +93,12 @@ static const struct bnxt_xstats_name_off bnxt_tx_stats_strings[] = {\n \t\t\t\ttx_256b_511b_frames)},\n \t{\"tx_512b_1023b_frames\", offsetof(struct tx_port_stats,\n \t\t\t\ttx_512b_1023b_frames)},\n-\t{\"tx_1024b_1518_frames\", offsetof(struct tx_port_stats,\n-\t\t\t\ttx_1024b_1518_frames)},\n+\t{\"tx_1024b_1518b_frames\", offsetof(struct tx_port_stats,\n+\t\t\t\ttx_1024b_1518b_frames)},\n \t{\"tx_good_vlan_frames\", offsetof(struct tx_port_stats,\n \t\t\t\ttx_good_vlan_frames)},\n-\t{\"tx_1519b_2047_frames\", offsetof(struct tx_port_stats,\n-\t\t\t\ttx_1519b_2047_frames)},\n+\t{\"tx_1519b_2047b_frames\", offsetof(struct tx_port_stats,\n+\t\t\t\ttx_1519b_2047b_frames)},\n \t{\"tx_2048b_4095b_frames\", offsetof(struct tx_port_stats,\n \t\t\t\ttx_2048b_4095b_frames)},\n \t{\"tx_4096b_9216b_frames\", offsetof(struct tx_port_stats,\ndiff --git a/drivers/net/bnxt/hsi_struct_def_dpdk.h b/drivers/net/bnxt/hsi_struct_def_dpdk.h\nindex f5c7b4228..a433e6bfd 100644\n--- a/drivers/net/bnxt/hsi_struct_def_dpdk.h\n+++ b/drivers/net/bnxt/hsi_struct_def_dpdk.h\n@@ -67,6 +67,10 @@ struct hwrm_resp_hdr {\n #define TLV_TYPE_HWRM_RESPONSE                   UINT32_C(0x2)\n /* RoCE slow path command */\n #define TLV_TYPE_ROCE_SP_COMMAND                 UINT32_C(0x3)\n+/* RoCE slow path command to query CC Gen1 support. */\n+#define TLV_TYPE_QUERY_ROCE_CC_GEN1              UINT32_C(0xcommand 0x0005)\n+/* RoCE slow path command to modify CC Gen1 support. */\n+#define TLV_TYPE_MODIFY_ROCE_CC_GEN1             UINT32_C(0xcommand 0x0005)\n /* Engine CKV - The device's serial number. */\n #define TLV_TYPE_ENGINE_CKV_DEVICE_SERIAL_NUMBER UINT32_C(0x8001)\n /* Engine CKV - Per-function random nonce data. */\n@@ -256,6 +260,7 @@ struct cmd_nums {\n \t */\n \tuint16_t\treq_type;\n \t#define HWRM_VER_GET                              UINT32_C(0x0)\n+\t#define HWRM_FUNC_DRV_IF_CHANGE                   UINT32_C(0xd)\n \t#define HWRM_FUNC_BUF_UNRGTR                      UINT32_C(0xe)\n \t#define HWRM_FUNC_VF_CFG                          UINT32_C(0xf)\n \t/* Reserved for future use. */\n@@ -328,6 +333,7 @@ struct cmd_nums {\n \t#define HWRM_RING_FREE                            UINT32_C(0x51)\n \t#define HWRM_RING_CMPL_RING_QAGGINT_PARAMS        UINT32_C(0x52)\n \t#define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS     UINT32_C(0x53)\n+\t#define HWRM_RING_AGGINT_QCAPS                    UINT32_C(0x54)\n \t#define HWRM_RING_RESET                           UINT32_C(0x5e)\n \t#define HWRM_RING_GRP_ALLOC                       UINT32_C(0x60)\n \t#define HWRM_RING_GRP_FREE                        UINT32_C(0x61)\n@@ -367,6 +373,8 @@ struct cmd_nums {\n \t#define HWRM_PORT_QSTATS_EXT                      UINT32_C(0xb4)\n \t#define HWRM_FW_RESET                             UINT32_C(0xc0)\n \t#define HWRM_FW_QSTATUS                           UINT32_C(0xc1)\n+\t#define HWRM_FW_HEALTH_CHECK                      UINT32_C(0xc2)\n+\t#define HWRM_FW_SYNC                              UINT32_C(0xc3)\n \t/* Experimental */\n \t#define HWRM_FW_SET_TIME                          UINT32_C(0xc8)\n \t/* Experimental */\n@@ -433,6 +441,7 @@ struct cmd_nums {\n \t/* Experimental */\n \t#define HWRM_FW_IPC_MSG                           UINT32_C(0x110)\n \t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO        UINT32_C(0x111)\n+\t#define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE       UINT32_C(0x112)\n \t/* Engine CKV - Ping the device and SRT firmware to get the public key. */\n \t#define HWRM_ENGINE_CKV_HELLO                     UINT32_C(0x12d)\n \t/* Engine CKV - Get the current allocation status of keys provisioned in the key vault. */\n@@ -515,6 +524,10 @@ struct cmd_nums {\n \t#define HWRM_FUNC_BACKING_STORE_CFG               UINT32_C(0x193)\n \t/* Experimental */\n \t#define HWRM_FUNC_BACKING_STORE_QCFG              UINT32_C(0x194)\n+\t/* Configures the BW of any VF */\n+\t#define HWRM_FUNC_VF_BW_CFG                       UINT32_C(0x195)\n+\t/* Queries the BW of any VF */\n+\t#define HWRM_FUNC_VF_BW_QCFG                      UINT32_C(0x196)\n \t/* Experimental */\n \t#define HWRM_SELFTEST_QLIST                       UINT32_C(0x200)\n \t/* Experimental */\n@@ -544,8 +557,12 @@ struct cmd_nums {\n \t#define HWRM_DBG_COREDUMP_INITIATE                UINT32_C(0xff18)\n \t/* Experimental */\n \t#define HWRM_DBG_COREDUMP_RETRIEVE                UINT32_C(0xff19)\n+\t/* Experimental */\n+\t#define HWRM_DBG_FW_CLI                           UINT32_C(0xff1a)\n \t/*  */\n \t#define HWRM_DBG_I2C_CMD                          UINT32_C(0xff1b)\n+\t/*  */\n+\t#define HWRM_DBG_RING_INFO_GET                    UINT32_C(0xff1c)\n \t/* Experimental */\n \t#define HWRM_NVM_FACTORY_DEFAULTS                 UINT32_C(0xffee)\n \t#define HWRM_NVM_VALIDATE_OPTION                  UINT32_C(0xffef)\n@@ -615,6 +632,11 @@ struct ret_codes {\n \t * should retry the request.\n \t */\n \t#define HWRM_ERR_CODE_NO_BUFFER              UINT32_C(0x8)\n+\t/*\n+\t * This error code is only reported by firmware when some\n+\t * sub-option of a supported HWRM command is unsupported.\n+\t */\n+\t#define HWRM_ERR_CODE_UNSUPPORTED_OPTION_ERR UINT32_C(0x9)\n \t/*\n \t * Generic HWRM execution error that represents an\n \t * internal error.\n@@ -686,8 +708,8 @@ struct hwrm_err_output {\n #define HWRM_VERSION_MINOR 9\n #define HWRM_VERSION_UPDATE 2\n /* non-zero means beta version */\n-#define HWRM_VERSION_RSVD 9\n-#define HWRM_VERSION_STR \"1.9.2.9\"\n+#define HWRM_VERSION_RSVD 53\n+#define HWRM_VERSION_STR \"1.9.2.53\"\n \n /****************\n  * hwrm_ver_get *\n@@ -901,6 +923,42 @@ struct hwrm_ver_get_output {\n \t */\n \t#define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_SHORT_CMD_REQUIRED \\\n \t\tUINT32_C(0x8)\n+\t/*\n+\t * If set to 1, then the KONG host mailbox channel is supported.\n+\t * If set to 0, then the KONG host mailbox channel is not supported.\n+\t * By default, this flag should be 0 for older version of core firmware.\n+\t */\n+\t#define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_KONG_MB_CHNL_SUPPORTED \\\n+\t\tUINT32_C(0x10)\n+\t/*\n+\t * If set to 1, then the 64bit flow handle is supported in addition to the\n+\t * legacy 16bit flow handle. If set to 0, then the 64bit flow handle is not\n+\t * supported. By default, this flag should be 0 for older version of core firmware.\n+\t */\n+\t#define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_FLOW_HANDLE_64BIT_SUPPORTED \\\n+\t\tUINT32_C(0x20)\n+\t/*\n+\t * If set to 1, then filter type can be provided in filter_alloc or filter_cfg\n+\t * filter types like L2 for l2 traffic and ROCE for roce & l2 traffic.\n+\t * If set to 0, then filter types not supported.\n+\t * By default, this flag should be 0 for older version of core firmware.\n+\t */\n+\t#define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_L2_FILTER_TYPES_ROCE_OR_L2_SUPPORTED \\\n+\t\tUINT32_C(0x40)\n+\t/*\n+\t * If set to 1, firmware is capable to support virtio vSwitch offload model.\n+\t * If set to 0, firmware can't supported virtio vSwitch offload model.\n+\t * By default, this flag should be 0 for older version of core firmware.\n+\t */\n+\t#define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_VIRTIO_VSWITCH_OFFLOAD_SUPPORTED \\\n+\t\tUINT32_C(0x80)\n+\t/*\n+\t * If set to 1, firmware is capable to support trusted VF.\n+\t * If set to 0, firmware is not capable to support trusted VF.\n+\t * By default, this flag should be 0 for older version of core firmware.\n+\t */\n+\t#define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_TRUSTED_VF_SUPPORTED \\\n+\t\tUINT32_C(0x100)\n \t/*\n \t * This field represents the major version of RoCE firmware.\n \t * A change in major version represents a major release.\n@@ -1154,39 +1212,45 @@ struct hwrm_ver_get_output {\n struct bd_base {\n \tuint8_t\ttype;\n \t/* This value identifies the type of buffer descriptor. */\n-\t#define BD_BASE_TYPE_MASK       UINT32_C(0x3f)\n-\t#define BD_BASE_TYPE_SFT        0\n+\t#define BD_BASE_TYPE_MASK             UINT32_C(0x3f)\n+\t#define BD_BASE_TYPE_SFT              0\n \t/*\n \t * Indicates that this BD is 16B long and is used for\n \t * normal L2 packet transmission.\n \t */\n-\t#define BD_BASE_TYPE_TX_BD_SHORT  UINT32_C(0x0)\n+\t#define BD_BASE_TYPE_TX_BD_SHORT        UINT32_C(0x0)\n \t/*\n \t * Indicates that this BD is 1BB long and is an empty\n \t * TX BD.  Not valid for use by the driver.\n \t */\n-\t#define BD_BASE_TYPE_TX_BD_EMPTY  UINT32_C(0x1)\n+\t#define BD_BASE_TYPE_TX_BD_EMPTY        UINT32_C(0x1)\n \t/*\n \t * Indicates that this BD is 16B long and is an RX Producer\n \t * (ie. empty) buffer descriptor.\n \t */\n-\t#define BD_BASE_TYPE_RX_PROD_PKT  UINT32_C(0x4)\n+\t#define BD_BASE_TYPE_RX_PROD_PKT        UINT32_C(0x4)\n \t/*\n \t * Indicates that this BD is 16B long and is an RX\n \t * Producer Buffer BD.\n \t */\n-\t#define BD_BASE_TYPE_RX_PROD_BFR  UINT32_C(0x5)\n+\t#define BD_BASE_TYPE_RX_PROD_BFR        UINT32_C(0x5)\n \t/*\n \t * Indicates that this BD is 16B long and is an\n \t * RX Producer Assembly Buffer Descriptor.\n \t */\n-\t#define BD_BASE_TYPE_RX_PROD_AGG  UINT32_C(0x6)\n+\t#define BD_BASE_TYPE_RX_PROD_AGG        UINT32_C(0x6)\n \t/*\n \t * Indicates that this BD is 32B long and is used for\n \t * normal L2 packet transmission.\n \t */\n-\t#define BD_BASE_TYPE_TX_BD_LONG   UINT32_C(0x10)\n-\t#define BD_BASE_TYPE_LAST        BD_BASE_TYPE_TX_BD_LONG\n+\t#define BD_BASE_TYPE_TX_BD_LONG         UINT32_C(0x10)\n+\t/*\n+\t * Indicates that this BD is 32B long and is used for\n+\t * L2 packet transmission for small packets that require\n+\t * low latency.\n+\t */\n+\t#define BD_BASE_TYPE_TX_BD_LONG_INLINE  UINT32_C(0x11)\n+\t#define BD_BASE_TYPE_LAST              BD_BASE_TYPE_TX_BD_LONG_INLINE\n \tuint8_t\tunused_1[7];\n } __attribute__((packed));\n \n@@ -1406,6 +1470,7 @@ struct tx_bd_long {\n \tuint64_t\taddress;\n } __attribute__((packed));\n \n+/* Last 16 bytes of tx_bd_long. */\n /* tx_bd_long_hi (size:128b/16B) */\n struct tx_bd_long_hi {\n \t/*\n@@ -1595,6 +1660,219 @@ struct tx_bd_long_hi {\n \t\tTX_BD_LONG_CFA_META_KEY_VLAN_TAG\n } __attribute__((packed));\n \n+/*\n+ * This structure is used to inform the NIC of packet data that needs to be\n+ * transmitted with additional processing that requires extra data such as\n+ * VLAN insertion plus attached inline data. This BD type may be used to\n+ * improve latency for small packets needing the additional extended features\n+ * supported by long BDs.\n+ */\n+/* tx_bd_long_inline (size:256b/32B) */\n+struct tx_bd_long_inline {\n+\tuint16_t\tflags_type;\n+\t/* This value identifies the type of buffer descriptor. */\n+\t#define TX_BD_LONG_INLINE_TYPE_MASK             UINT32_C(0x3f)\n+\t#define TX_BD_LONG_INLINE_TYPE_SFT              0\n+\t/*\n+\t * This type of BD is 32B long and is used for inline L2 packet\n+\t * transmission.\n+\t */\n+\t#define TX_BD_LONG_INLINE_TYPE_TX_BD_LONG_INLINE  UINT32_C(0x11)\n+\t#define TX_BD_LONG_INLINE_TYPE_LAST \\\n+\t\tTX_BD_LONG_INLINE_TYPE_TX_BD_LONG_INLINE\n+\t/*\n+\t * All bits in this field may be set on the first BD of a packet.\n+\t * Only the packet_end bit may be set in non-first BDs.\n+\t */\n+\t#define TX_BD_LONG_INLINE_FLAGS_MASK            UINT32_C(0xffc0)\n+\t#define TX_BD_LONG_INLINE_FLAGS_SFT             6\n+\t/*\n+\t * If set to 1, the packet ends with the data in the buffer\n+\t * pointed to by this descriptor.  This flag must be\n+\t * valid on every BD.\n+\t */\n+\t#define TX_BD_LONG_INLINE_FLAGS_PACKET_END       UINT32_C(0x40)\n+\t/*\n+\t * If set to 1, the device will not generate a completion for\n+\t * this transmit packet unless there is an error in its processing.\n+\t * If this bit is set to 0, then the packet will be completed\n+\t * normally.\n+\t *\n+\t * This bit may be set only on the first BD of a packet.\n+\t */\n+\t#define TX_BD_LONG_INLINE_FLAGS_NO_CMPL          UINT32_C(0x80)\n+\t/*\n+\t * This value indicates how many 16B BD locations are consumed\n+\t * in the ring by this packet, including the BD and inline\n+\t * data.\n+\t */\n+\t#define TX_BD_LONG_INLINE_FLAGS_BD_CNT_MASK      UINT32_C(0x1f00)\n+\t#define TX_BD_LONG_INLINE_FLAGS_BD_CNT_SFT       8\n+\t/* This field is deprecated. */\n+\t#define TX_BD_LONG_INLINE_FLAGS_LHINT_MASK       UINT32_C(0x6000)\n+\t#define TX_BD_LONG_INLINE_FLAGS_LHINT_SFT        13\n+\t/*\n+\t * If set to 1, the device immediately updates the Send Consumer\n+\t * Index after the buffer associated with this descriptor has\n+\t * been transferred via DMA to NIC memory from host memory. An\n+\t * interrupt may or may not be generated according to the state\n+\t * of the interrupt avoidance mechanisms. If this bit\n+\t * is set to 0, then the Consumer Index is only updated as soon\n+\t * as one of the host interrupt coalescing conditions has been met.\n+\t *\n+\t * This bit must be valid on the first BD of a packet.\n+\t */\n+\t#define TX_BD_LONG_INLINE_FLAGS_COAL_NOW         UINT32_C(0x8000)\n+\t/*\n+\t * This is the length of the inline data, not including BD length, in\n+\t * bytes.\n+\t * The maximum value is 480.\n+\t *\n+\t * This field must be valid on all BDs of a packet.\n+\t */\n+\tuint16_t\tlen;\n+\t/*\n+\t * The opaque data field is passed through to the completion and can be\n+\t * used for any data that the driver wants to associate with the transmit\n+\t * BD.\n+\t *\n+\t * This field must be valid on the first BD of a packet.\n+\t */\n+\tuint32_t\topaque;\n+\tuint64_t\tunused1;\n+\t/*\n+\t * All bits in this field must be valid on the first BD of a packet.\n+\t * Their value on other BDs of the packet is ignored.\n+\t */\n+\tuint16_t\tlflags;\n+\t/*\n+\t * If set to 1, the controller replaces the TCP/UPD checksum\n+\t * fields of normal TCP/UPD checksum, or the inner TCP/UDP\n+\t * checksum field of the encapsulated TCP/UDP packets with the\n+\t * hardware calculated TCP/UDP checksum for the packet associated\n+\t * with this descriptor. The flag is ignored if the LSO flag is set.\n+\t */\n+\t#define TX_BD_LONG_INLINE_LFLAGS_TCP_UDP_CHKSUM     UINT32_C(0x1)\n+\t/*\n+\t * If set to 1, the controller replaces the IP checksum of the\n+\t * normal packets, or the inner IP checksum of the encapsulated\n+\t * packets with the hardware calculated IP checksum for the\n+\t * packet associated with this descriptor.\n+\t */\n+\t#define TX_BD_LONG_INLINE_LFLAGS_IP_CHKSUM          UINT32_C(0x2)\n+\t/*\n+\t * If set to 1, the controller will not append an Ethernet CRC\n+\t * to the end of the frame.\n+\t *\n+\t * Packet must be 64B or longer when this flag is set. It is not\n+\t * useful to use this bit with any form of TX offload such as\n+\t * CSO or LSO. The intent is that the packet from the host already\n+\t * has a valid Ethernet CRC on the packet.\n+\t */\n+\t#define TX_BD_LONG_INLINE_LFLAGS_NOCRC              UINT32_C(0x4)\n+\t/*\n+\t * If set to 1, the device will record the time at which the packet\n+\t * was actually transmitted at the TX MAC.\n+\t */\n+\t#define TX_BD_LONG_INLINE_LFLAGS_STAMP              UINT32_C(0x8)\n+\t/*\n+\t * If set to 1, the controller replaces the tunnel IP checksum\n+\t * field with hardware calculated IP checksum for the IP header\n+\t * of the packet associated with this descriptor. The hardware\n+\t * updates an outer UDP checksum if it is non-zero.\n+\t */\n+\t#define TX_BD_LONG_INLINE_LFLAGS_T_IP_CHKSUM        UINT32_C(0x10)\n+\t/*\n+\t * This bit must be 0 for BDs of this type. LSO is not supported with\n+\t * inline BDs.\n+\t */\n+\t#define TX_BD_LONG_INLINE_LFLAGS_LSO                UINT32_C(0x20)\n+\t/* Since LSO is not supported with inline BDs, this bit is not used. */\n+\t#define TX_BD_LONG_INLINE_LFLAGS_IPID_FMT           UINT32_C(0x40)\n+\t/* Since LSO is not supported with inline BDs, this bit is not used. */\n+\t#define TX_BD_LONG_INLINE_LFLAGS_T_IPID             UINT32_C(0x80)\n+\t/*\n+\t * If set to '1', then the RoCE ICRC will be appended to the\n+\t * packet.  Packet must be a valid RoCE format packet.\n+\t */\n+\t#define TX_BD_LONG_INLINE_LFLAGS_ROCE_CRC           UINT32_C(0x100)\n+\t/*\n+\t * If set to '1', then the FCoE CRC will be appended to the\n+\t * packet.  Packet must be a valid FCoE format packet.\n+\t */\n+\t#define TX_BD_LONG_INLINE_LFLAGS_FCOE_CRC           UINT32_C(0x200)\n+\tuint16_t\tunused2;\n+\tuint32_t\tunused3;\n+\tuint16_t\tunused4;\n+\t/*\n+\t * This value selects a CFA action to perform on the packet.\n+\t * Set this value to zero if no CFA action is desired.\n+\t *\n+\t * This value must be valid on the first BD of a packet.\n+\t */\n+\tuint16_t\tcfa_action;\n+\t/*\n+\t * This value is action meta-data that defines CFA edit operations\n+\t * that are done in addition to any action editing.\n+\t */\n+\tuint32_t\tcfa_meta;\n+\t/* When key = 1, this is the VLAN tag VID value. */\n+\t#define TX_BD_LONG_INLINE_CFA_META_VLAN_VID_MASK     UINT32_C(0xfff)\n+\t#define TX_BD_LONG_INLINE_CFA_META_VLAN_VID_SFT      0\n+\t/* When key = 1, this is the VLAN tag DE value. */\n+\t#define TX_BD_LONG_INLINE_CFA_META_VLAN_DE           UINT32_C(0x1000)\n+\t/* When key = 1, this is the VLAN tag PRI value. */\n+\t#define TX_BD_LONG_INLINE_CFA_META_VLAN_PRI_MASK     UINT32_C(0xe000)\n+\t#define TX_BD_LONG_INLINE_CFA_META_VLAN_PRI_SFT      13\n+\t/* When key = 1, this is the VLAN tag TPID select value. */\n+\t#define TX_BD_LONG_INLINE_CFA_META_VLAN_TPID_MASK    UINT32_C(0x70000)\n+\t#define TX_BD_LONG_INLINE_CFA_META_VLAN_TPID_SFT     16\n+\t/* 0x88a8 */\n+\t#define TX_BD_LONG_INLINE_CFA_META_VLAN_TPID_TPID88A8 \\\n+\t\t(UINT32_C(0x0) << 16)\n+\t/* 0x8100 */\n+\t#define TX_BD_LONG_INLINE_CFA_META_VLAN_TPID_TPID8100 \\\n+\t\t(UINT32_C(0x1) << 16)\n+\t/* 0x9100 */\n+\t#define TX_BD_LONG_INLINE_CFA_META_VLAN_TPID_TPID9100 \\\n+\t\t(UINT32_C(0x2) << 16)\n+\t/* 0x9200 */\n+\t#define TX_BD_LONG_INLINE_CFA_META_VLAN_TPID_TPID9200 \\\n+\t\t(UINT32_C(0x3) << 16)\n+\t/* 0x9300 */\n+\t#define TX_BD_LONG_INLINE_CFA_META_VLAN_TPID_TPID9300 \\\n+\t\t(UINT32_C(0x4) << 16)\n+\t/* Value programmed in CFA VLANTPID register. */\n+\t#define TX_BD_LONG_INLINE_CFA_META_VLAN_TPID_TPIDCFG \\\n+\t\t(UINT32_C(0x5) << 16)\n+\t#define TX_BD_LONG_INLINE_CFA_META_VLAN_TPID_LAST \\\n+\t\tTX_BD_LONG_INLINE_CFA_META_VLAN_TPID_TPIDCFG\n+\t#define TX_BD_LONG_INLINE_CFA_META_VLAN_RESERVED_MASK \\\n+\t\tUINT32_C(0xff80000)\n+\t#define TX_BD_LONG_INLINE_CFA_META_VLAN_RESERVED_SFT 19\n+\t/*\n+\t * This field identifies the type of edit to be performed\n+\t * on the packet.\n+\t *\n+\t * This value must be valid on the first BD of a packet.\n+\t */\n+\t#define TX_BD_LONG_INLINE_CFA_META_KEY_MASK \\\n+\t\tUINT32_C(0xf0000000)\n+\t#define TX_BD_LONG_INLINE_CFA_META_KEY_SFT           28\n+\t/* No editing */\n+\t#define TX_BD_LONG_INLINE_CFA_META_KEY_NONE \\\n+\t\t(UINT32_C(0x0) << 28)\n+\t/*\n+\t * - meta[17:16] - TPID select value (0 = 0x8100).\n+\t * - meta[15:12] - PRI/DE value.\n+\t * - meta[11:0] - VID value.\n+\t */\n+\t#define TX_BD_LONG_INLINE_CFA_META_KEY_VLAN_TAG \\\n+\t\t(UINT32_C(0x1) << 28)\n+\t#define TX_BD_LONG_INLINE_CFA_META_KEY_LAST \\\n+\t\tTX_BD_LONG_INLINE_CFA_META_KEY_VLAN_TAG\n+} __attribute__((packed));\n+\n /* tx_bd_empty (size:128b/16B) */\n struct tx_bd_empty {\n \t/* This value identifies the type of buffer descriptor. */\n@@ -2121,6 +2399,7 @@ struct rx_pkt_cmpl {\n \tuint32_t\trss_hash;\n } __attribute__((packed));\n \n+/* Last 16 bytes of rx_pkt_cmpl. */\n /* rx_pkt_cmpl_hi (size:128b/16B) */\n struct rx_pkt_cmpl_hi {\n \tuint32_t\tflags2;\n@@ -2566,6 +2845,7 @@ struct rx_tpa_start_cmpl {\n \tuint32_t\trss_hash;\n } __attribute__((packed));\n \n+/* Last 16 bytes of rx_tpq_start_cmpl. */\n /* rx_tpa_start_cmpl_hi (size:128b/16B) */\n struct rx_tpa_start_cmpl_hi {\n \tuint32_t\tflags2;\n@@ -2830,6 +3110,7 @@ struct rx_tpa_end_cmpl {\n \tuint32_t\ttsdelta;\n } __attribute__((packed));\n \n+/* Last 16 bytes of rx_tpa_end_cmpl. */\n /* rx_tpa_end_cmpl_hi (size:128b/16B) */\n struct rx_tpa_end_cmpl_hi {\n \t/*\n@@ -3153,6 +3434,9 @@ struct hwrm_async_event_cmpl {\n \t/* Port PHY configuration change */\n \t#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_PORT_PHY_CFG_CHANGE \\\n \t\tUINT32_C(0x7)\n+\t/* Reset notification to clients */\n+\t#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_RESET_NOTIFY \\\n+\t\tUINT32_C(0x8)\n \t/* Function driver unloaded */\n \t#define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_FUNC_DRVR_UNLOAD \\\n \t\tUINT32_C(0x10)\n@@ -3290,56 +3574,6 @@ struct hwrm_async_event_cmpl_link_status_change {\n \t\t20\n } __attribute__((packed));\n \n-/* hwrm_async_event_cmpl_link_mtu_change (size:128b/16B) */\n-struct hwrm_async_event_cmpl_link_mtu_change {\n-\tuint16_t\ttype;\n-\t/*\n-\t * This field indicates the exact type of the completion.\n-\t * By convention, the LSB identifies the length of the\n-\t * record in 16B units.  Even values indicate 16B\n-\t * records.  Odd values indicate 32B\n-\t * records.\n-\t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_TYPE_MASK \\\n-\t\tUINT32_C(0x3f)\n-\t#define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_TYPE_SFT             0\n-\t/* HWRM Asynchronous Event Information */\n-\t#define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_TYPE_HWRM_ASYNC_EVENT \\\n-\t\tUINT32_C(0x2e)\n-\t#define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_TYPE_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_TYPE_HWRM_ASYNC_EVENT\n-\t/* Identifiers of events. */\n-\tuint16_t\tevent_id;\n-\t/* Link MTU changed */\n-\t#define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_EVENT_ID_LINK_MTU_CHANGE \\\n-\t\tUINT32_C(0x1)\n-\t#define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_EVENT_ID_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_EVENT_ID_LINK_MTU_CHANGE\n-\t/* Event specific data */\n-\tuint32_t\tevent_data2;\n-\tuint8_t\topaque_v;\n-\t/*\n-\t * This value is written by the NIC such that it will be different\n-\t * for each pass through the completion queue.   The even passes\n-\t * will write 1.  The odd passes will write 0.\n-\t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_V          UINT32_C(0x1)\n-\t/* opaque is 7 b */\n-\t#define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_OPAQUE_MASK \\\n-\t\tUINT32_C(0xfe)\n-\t#define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_OPAQUE_SFT 1\n-\t/* 8-lsb timestamp from POR (100-msec resolution) */\n-\tuint8_t\ttimestamp_lo;\n-\t/* 16-lsb timestamp from POR (100-msec resolution) */\n-\tuint16_t\ttimestamp_hi;\n-\t/* Event specific data */\n-\tuint32_t\tevent_data1;\n-\t/* The new MTU of the link in bytes. */\n-\t#define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_EVENT_DATA1_NEW_MTU_MASK \\\n-\t\tUINT32_C(0xffff)\n-\t#define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_EVENT_DATA1_NEW_MTU_SFT 0\n-} __attribute__((packed));\n-\n /* hwrm_async_event_cmpl_link_speed_change (size:128b/16B) */\n struct hwrm_async_event_cmpl_link_speed_change {\n \tuint16_t\ttype;\n@@ -3435,8 +3669,8 @@ struct hwrm_async_event_cmpl_link_speed_change {\n \t\t16\n } __attribute__((packed));\n \n-/* hwrm_async_event_cmpl_dcb_config_change (size:128b/16B) */\n-struct hwrm_async_event_cmpl_dcb_config_change {\n+/* hwrm_async_event_cmpl_link_speed_cfg_change (size:128b/16B) */\n+struct hwrm_async_event_cmpl_link_speed_cfg_change {\n \tuint16_t\ttype;\n \t/*\n \t * This field indicates the exact type of the completion.\n@@ -3445,44 +3679,36 @@ struct hwrm_async_event_cmpl_dcb_config_change {\n \t * records.  Odd values indicate 32B\n \t * records.\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_TYPE_MASK \\\n+\t#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_TYPE_MASK \\\n \t\tUINT32_C(0x3f)\n-\t#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_TYPE_SFT             0\n+\t#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_TYPE_SFT \\\n+\t\t0\n \t/* HWRM Asynchronous Event Information */\n-\t#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_TYPE_HWRM_ASYNC_EVENT \\\n+\t#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_TYPE_HWRM_ASYNC_EVENT \\\n \t\tUINT32_C(0x2e)\n-\t#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_TYPE_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_TYPE_HWRM_ASYNC_EVENT\n+\t#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_TYPE_LAST \\\n+\t\tHWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_TYPE_HWRM_ASYNC_EVENT\n \t/* Identifiers of events. */\n \tuint16_t\tevent_id;\n-\t/* DCB Configuration changed */\n-\t#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_ID_DCB_CONFIG_CHANGE \\\n-\t\tUINT32_C(0x3)\n-\t#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_ID_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_ID_DCB_CONFIG_CHANGE\n+\t/* Link speed configuration change */\n+\t#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_EVENT_ID_LINK_SPEED_CFG_CHANGE \\\n+\t\tUINT32_C(0x6)\n+\t#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_EVENT_ID_LAST \\\n+\t\tHWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_EVENT_ID_LINK_SPEED_CFG_CHANGE\n \t/* Event specific data */\n \tuint32_t\tevent_data2;\n-\t/* ETS configuration change */\n-\t#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA2_ETS \\\n-\t\tUINT32_C(0x1)\n-\t/* PFC configuration change */\n-\t#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA2_PFC \\\n-\t\tUINT32_C(0x2)\n-\t/* APP configuration change */\n-\t#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA2_APP \\\n-\t\tUINT32_C(0x4)\n \tuint8_t\topaque_v;\n \t/*\n \t * This value is written by the NIC such that it will be different\n \t * for each pass through the completion queue.   The even passes\n \t * will write 1.  The odd passes will write 0.\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_V \\\n+\t#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_V \\\n \t\tUINT32_C(0x1)\n \t/* opaque is 7 b */\n-\t#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_OPAQUE_MASK \\\n+\t#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_OPAQUE_MASK \\\n \t\tUINT32_C(0xfe)\n-\t#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_OPAQUE_SFT 1\n+\t#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_OPAQUE_SFT 1\n \t/* 8-lsb timestamp from POR (100-msec resolution) */\n \tuint8_t\ttimestamp_lo;\n \t/* 16-lsb timestamp from POR (100-msec resolution) */\n@@ -3490,34 +3716,30 @@ struct hwrm_async_event_cmpl_dcb_config_change {\n \t/* Event specific data */\n \tuint32_t\tevent_data1;\n \t/* PORT ID */\n-\t#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_PORT_ID_MASK \\\n+\t#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_EVENT_DATA1_PORT_ID_MASK \\\n \t\tUINT32_C(0xffff)\n-\t#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_PORT_ID_SFT \\\n+\t#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_EVENT_DATA1_PORT_ID_SFT \\\n \t\t0\n-\t/* Priority recommended for RoCE traffic */\n-\t#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_ROCE_PRIORITY_MASK \\\n-\t\tUINT32_C(0xff0000)\n-\t#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_ROCE_PRIORITY_SFT \\\n-\t\t16\n-\t/* none is 255 */\n-\t#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_ROCE_PRIORITY_NONE \\\n-\t\t(UINT32_C(0xff) << 16)\n-\t#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_ROCE_PRIORITY_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_ROCE_PRIORITY_NONE\n-\t/* Priority recommended for L2 traffic */\n-\t#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_L2_PRIORITY_MASK \\\n-\t\tUINT32_C(0xff000000)\n-\t#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_L2_PRIORITY_SFT \\\n-\t\t24\n-\t/* none is 255 */\n-\t#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_L2_PRIORITY_NONE \\\n-\t\t(UINT32_C(0xff) << 24)\n-\t#define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_L2_PRIORITY_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_L2_PRIORITY_NONE\n+\t/*\n+\t * If set to 1, it indicates that the supported link speeds\n+\t * configuration on the port has changed.\n+\t * If set to 0, then there is no change in supported link speeds\n+\t * configuration.\n+\t */\n+\t#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_EVENT_DATA1_SUPPORTED_LINK_SPEEDS_CHANGE \\\n+\t\tUINT32_C(0x10000)\n+\t/*\n+\t * If set to 1, it indicates that the link speed configuration\n+\t * on the port has become illegal or invalid.\n+\t * If set to 0, then the link speed configuration on the port is\n+\t * legal or valid.\n+\t */\n+\t#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_EVENT_DATA1_ILLEGAL_LINK_SPEED_CFG \\\n+\t\tUINT32_C(0x20000)\n } __attribute__((packed));\n \n-/* hwrm_async_event_cmpl_port_conn_not_allowed (size:128b/16B) */\n-struct hwrm_async_event_cmpl_port_conn_not_allowed {\n+/* hwrm_async_event_cmpl_port_phy_cfg_change (size:128b/16B) */\n+struct hwrm_async_event_cmpl_port_phy_cfg_change {\n \tuint16_t\ttype;\n \t/*\n \t * This field indicates the exact type of the completion.\n@@ -3526,22 +3748,22 @@ struct hwrm_async_event_cmpl_port_conn_not_allowed {\n \t * records.  Odd values indicate 32B\n \t * records.\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_TYPE_MASK \\\n+\t#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_TYPE_MASK \\\n \t\tUINT32_C(0x3f)\n-\t#define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_TYPE_SFT \\\n+\t#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_TYPE_SFT \\\n \t\t0\n \t/* HWRM Asynchronous Event Information */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_TYPE_HWRM_ASYNC_EVENT \\\n+\t#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_TYPE_HWRM_ASYNC_EVENT \\\n \t\tUINT32_C(0x2e)\n-\t#define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_TYPE_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_TYPE_HWRM_ASYNC_EVENT\n+\t#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_TYPE_LAST \\\n+\t\tHWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_TYPE_HWRM_ASYNC_EVENT\n \t/* Identifiers of events. */\n \tuint16_t\tevent_id;\n-\t/* Port connection not allowed */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_ID_PORT_CONN_NOT_ALLOWED \\\n-\t\tUINT32_C(0x4)\n-\t#define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_ID_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_ID_PORT_CONN_NOT_ALLOWED\n+\t/* Port PHY configuration change */\n+\t#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_ID_PORT_PHY_CFG_CHANGE \\\n+\t\tUINT32_C(0x7)\n+\t#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_ID_LAST \\\n+\t\tHWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_ID_PORT_PHY_CFG_CHANGE\n \t/* Event specific data */\n \tuint32_t\tevent_data2;\n \tuint8_t\topaque_v;\n@@ -3550,12 +3772,12 @@ struct hwrm_async_event_cmpl_port_conn_not_allowed {\n \t * for each pass through the completion queue.   The even passes\n \t * will write 1.  The odd passes will write 0.\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_V \\\n+\t#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_V \\\n \t\tUINT32_C(0x1)\n \t/* opaque is 7 b */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_OPAQUE_MASK \\\n+\t#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_OPAQUE_MASK \\\n \t\tUINT32_C(0xfe)\n-\t#define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_OPAQUE_SFT 1\n+\t#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_OPAQUE_SFT 1\n \t/* 8-lsb timestamp from POR (100-msec resolution) */\n \tuint8_t\ttimestamp_lo;\n \t/* 16-lsb timestamp from POR (100-msec resolution) */\n@@ -3563,90 +3785,37 @@ struct hwrm_async_event_cmpl_port_conn_not_allowed {\n \t/* Event specific data */\n \tuint32_t\tevent_data1;\n \t/* PORT ID */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_PORT_ID_MASK \\\n+\t#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_DATA1_PORT_ID_MASK \\\n \t\tUINT32_C(0xffff)\n-\t#define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_PORT_ID_SFT \\\n+\t#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_DATA1_PORT_ID_SFT \\\n \t\t0\n \t/*\n-\t * This value indicates the current port level enforcement policy\n-\t * for the optics module when there is an optical module mismatch\n-\t * and port is not connected.\n+\t * If set to 1, it indicates that the FEC\n+\t * configuration on the port has changed.\n+\t * If set to 0, then there is no change in FEC configuration.\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_ENFORCEMENT_POLICY_MASK \\\n-\t\tUINT32_C(0xff0000)\n-\t#define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_ENFORCEMENT_POLICY_SFT \\\n-\t\t16\n-\t/* No enforcement */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_ENFORCEMENT_POLICY_NONE \\\n-\t\t(UINT32_C(0x0) << 16)\n-\t/* Disable Transmit side Laser. */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_ENFORCEMENT_POLICY_DISABLETX \\\n-\t\t(UINT32_C(0x1) << 16)\n-\t/* Raise a warning message. */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_ENFORCEMENT_POLICY_WARNINGMSG \\\n-\t\t(UINT32_C(0x2) << 16)\n-\t/* Power down the module. */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_ENFORCEMENT_POLICY_PWRDOWN \\\n-\t\t(UINT32_C(0x3) << 16)\n-\t#define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_ENFORCEMENT_POLICY_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_ENFORCEMENT_POLICY_PWRDOWN\n-} __attribute__((packed));\n-\n-/* hwrm_async_event_cmpl_link_speed_cfg_not_allowed (size:128b/16B) */\n-struct hwrm_async_event_cmpl_link_speed_cfg_not_allowed {\n-\tuint16_t\ttype;\n+\t#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_DATA1_FEC_CFG_CHANGE \\\n+\t\tUINT32_C(0x10000)\n \t/*\n-\t * This field indicates the exact type of the completion.\n-\t * By convention, the LSB identifies the length of the\n-\t * record in 16B units.  Even values indicate 16B\n-\t * records.  Odd values indicate 32B\n-\t * records.\n+\t * If set to 1, it indicates that the EEE configuration\n+\t * on the port has changed.\n+\t * If set to 0, then there is no change in EEE configuration\n+\t * on the port.\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_TYPE_MASK \\\n-\t\tUINT32_C(0x3f)\n-\t#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_TYPE_SFT \\\n-\t\t0\n-\t/* HWRM Asynchronous Event Information */\n-\t#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_TYPE_HWRM_ASYNC_EVENT \\\n-\t\tUINT32_C(0x2e)\n-\t#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_TYPE_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_TYPE_HWRM_ASYNC_EVENT\n-\t/* Identifiers of events. */\n-\tuint16_t\tevent_id;\n-\t/* Link speed configuration was not allowed */\n-\t#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_EVENT_ID_LINK_SPEED_CFG_NOT_ALLOWED \\\n-\t\tUINT32_C(0x5)\n-\t#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_EVENT_ID_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_EVENT_ID_LINK_SPEED_CFG_NOT_ALLOWED\n-\t/* Event specific data */\n-\tuint32_t\tevent_data2;\n-\tuint8_t\topaque_v;\n+\t#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_DATA1_EEE_CFG_CHANGE \\\n+\t\tUINT32_C(0x20000)\n \t/*\n-\t * This value is written by the NIC such that it will be different\n-\t * for each pass through the completion queue.   The even passes\n-\t * will write 1.  The odd passes will write 0.\n+\t * If set to 1, it indicates that the pause configuration\n+\t * on the PHY has changed.\n+\t * If set to 0, then there is no change in the pause\n+\t * configuration on the PHY.\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_V \\\n-\t\tUINT32_C(0x1)\n-\t/* opaque is 7 b */\n-\t#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_OPAQUE_MASK \\\n-\t\tUINT32_C(0xfe)\n-\t#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_OPAQUE_SFT 1\n-\t/* 8-lsb timestamp from POR (100-msec resolution) */\n-\tuint8_t\ttimestamp_lo;\n-\t/* 16-lsb timestamp from POR (100-msec resolution) */\n-\tuint16_t\ttimestamp_hi;\n-\t/* Event specific data */\n-\tuint32_t\tevent_data1;\n-\t/* PORT ID */\n-\t#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_EVENT_DATA1_PORT_ID_MASK \\\n-\t\tUINT32_C(0xffff)\n-\t#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_EVENT_DATA1_PORT_ID_SFT \\\n-\t\t0\n+\t#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_DATA1_PAUSE_CFG_CHANGE \\\n+\t\tUINT32_C(0x40000)\n } __attribute__((packed));\n \n-/* hwrm_async_event_cmpl_link_speed_cfg_change (size:128b/16B) */\n-struct hwrm_async_event_cmpl_link_speed_cfg_change {\n+/* hwrm_async_event_cmpl_pf_drvr_unload (size:128b/16B) */\n+struct hwrm_async_event_cmpl_pf_drvr_unload {\n \tuint16_t\ttype;\n \t/*\n \t * This field indicates the exact type of the completion.\n@@ -3655,22 +3824,21 @@ struct hwrm_async_event_cmpl_link_speed_cfg_change {\n \t * records.  Odd values indicate 32B\n \t * records.\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_TYPE_MASK \\\n+\t#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_TYPE_MASK \\\n \t\tUINT32_C(0x3f)\n-\t#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_TYPE_SFT \\\n-\t\t0\n+\t#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_TYPE_SFT             0\n \t/* HWRM Asynchronous Event Information */\n-\t#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_TYPE_HWRM_ASYNC_EVENT \\\n+\t#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_TYPE_HWRM_ASYNC_EVENT \\\n \t\tUINT32_C(0x2e)\n-\t#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_TYPE_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_TYPE_HWRM_ASYNC_EVENT\n+\t#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_TYPE_LAST \\\n+\t\tHWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_TYPE_HWRM_ASYNC_EVENT\n \t/* Identifiers of events. */\n \tuint16_t\tevent_id;\n-\t/* Link speed configuration change */\n-\t#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_EVENT_ID_LINK_SPEED_CFG_CHANGE \\\n-\t\tUINT32_C(0x6)\n-\t#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_EVENT_ID_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_EVENT_ID_LINK_SPEED_CFG_CHANGE\n+\t/* PF driver unloaded */\n+\t#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_EVENT_ID_PF_DRVR_UNLOAD \\\n+\t\tUINT32_C(0x20)\n+\t#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_EVENT_ID_LAST \\\n+\t\tHWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_EVENT_ID_PF_DRVR_UNLOAD\n \t/* Event specific data */\n \tuint32_t\tevent_data2;\n \tuint8_t\topaque_v;\n@@ -3679,43 +3847,28 @@ struct hwrm_async_event_cmpl_link_speed_cfg_change {\n \t * for each pass through the completion queue.   The even passes\n \t * will write 1.  The odd passes will write 0.\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_V \\\n-\t\tUINT32_C(0x1)\n+\t#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_V          UINT32_C(0x1)\n \t/* opaque is 7 b */\n-\t#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_OPAQUE_MASK \\\n-\t\tUINT32_C(0xfe)\n-\t#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_OPAQUE_SFT 1\n+\t#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_OPAQUE_MASK UINT32_C(0xfe)\n+\t#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_OPAQUE_SFT 1\n \t/* 8-lsb timestamp from POR (100-msec resolution) */\n \tuint8_t\ttimestamp_lo;\n \t/* 16-lsb timestamp from POR (100-msec resolution) */\n \tuint16_t\ttimestamp_hi;\n \t/* Event specific data */\n \tuint32_t\tevent_data1;\n-\t/* PORT ID */\n-\t#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_EVENT_DATA1_PORT_ID_MASK \\\n+\t/* PF ID */\n+\t#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_EVENT_DATA1_FUNC_ID_MASK \\\n \t\tUINT32_C(0xffff)\n-\t#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_EVENT_DATA1_PORT_ID_SFT \\\n-\t\t0\n-\t/*\n-\t * If set to 1, it indicates that the supported link speeds\n-\t * configuration on the port has changed.\n-\t * If set to 0, then there is no change in supported link speeds\n-\t * configuration.\n-\t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_EVENT_DATA1_SUPPORTED_LINK_SPEEDS_CHANGE \\\n-\t\tUINT32_C(0x10000)\n-\t/*\n-\t * If set to 1, it indicates that the link speed configuration\n-\t * on the port has become illegal or invalid.\n-\t * If set to 0, then the link speed configuration on the port is\n-\t * legal or valid.\n-\t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_EVENT_DATA1_ILLEGAL_LINK_SPEED_CFG \\\n-\t\tUINT32_C(0x20000)\n+\t#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_EVENT_DATA1_FUNC_ID_SFT 0\n+\t/* Indicates the physical port this pf belongs to */\n+\t#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_EVENT_DATA1_PORT_MASK \\\n+\t\tUINT32_C(0x70000)\n+\t#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_EVENT_DATA1_PORT_SFT    16\n } __attribute__((packed));\n \n-/* hwrm_async_event_cmpl_port_phy_cfg_change (size:128b/16B) */\n-struct hwrm_async_event_cmpl_port_phy_cfg_change {\n+/* hwrm_async_event_cmpl_vf_cfg_change (size:128b/16B) */\n+struct hwrm_async_event_cmpl_vf_cfg_change {\n \tuint16_t\ttype;\n \t/*\n \t * This field indicates the exact type of the completion.\n@@ -3724,22 +3877,21 @@ struct hwrm_async_event_cmpl_port_phy_cfg_change {\n \t * records.  Odd values indicate 32B\n \t * records.\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_TYPE_MASK \\\n+\t#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_TYPE_MASK \\\n \t\tUINT32_C(0x3f)\n-\t#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_TYPE_SFT \\\n-\t\t0\n+\t#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_TYPE_SFT             0\n \t/* HWRM Asynchronous Event Information */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_TYPE_HWRM_ASYNC_EVENT \\\n+\t#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_TYPE_HWRM_ASYNC_EVENT \\\n \t\tUINT32_C(0x2e)\n-\t#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_TYPE_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_TYPE_HWRM_ASYNC_EVENT\n+\t#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_TYPE_LAST \\\n+\t\tHWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_TYPE_HWRM_ASYNC_EVENT\n \t/* Identifiers of events. */\n \tuint16_t\tevent_id;\n-\t/* Port PHY configuration change */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_ID_PORT_PHY_CFG_CHANGE \\\n-\t\tUINT32_C(0x7)\n-\t#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_ID_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_ID_PORT_PHY_CFG_CHANGE\n+\t/* VF Configuration Change */\n+\t#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_ID_VF_CFG_CHANGE \\\n+\t\tUINT32_C(0x33)\n+\t#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_ID_LAST \\\n+\t\tHWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_ID_VF_CFG_CHANGE\n \t/* Event specific data */\n \tuint32_t\tevent_data2;\n \tuint8_t\topaque_v;\n@@ -3748,101 +3900,60 @@ struct hwrm_async_event_cmpl_port_phy_cfg_change {\n \t * for each pass through the completion queue.   The even passes\n \t * will write 1.  The odd passes will write 0.\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_V \\\n-\t\tUINT32_C(0x1)\n+\t#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_V          UINT32_C(0x1)\n \t/* opaque is 7 b */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_OPAQUE_MASK \\\n-\t\tUINT32_C(0xfe)\n-\t#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_OPAQUE_SFT 1\n+\t#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_OPAQUE_MASK UINT32_C(0xfe)\n+\t#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_OPAQUE_SFT 1\n \t/* 8-lsb timestamp from POR (100-msec resolution) */\n \tuint8_t\ttimestamp_lo;\n \t/* 16-lsb timestamp from POR (100-msec resolution) */\n \tuint16_t\ttimestamp_hi;\n-\t/* Event specific data */\n+\t/*\n+\t * Each flag provided in this field indicates a specific VF\n+\t * configuration change. At least one of these flags shall be set to 1\n+\t * when an asynchronous event completion of this type is provided\n+\t * by the HWRM.\n+\t */\n \tuint32_t\tevent_data1;\n-\t/* PORT ID */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_DATA1_PORT_ID_MASK \\\n-\t\tUINT32_C(0xffff)\n-\t#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_DATA1_PORT_ID_SFT \\\n-\t\t0\n \t/*\n-\t * If set to 1, it indicates that the FEC\n-\t * configuration on the port has changed.\n-\t * If set to 0, then there is no change in FEC configuration.\n+\t * If this bit is set to 1, then the value of MTU\n+\t * was changed on this VF.\n+\t * If set to 0, then this bit should be ignored.\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_DATA1_FEC_CFG_CHANGE \\\n-\t\tUINT32_C(0x10000)\n+\t#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_DATA1_MTU_CHANGE \\\n+\t\tUINT32_C(0x1)\n \t/*\n-\t * If set to 1, it indicates that the EEE configuration\n-\t * on the port has changed.\n-\t * If set to 0, then there is no change in EEE configuration\n-\t * on the port.\n+\t * If this bit is set to 1, then the value of MRU\n+\t * was changed on this VF.\n+\t * If set to 0, then this bit should be ignored.\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_DATA1_EEE_CFG_CHANGE \\\n-\t\tUINT32_C(0x20000)\n+\t#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_DATA1_MRU_CHANGE \\\n+\t\tUINT32_C(0x2)\n \t/*\n-\t * If set to 1, it indicates that the pause configuration\n-\t * on the PHY has changed.\n-\t * If set to 0, then there is no change in the pause\n-\t * configuration on the PHY.\n+\t * If this bit is set to 1, then the value of default MAC\n+\t * address was changed on this VF.\n+\t * If set to 0, then this bit should be ignored.\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_DATA1_PAUSE_CFG_CHANGE \\\n-\t\tUINT32_C(0x40000)\n-} __attribute__((packed));\n-\n-/* hwrm_async_event_cmpl_func_drvr_unload (size:128b/16B) */\n-struct hwrm_async_event_cmpl_func_drvr_unload {\n-\tuint16_t\ttype;\n+\t#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_DATA1_DFLT_MAC_ADDR_CHANGE \\\n+\t\tUINT32_C(0x4)\n \t/*\n-\t * This field indicates the exact type of the completion.\n-\t * By convention, the LSB identifies the length of the\n-\t * record in 16B units.  Even values indicate 16B\n-\t * records.  Odd values indicate 32B\n-\t * records.\n+\t * If this bit is set to 1, then the value of default VLAN\n+\t * was changed on this VF.\n+\t * If set to 0, then this bit should be ignored.\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_TYPE_MASK \\\n-\t\tUINT32_C(0x3f)\n-\t#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_TYPE_SFT             0\n-\t/* HWRM Asynchronous Event Information */\n-\t#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_TYPE_HWRM_ASYNC_EVENT \\\n-\t\tUINT32_C(0x2e)\n-\t#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_TYPE_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_TYPE_HWRM_ASYNC_EVENT\n-\t/* Identifiers of events. */\n-\tuint16_t\tevent_id;\n-\t/* Function driver unloaded */\n-\t#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_EVENT_ID_FUNC_DRVR_UNLOAD \\\n-\t\tUINT32_C(0x10)\n-\t#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_EVENT_ID_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_EVENT_ID_FUNC_DRVR_UNLOAD\n-\t/* Event specific data */\n-\tuint32_t\tevent_data2;\n-\tuint8_t\topaque_v;\n+\t#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_DATA1_DFLT_VLAN_CHANGE \\\n+\t\tUINT32_C(0x8)\n \t/*\n-\t * This value is written by the NIC such that it will be different\n-\t * for each pass through the completion queue.   The even passes\n-\t * will write 1.  The odd passes will write 0.\n+\t * If this bit is set to 1, then the value of trusted VF enable\n+\t * was changed on this VF.\n+\t * If set to 0, then this bit should be ignored.\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_V          UINT32_C(0x1)\n-\t/* opaque is 7 b */\n-\t#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_OPAQUE_MASK \\\n-\t\tUINT32_C(0xfe)\n-\t#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_OPAQUE_SFT 1\n-\t/* 8-lsb timestamp from POR (100-msec resolution) */\n-\tuint8_t\ttimestamp_lo;\n-\t/* 16-lsb timestamp from POR (100-msec resolution) */\n-\tuint16_t\ttimestamp_hi;\n-\t/* Event specific data */\n-\tuint32_t\tevent_data1;\n-\t/* Function ID */\n-\t#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_EVENT_DATA1_FUNC_ID_MASK \\\n-\t\tUINT32_C(0xffff)\n-\t#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_EVENT_DATA1_FUNC_ID_SFT \\\n-\t\t0\n+\t#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_DATA1_TRUSTED_VF_CFG_CHANGE \\\n+\t\tUINT32_C(0x10)\n } __attribute__((packed));\n \n-/* hwrm_async_event_cmpl_func_drvr_load (size:128b/16B) */\n-struct hwrm_async_event_cmpl_func_drvr_load {\n+/* hwrm_async_event_cmpl_hwrm_error (size:128b/16B) */\n+struct hwrm_async_event_cmpl_hwrm_error {\n \tuint16_t\ttype;\n \t/*\n \t * This field indicates the exact type of the completion.\n@@ -3851,673 +3962,317 @@ struct hwrm_async_event_cmpl_func_drvr_load {\n \t * records.  Odd values indicate 32B\n \t * records.\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_TYPE_MASK \\\n+\t#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_TYPE_MASK \\\n \t\tUINT32_C(0x3f)\n-\t#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_TYPE_SFT             0\n+\t#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_TYPE_SFT             0\n \t/* HWRM Asynchronous Event Information */\n-\t#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_TYPE_HWRM_ASYNC_EVENT \\\n+\t#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_TYPE_HWRM_ASYNC_EVENT \\\n \t\tUINT32_C(0x2e)\n-\t#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_TYPE_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_TYPE_HWRM_ASYNC_EVENT\n+\t#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_TYPE_LAST \\\n+\t\tHWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_TYPE_HWRM_ASYNC_EVENT\n \t/* Identifiers of events. */\n \tuint16_t\tevent_id;\n-\t/* Function driver loaded */\n-\t#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_EVENT_ID_FUNC_DRVR_LOAD \\\n-\t\tUINT32_C(0x11)\n-\t#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_EVENT_ID_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_EVENT_ID_FUNC_DRVR_LOAD\n+\t/* HWRM Error */\n+\t#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_ID_HWRM_ERROR \\\n+\t\tUINT32_C(0xff)\n+\t#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_ID_LAST \\\n+\t\tHWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_ID_HWRM_ERROR\n \t/* Event specific data */\n \tuint32_t\tevent_data2;\n+\t/* Severity of HWRM Error */\n+\t#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA2_SEVERITY_MASK \\\n+\t\tUINT32_C(0xff)\n+\t#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA2_SEVERITY_SFT     0\n+\t/* Warning */\n+\t#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA2_SEVERITY_WARNING \\\n+\t\tUINT32_C(0x0)\n+\t/* Non-fatal Error */\n+\t#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA2_SEVERITY_NONFATAL \\\n+\t\tUINT32_C(0x1)\n+\t/* Fatal Error */\n+\t#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA2_SEVERITY_FATAL \\\n+\t\tUINT32_C(0x2)\n+\t#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA2_SEVERITY_LAST \\\n+\t\tHWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA2_SEVERITY_FATAL\n \tuint8_t\topaque_v;\n \t/*\n \t * This value is written by the NIC such that it will be different\n \t * for each pass through the completion queue.   The even passes\n \t * will write 1.  The odd passes will write 0.\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_V          UINT32_C(0x1)\n+\t#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_V          UINT32_C(0x1)\n \t/* opaque is 7 b */\n-\t#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_OPAQUE_MASK UINT32_C(0xfe)\n-\t#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_OPAQUE_SFT 1\n+\t#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_OPAQUE_MASK UINT32_C(0xfe)\n+\t#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_OPAQUE_SFT 1\n \t/* 8-lsb timestamp from POR (100-msec resolution) */\n \tuint8_t\ttimestamp_lo;\n \t/* 16-lsb timestamp from POR (100-msec resolution) */\n \tuint16_t\ttimestamp_hi;\n \t/* Event specific data */\n \tuint32_t\tevent_data1;\n-\t/* Function ID */\n-\t#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_EVENT_DATA1_FUNC_ID_MASK \\\n-\t\tUINT32_C(0xffff)\n-\t#define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_EVENT_DATA1_FUNC_ID_SFT 0\n+\t/* Time stamp for error event */\n+\t#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA1_TIMESTAMP \\\n+\t\tUINT32_C(0x1)\n } __attribute__((packed));\n \n-/* hwrm_async_event_cmpl_func_flr_proc_cmplt (size:128b/16B) */\n-struct hwrm_async_event_cmpl_func_flr_proc_cmplt {\n-\tuint16_t\ttype;\n-\t/*\n-\t * This field indicates the exact type of the completion.\n-\t * By convention, the LSB identifies the length of the\n-\t * record in 16B units.  Even values indicate 16B\n-\t * records.  Odd values indicate 32B\n-\t * records.\n-\t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_TYPE_MASK \\\n-\t\tUINT32_C(0x3f)\n-\t#define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_TYPE_SFT \\\n-\t\t0\n-\t/* HWRM Asynchronous Event Information */\n-\t#define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_TYPE_HWRM_ASYNC_EVENT \\\n-\t\tUINT32_C(0x2e)\n-\t#define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_TYPE_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_TYPE_HWRM_ASYNC_EVENT\n-\t/* Identifiers of events. */\n-\tuint16_t\tevent_id;\n-\t/* Function FLR related processing has completed */\n-\t#define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_EVENT_ID_FUNC_FLR_PROC_CMPLT \\\n-\t\tUINT32_C(0x12)\n-\t#define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_EVENT_ID_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_EVENT_ID_FUNC_FLR_PROC_CMPLT\n-\t/* Event specific data */\n-\tuint32_t\tevent_data2;\n-\tuint8_t\topaque_v;\n+/*******************\n+ * hwrm_func_reset *\n+ *******************/\n+\n+\n+/* hwrm_func_reset_input (size:192b/24B) */\n+struct hwrm_func_reset_input {\n+\t/* The HWRM command request type. */\n+\tuint16_t\treq_type;\n \t/*\n-\t * This value is written by the NIC such that it will be different\n-\t * for each pass through the completion queue.   The even passes\n-\t * will write 1.  The odd passes will write 0.\n+\t * The completion ring to send the completion event on. This should\n+\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_V \\\n-\t\tUINT32_C(0x1)\n-\t/* opaque is 7 b */\n-\t#define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_OPAQUE_MASK \\\n-\t\tUINT32_C(0xfe)\n-\t#define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_OPAQUE_SFT 1\n-\t/* 8-lsb timestamp from POR (100-msec resolution) */\n-\tuint8_t\ttimestamp_lo;\n-\t/* 16-lsb timestamp from POR (100-msec resolution) */\n-\tuint16_t\ttimestamp_hi;\n-\t/* Event specific data */\n-\tuint32_t\tevent_data1;\n-\t/* Function ID */\n-\t#define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_EVENT_DATA1_FUNC_ID_MASK \\\n-\t\tUINT32_C(0xffff)\n-\t#define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_EVENT_DATA1_FUNC_ID_SFT \\\n-\t\t0\n-} __attribute__((packed));\n-\n-/* hwrm_async_event_cmpl_pf_drvr_unload (size:128b/16B) */\n-struct hwrm_async_event_cmpl_pf_drvr_unload {\n-\tuint16_t\ttype;\n+\tuint16_t\tcmpl_ring;\n \t/*\n-\t * This field indicates the exact type of the completion.\n-\t * By convention, the LSB identifies the length of the\n-\t * record in 16B units.  Even values indicate 16B\n-\t * records.  Odd values indicate 32B\n-\t * records.\n+\t * The sequence ID is used by the driver for tracking multiple\n+\t * commands. This ID is treated as opaque data by the firmware and\n+\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_TYPE_MASK \\\n-\t\tUINT32_C(0x3f)\n-\t#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_TYPE_SFT             0\n-\t/* HWRM Asynchronous Event Information */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_TYPE_HWRM_ASYNC_EVENT \\\n-\t\tUINT32_C(0x2e)\n-\t#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_TYPE_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_TYPE_HWRM_ASYNC_EVENT\n-\t/* Identifiers of events. */\n-\tuint16_t\tevent_id;\n-\t/* PF driver unloaded */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_EVENT_ID_PF_DRVR_UNLOAD \\\n-\t\tUINT32_C(0x20)\n-\t#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_EVENT_ID_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_EVENT_ID_PF_DRVR_UNLOAD\n-\t/* Event specific data */\n-\tuint32_t\tevent_data2;\n-\tuint8_t\topaque_v;\n+\tuint16_t\tseq_id;\n \t/*\n-\t * This value is written by the NIC such that it will be different\n-\t * for each pass through the completion queue.   The even passes\n-\t * will write 1.  The odd passes will write 0.\n+\t * The target ID of the command:\n+\t * * 0x0-0xFFF8 - The function ID\n+\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n+\t * * 0xFFFF - HWRM\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_V          UINT32_C(0x1)\n-\t/* opaque is 7 b */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_OPAQUE_MASK UINT32_C(0xfe)\n-\t#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_OPAQUE_SFT 1\n-\t/* 8-lsb timestamp from POR (100-msec resolution) */\n-\tuint8_t\ttimestamp_lo;\n-\t/* 16-lsb timestamp from POR (100-msec resolution) */\n-\tuint16_t\ttimestamp_hi;\n-\t/* Event specific data */\n-\tuint32_t\tevent_data1;\n-\t/* PF ID */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_EVENT_DATA1_FUNC_ID_MASK \\\n-\t\tUINT32_C(0xffff)\n-\t#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_EVENT_DATA1_FUNC_ID_SFT 0\n-\t/* Indicates the physical port this pf belongs to */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_EVENT_DATA1_PORT_MASK \\\n-\t\tUINT32_C(0x70000)\n-\t#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_EVENT_DATA1_PORT_SFT    16\n-} __attribute__((packed));\n-\n-/* hwrm_async_event_cmpl_pf_drvr_load (size:128b/16B) */\n-struct hwrm_async_event_cmpl_pf_drvr_load {\n-\tuint16_t\ttype;\n+\tuint16_t\ttarget_id;\n \t/*\n-\t * This field indicates the exact type of the completion.\n-\t * By convention, the LSB identifies the length of the\n-\t * record in 16B units.  Even values indicate 16B\n-\t * records.  Odd values indicate 32B\n-\t * records.\n+\t * A physical address pointer pointing to a host buffer that the\n+\t * command's response data will be written. This can be either a host\n+\t * physical address (HPA) or a guest physical address (GPA) and must\n+\t * point to a physically contiguous block of memory.\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_TYPE_MASK \\\n-\t\tUINT32_C(0x3f)\n-\t#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_TYPE_SFT             0\n-\t/* HWRM Asynchronous Event Information */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_TYPE_HWRM_ASYNC_EVENT \\\n-\t\tUINT32_C(0x2e)\n-\t#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_TYPE_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_TYPE_HWRM_ASYNC_EVENT\n-\t/* Identifiers of events. */\n-\tuint16_t\tevent_id;\n-\t/* PF driver loaded */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_EVENT_ID_PF_DRVR_LOAD \\\n-\t\tUINT32_C(0x21)\n-\t#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_EVENT_ID_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_EVENT_ID_PF_DRVR_LOAD\n-\t/* Event specific data */\n-\tuint32_t\tevent_data2;\n-\tuint8_t\topaque_v;\n+\tuint64_t\tresp_addr;\n+\tuint32_t\tenables;\n \t/*\n-\t * This value is written by the NIC such that it will be different\n-\t * for each pass through the completion queue.   The even passes\n-\t * will write 1.  The odd passes will write 0.\n+\t * This bit must be '1' for the vf_id_valid field to be\n+\t * configured.\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_V          UINT32_C(0x1)\n-\t/* opaque is 7 b */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_OPAQUE_MASK UINT32_C(0xfe)\n-\t#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_OPAQUE_SFT 1\n-\t/* 8-lsb timestamp from POR (100-msec resolution) */\n-\tuint8_t\ttimestamp_lo;\n-\t/* 16-lsb timestamp from POR (100-msec resolution) */\n-\tuint16_t\ttimestamp_hi;\n-\t/* Event specific data */\n-\tuint32_t\tevent_data1;\n-\t/* PF ID */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_EVENT_DATA1_FUNC_ID_MASK \\\n-\t\tUINT32_C(0xffff)\n-\t#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_EVENT_DATA1_FUNC_ID_SFT 0\n-\t/* Indicates the physical port this pf belongs to */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_EVENT_DATA1_PORT_MASK \\\n-\t\tUINT32_C(0x70000)\n-\t#define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_EVENT_DATA1_PORT_SFT    16\n-} __attribute__((packed));\n-\n-/* hwrm_async_event_cmpl_vf_flr (size:128b/16B) */\n-struct hwrm_async_event_cmpl_vf_flr {\n-\tuint16_t\ttype;\n+\t#define HWRM_FUNC_RESET_INPUT_ENABLES_VF_ID_VALID     UINT32_C(0x1)\n \t/*\n-\t * This field indicates the exact type of the completion.\n-\t * By convention, the LSB identifies the length of the\n-\t * record in 16B units.  Even values indicate 16B\n-\t * records.  Odd values indicate 32B\n-\t * records.\n+\t * The ID of the VF that this PF is trying to reset.\n+\t * Only the parent PF shall be allowed to reset a child VF.\n+\t *\n+\t * A parent PF driver shall use this field only when a specific child VF\n+\t * is requested to be reset.\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_VF_FLR_TYPE_MASK \\\n-\t\tUINT32_C(0x3f)\n-\t#define HWRM_ASYNC_EVENT_CMPL_VF_FLR_TYPE_SFT             0\n-\t/* HWRM Asynchronous Event Information */\n-\t#define HWRM_ASYNC_EVENT_CMPL_VF_FLR_TYPE_HWRM_ASYNC_EVENT \\\n-\t\tUINT32_C(0x2e)\n-\t#define HWRM_ASYNC_EVENT_CMPL_VF_FLR_TYPE_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_VF_FLR_TYPE_HWRM_ASYNC_EVENT\n-\t/* Identifiers of events. */\n-\tuint16_t\tevent_id;\n-\t/* VF Function Level Reset (FLR) */\n-\t#define HWRM_ASYNC_EVENT_CMPL_VF_FLR_EVENT_ID_VF_FLR UINT32_C(0x30)\n-\t#define HWRM_ASYNC_EVENT_CMPL_VF_FLR_EVENT_ID_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_VF_FLR_EVENT_ID_VF_FLR\n-\t/* Event specific data */\n-\tuint32_t\tevent_data2;\n-\tuint8_t\topaque_v;\n+\tuint16_t\tvf_id;\n+\t/* This value indicates the level of a function reset. */\n+\tuint8_t\tfunc_reset_level;\n \t/*\n-\t * This value is written by the NIC such that it will be different\n-\t * for each pass through the completion queue.   The even passes\n-\t * will write 1.  The odd passes will write 0.\n+\t * Reset the caller function and its children VFs (if any). If no\n+\t * children functions exist, then reset the caller function only.\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_VF_FLR_V          UINT32_C(0x1)\n-\t/* opaque is 7 b */\n-\t#define HWRM_ASYNC_EVENT_CMPL_VF_FLR_OPAQUE_MASK UINT32_C(0xfe)\n-\t#define HWRM_ASYNC_EVENT_CMPL_VF_FLR_OPAQUE_SFT 1\n-\t/* 8-lsb timestamp from POR (100-msec resolution) */\n-\tuint8_t\ttimestamp_lo;\n-\t/* 16-lsb timestamp from POR (100-msec resolution) */\n-\tuint16_t\ttimestamp_hi;\n-\t/* Event specific data */\n-\tuint32_t\tevent_data1;\n-\t/* VF ID */\n-\t#define HWRM_ASYNC_EVENT_CMPL_VF_FLR_EVENT_DATA1_VF_ID_MASK \\\n-\t\tUINT32_C(0xffff)\n-\t#define HWRM_ASYNC_EVENT_CMPL_VF_FLR_EVENT_DATA1_VF_ID_SFT 0\n-\t/* Indicates the physical function this event occured on. */\n-\t#define HWRM_ASYNC_EVENT_CMPL_VF_FLR_EVENT_DATA1_PF_ID_MASK \\\n-\t\tUINT32_C(0xff0000)\n-\t#define HWRM_ASYNC_EVENT_CMPL_VF_FLR_EVENT_DATA1_PF_ID_SFT 16\n-} __attribute__((packed));\n-\n-/* hwrm_async_event_cmpl_vf_mac_addr_change (size:128b/16B) */\n-struct hwrm_async_event_cmpl_vf_mac_addr_change {\n-\tuint16_t\ttype;\n+\t#define HWRM_FUNC_RESET_INPUT_FUNC_RESET_LEVEL_RESETALL \\\n+\t\tUINT32_C(0x0)\n+\t/* Reset the caller function only */\n+\t#define HWRM_FUNC_RESET_INPUT_FUNC_RESET_LEVEL_RESETME \\\n+\t\tUINT32_C(0x1)\n \t/*\n-\t * This field indicates the exact type of the completion.\n-\t * By convention, the LSB identifies the length of the\n-\t * record in 16B units.  Even values indicate 16B\n-\t * records.  Odd values indicate 32B\n-\t * records.\n+\t * Reset all children VFs of the caller function driver if the\n+\t * caller is a PF driver.\n+\t * It is an error to specify this level by a VF driver.\n+\t * It is an error to specify this level by a PF driver with\n+\t * no children VFs.\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_TYPE_MASK \\\n-\t\tUINT32_C(0x3f)\n-\t#define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_TYPE_SFT             0\n-\t/* HWRM Asynchronous Event Information */\n-\t#define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_TYPE_HWRM_ASYNC_EVENT \\\n-\t\tUINT32_C(0x2e)\n-\t#define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_TYPE_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_TYPE_HWRM_ASYNC_EVENT\n-\t/* Identifiers of events. */\n-\tuint16_t\tevent_id;\n-\t/* VF MAC Address Change */\n-\t#define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_EVENT_ID_VF_MAC_ADDR_CHANGE \\\n-\t\tUINT32_C(0x31)\n-\t#define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_EVENT_ID_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_EVENT_ID_VF_MAC_ADDR_CHANGE\n-\t/* Event specific data */\n-\tuint32_t\tevent_data2;\n-\tuint8_t\topaque_v;\n+\t#define HWRM_FUNC_RESET_INPUT_FUNC_RESET_LEVEL_RESETCHILDREN \\\n+\t\tUINT32_C(0x2)\n \t/*\n-\t * This value is written by the NIC such that it will be different\n-\t * for each pass through the completion queue.   The even passes\n-\t * will write 1.  The odd passes will write 0.\n+\t * Reset a specific VF of the caller function driver if the caller\n+\t * is the parent PF driver.\n+\t * It is an error to specify this level by a VF driver.\n+\t * It is an error to specify this level by a PF driver that is not\n+\t * the parent of the VF that is being requested to reset.\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_V \\\n-\t\tUINT32_C(0x1)\n-\t/* opaque is 7 b */\n-\t#define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_OPAQUE_MASK \\\n-\t\tUINT32_C(0xfe)\n-\t#define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_OPAQUE_SFT 1\n-\t/* 8-lsb timestamp from POR (100-msec resolution) */\n-\tuint8_t\ttimestamp_lo;\n-\t/* 16-lsb timestamp from POR (100-msec resolution) */\n-\tuint16_t\ttimestamp_hi;\n-\t/* Event specific data */\n-\tuint32_t\tevent_data1;\n-\t/* VF ID */\n-\t#define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_EVENT_DATA1_VF_ID_MASK \\\n-\t\tUINT32_C(0xffff)\n-\t#define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_EVENT_DATA1_VF_ID_SFT \\\n-\t\t0\n+\t#define HWRM_FUNC_RESET_INPUT_FUNC_RESET_LEVEL_RESETVF \\\n+\t\tUINT32_C(0x3)\n+\t#define HWRM_FUNC_RESET_INPUT_FUNC_RESET_LEVEL_LAST \\\n+\t\tHWRM_FUNC_RESET_INPUT_FUNC_RESET_LEVEL_RESETVF\n+\tuint8_t\tunused_0;\n } __attribute__((packed));\n \n-/* hwrm_async_event_cmpl_pf_vf_comm_status_change (size:128b/16B) */\n-struct hwrm_async_event_cmpl_pf_vf_comm_status_change {\n-\tuint16_t\ttype;\n+/* hwrm_func_reset_output (size:128b/16B) */\n+struct hwrm_func_reset_output {\n+\t/* The specific error status for the command. */\n+\tuint16_t\terror_code;\n+\t/* The HWRM command request type. */\n+\tuint16_t\treq_type;\n+\t/* The sequence ID from the original command. */\n+\tuint16_t\tseq_id;\n+\t/* The length of the response data in number of bytes. */\n+\tuint16_t\tresp_len;\n+\tuint8_t\tunused_0[7];\n \t/*\n-\t * This field indicates the exact type of the completion.\n-\t * By convention, the LSB identifies the length of the\n-\t * record in 16B units.  Even values indicate 16B\n-\t * records.  Odd values indicate 32B\n-\t * records.\n+\t * This field is used in Output records to indicate that the output\n+\t * is completely written to RAM.  This field should be read as '1'\n+\t * to indicate that the output has been completely written.\n+\t * When writing a command completion or response to an internal processor,\n+\t * the order of writes has to be such that this field is written last.\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_TYPE_MASK \\\n-\t\tUINT32_C(0x3f)\n-\t#define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_TYPE_SFT \\\n-\t\t0\n-\t/* HWRM Asynchronous Event Information */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_TYPE_HWRM_ASYNC_EVENT \\\n-\t\tUINT32_C(0x2e)\n-\t#define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_TYPE_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_TYPE_HWRM_ASYNC_EVENT\n-\t/* Identifiers of events. */\n-\tuint16_t\tevent_id;\n-\t/* PF-VF communication channel status change. */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_EVENT_ID_PF_VF_COMM_STATUS_CHANGE \\\n-\t\tUINT32_C(0x32)\n-\t#define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_EVENT_ID_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_EVENT_ID_PF_VF_COMM_STATUS_CHANGE\n-\t/* Event specific data */\n-\tuint32_t\tevent_data2;\n-\tuint8_t\topaque_v;\n-\t/*\n-\t * This value is written by the NIC such that it will be different\n-\t * for each pass through the completion queue.   The even passes\n-\t * will write 1.  The odd passes will write 0.\n-\t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_V \\\n-\t\tUINT32_C(0x1)\n-\t/* opaque is 7 b */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_OPAQUE_MASK \\\n-\t\tUINT32_C(0xfe)\n-\t#define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_OPAQUE_SFT 1\n-\t/* 8-lsb timestamp from POR (100-msec resolution) */\n-\tuint8_t\ttimestamp_lo;\n-\t/* 16-lsb timestamp from POR (100-msec resolution) */\n-\tuint16_t\ttimestamp_hi;\n-\t/* Event specific data */\n-\tuint32_t\tevent_data1;\n-\t/*\n-\t * If this bit is set to 1, then it indicates that the PF-VF\n-\t * communication was lost and it is established.\n-\t * If this bit set to 0, then it indicates that the PF-VF\n-\t * communication was established and it is lost.\n-\t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_EVENT_DATA1_COMM_ESTABLISHED \\\n-\t\tUINT32_C(0x1)\n+\tuint8_t\tvalid;\n } __attribute__((packed));\n \n-/* hwrm_async_event_cmpl_vf_cfg_change (size:128b/16B) */\n-struct hwrm_async_event_cmpl_vf_cfg_change {\n-\tuint16_t\ttype;\n-\t/*\n-\t * This field indicates the exact type of the completion.\n-\t * By convention, the LSB identifies the length of the\n-\t * record in 16B units.  Even values indicate 16B\n-\t * records.  Odd values indicate 32B\n-\t * records.\n-\t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_TYPE_MASK \\\n-\t\tUINT32_C(0x3f)\n-\t#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_TYPE_SFT             0\n-\t/* HWRM Asynchronous Event Information */\n-\t#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_TYPE_HWRM_ASYNC_EVENT \\\n-\t\tUINT32_C(0x2e)\n-\t#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_TYPE_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_TYPE_HWRM_ASYNC_EVENT\n-\t/* Identifiers of events. */\n-\tuint16_t\tevent_id;\n-\t/* VF Configuration Change */\n-\t#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_ID_VF_CFG_CHANGE \\\n-\t\tUINT32_C(0x33)\n-\t#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_ID_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_ID_VF_CFG_CHANGE\n-\t/* Event specific data */\n-\tuint32_t\tevent_data2;\n-\tuint8_t\topaque_v;\n+/********************\n+ * hwrm_func_getfid *\n+ ********************/\n+\n+\n+/* hwrm_func_getfid_input (size:192b/24B) */\n+struct hwrm_func_getfid_input {\n+\t/* The HWRM command request type. */\n+\tuint16_t\treq_type;\n \t/*\n-\t * This value is written by the NIC such that it will be different\n-\t * for each pass through the completion queue.   The even passes\n-\t * will write 1.  The odd passes will write 0.\n+\t * The completion ring to send the completion event on. This should\n+\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_V          UINT32_C(0x1)\n-\t/* opaque is 7 b */\n-\t#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_OPAQUE_MASK UINT32_C(0xfe)\n-\t#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_OPAQUE_SFT 1\n-\t/* 8-lsb timestamp from POR (100-msec resolution) */\n-\tuint8_t\ttimestamp_lo;\n-\t/* 16-lsb timestamp from POR (100-msec resolution) */\n-\tuint16_t\ttimestamp_hi;\n+\tuint16_t\tcmpl_ring;\n \t/*\n-\t * Each flag provided in this field indicates a specific VF\n-\t * configuration change. At least one of these flags shall be set to 1\n-\t * when an asynchronous event completion of this type is provided\n-\t * by the HWRM.\n+\t * The sequence ID is used by the driver for tracking multiple\n+\t * commands. This ID is treated as opaque data by the firmware and\n+\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n \t */\n-\tuint32_t\tevent_data1;\n+\tuint16_t\tseq_id;\n \t/*\n-\t * If this bit is set to 1, then the value of MTU\n-\t * was changed on this VF.\n-\t * If set to 0, then this bit should be ignored.\n+\t * The target ID of the command:\n+\t * * 0x0-0xFFF8 - The function ID\n+\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n+\t * * 0xFFFF - HWRM\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_DATA1_MTU_CHANGE \\\n-\t\tUINT32_C(0x1)\n+\tuint16_t\ttarget_id;\n \t/*\n-\t * If this bit is set to 1, then the value of MRU\n-\t * was changed on this VF.\n-\t * If set to 0, then this bit should be ignored.\n+\t * A physical address pointer pointing to a host buffer that the\n+\t * command's response data will be written. This can be either a host\n+\t * physical address (HPA) or a guest physical address (GPA) and must\n+\t * point to a physically contiguous block of memory.\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_DATA1_MRU_CHANGE \\\n-\t\tUINT32_C(0x2)\n+\tuint64_t\tresp_addr;\n+\tuint32_t\tenables;\n \t/*\n-\t * If this bit is set to 1, then the value of default MAC\n-\t * address was changed on this VF.\n-\t * If set to 0, then this bit should be ignored.\n+\t * This bit must be '1' for the pci_id field to be\n+\t * configured.\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_DATA1_DFLT_MAC_ADDR_CHANGE \\\n-\t\tUINT32_C(0x4)\n+\t#define HWRM_FUNC_GETFID_INPUT_ENABLES_PCI_ID     UINT32_C(0x1)\n \t/*\n-\t * If this bit is set to 1, then the value of default VLAN\n-\t * was changed on this VF.\n-\t * If set to 0, then this bit should be ignored.\n+\t * This value is the PCI ID of the queried function.\n+\t * If ARI is enabled, then it is\n+\t * Bus Number (8b):Function Number(8b). Otherwise, it is\n+\t * Bus Number (8b):Device Number (5b):Function Number(3b).\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_DATA1_DFLT_VLAN_CHANGE \\\n-\t\tUINT32_C(0x8)\n+\tuint16_t\tpci_id;\n+\tuint8_t\tunused_0[2];\n } __attribute__((packed));\n \n-/* hwrm_async_event_cmpl_llfc_pfc_change (size:128b/16B) */\n-struct hwrm_async_event_cmpl_llfc_pfc_change {\n-\tuint16_t\ttype;\n+/* hwrm_func_getfid_output (size:128b/16B) */\n+struct hwrm_func_getfid_output {\n+\t/* The specific error status for the command. */\n+\tuint16_t\terror_code;\n+\t/* The HWRM command request type. */\n+\tuint16_t\treq_type;\n+\t/* The sequence ID from the original command. */\n+\tuint16_t\tseq_id;\n+\t/* The length of the response data in number of bytes. */\n+\tuint16_t\tresp_len;\n \t/*\n-\t * This field indicates the exact type of the completion.\n-\t * By convention, the LSB identifies the length of the\n-\t * record in 16B units.  Even values indicate 16B\n-\t * records.  Odd values indicate 32B\n-\t * records.\n+\t * FID value.  This value is used to identify operations on the PCI\n+\t * bus as belonging to a particular PCI function.\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_TYPE_MASK \\\n-\t\tUINT32_C(0x3f)\n-\t#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_TYPE_SFT             0\n-\t/* HWRM Asynchronous Event Information */\n-\t#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_TYPE_HWRM_ASYNC_EVENT \\\n-\t\tUINT32_C(0x2e)\n-\t#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_TYPE_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_TYPE_HWRM_ASYNC_EVENT\n-\t/* unused1 is 10 b */\n-\t#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_UNUSED1_MASK \\\n-\t\tUINT32_C(0xffc0)\n-\t#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_UNUSED1_SFT          6\n-\t/* Identifiers of events. */\n-\tuint16_t\tevent_id;\n-\t/* LLFC/PFC Configuration Change */\n-\t#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_ID_LLFC_PFC_CHANGE \\\n-\t\tUINT32_C(0x34)\n-\t#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_ID_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_ID_LLFC_PFC_CHANGE\n-\t/* Event specific data */\n-\tuint32_t\tevent_data2;\n-\tuint8_t\topaque_v;\n+\tuint16_t\tfid;\n+\tuint8_t\tunused_0[5];\n \t/*\n-\t * This value is written by the NIC such that it will be different\n-\t * for each pass through the completion queue.   The even passes\n-\t * will write 1.  The odd passes will write 0.\n+\t * This field is used in Output records to indicate that the output\n+\t * is completely written to RAM.  This field should be read as '1'\n+\t * to indicate that the output has been completely written.\n+\t * When writing a command completion or response to an internal processor,\n+\t * the order of writes has to be such that this field is written last.\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_V          UINT32_C(0x1)\n-\t/* opaque is 7 b */\n-\t#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_OPAQUE_MASK \\\n-\t\tUINT32_C(0xfe)\n-\t#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_OPAQUE_SFT 1\n-\t/* 8-lsb timestamp from POR (100-msec resolution) */\n-\tuint8_t\ttimestamp_lo;\n-\t/* 16-lsb timestamp from POR (100-msec resolution) */\n-\tuint16_t\ttimestamp_hi;\n-\t/* Event specific data */\n-\tuint32_t\tevent_data1;\n-\t/* Indicates llfc pfc status change */\n-\t#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_LLFC_PFC_MASK \\\n-\t\tUINT32_C(0x3)\n-\t#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_LLFC_PFC_SFT \\\n-\t\t0\n+\tuint8_t\tvalid;\n+} __attribute__((packed));\n+\n+/**********************\n+ * hwrm_func_vf_alloc *\n+ **********************/\n+\n+\n+/* hwrm_func_vf_alloc_input (size:192b/24B) */\n+struct hwrm_func_vf_alloc_input {\n+\t/* The HWRM command request type. */\n+\tuint16_t\treq_type;\n \t/*\n-\t * If this field set to 1, then it indicates that llfc is\n-\t * enabled.\n+\t * The completion ring to send the completion event on. This should\n+\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_LLFC_PFC_LLFC \\\n-\t\tUINT32_C(0x1)\n+\tuint16_t\tcmpl_ring;\n \t/*\n-\t * If this field is set to 2, then it indicates that pfc\n-\t * is enabled.\n+\t * The sequence ID is used by the driver for tracking multiple\n+\t * commands. This ID is treated as opaque data by the firmware and\n+\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_LLFC_PFC_PFC \\\n-\t\tUINT32_C(0x2)\n-\t#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_LLFC_PFC_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_LLFC_PFC_PFC\n-\t/* Indicates the physical port this llfc pfc change occur */\n-\t#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_PORT_MASK \\\n-\t\tUINT32_C(0x1c)\n-\t#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_PORT_SFT \\\n-\t\t2\n-\t/* PORT ID */\n-\t#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_PORT_ID_MASK \\\n-\t\tUINT32_C(0x1fffe0)\n-\t#define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_PORT_ID_SFT \\\n-\t\t5\n-} __attribute__((packed));\n-\n-/* hwrm_async_event_cmpl_default_vnic_change (size:128b/16B) */\n-struct hwrm_async_event_cmpl_default_vnic_change {\n-\tuint16_t\ttype;\n+\tuint16_t\tseq_id;\n \t/*\n-\t * This field indicates the exact type of the completion.\n-\t * By convention, the LSB identifies the length of the\n-\t * record in 16B units.  Even values indicate 16B\n-\t * records.  Odd values indicate 32B\n-\t * records.\n+\t * The target ID of the command:\n+\t * * 0x0-0xFFF8 - The function ID\n+\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n+\t * * 0xFFFF - HWRM\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_TYPE_MASK \\\n-\t\tUINT32_C(0x3f)\n-\t#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_TYPE_SFT \\\n-\t\t0\n-\t/* HWRM Asynchronous Event Information */\n-\t#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_TYPE_HWRM_ASYNC_EVENT \\\n-\t\tUINT32_C(0x2e)\n-\t#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_TYPE_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_TYPE_HWRM_ASYNC_EVENT\n-\t/* unused1 is 10 b */\n-\t#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_UNUSED1_MASK \\\n-\t\tUINT32_C(0xffc0)\n-\t#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_UNUSED1_SFT \\\n-\t\t6\n-\t/* Identifiers of events. */\n-\tuint16_t\tevent_id;\n-\t/* Notification of a default vnic allocaiton or free */\n-\t#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_ID_ALLOC_FREE_NOTIFICATION \\\n-\t\tUINT32_C(0x35)\n-\t#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_ID_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_ID_ALLOC_FREE_NOTIFICATION\n-\t/* Event specific data */\n-\tuint32_t\tevent_data2;\n-\tuint8_t\topaque_v;\n+\tuint16_t\ttarget_id;\n \t/*\n-\t * This value is written by the NIC such that it will be different\n-\t * for each pass through the completion queue.   The even passes\n-\t * will write 1.  The odd passes will write 0.\n+\t * A physical address pointer pointing to a host buffer that the\n+\t * command's response data will be written. This can be either a host\n+\t * physical address (HPA) or a guest physical address (GPA) and must\n+\t * point to a physically contiguous block of memory.\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_V \\\n-\t\tUINT32_C(0x1)\n-\t/* opaque is 7 b */\n-\t#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_OPAQUE_MASK \\\n-\t\tUINT32_C(0xfe)\n-\t#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_OPAQUE_SFT 1\n-\t/* 8-lsb timestamp from POR (100-msec resolution) */\n-\tuint8_t\ttimestamp_lo;\n-\t/* 16-lsb timestamp from POR (100-msec resolution) */\n-\tuint16_t\ttimestamp_hi;\n-\t/* Event specific data */\n-\tuint32_t\tevent_data1;\n-\t/* Indicates default vnic configuration change */\n-\t#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_DEF_VNIC_STATE_MASK \\\n-\t\tUINT32_C(0x3)\n-\t#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_DEF_VNIC_STATE_SFT \\\n-\t\t0\n+\tuint64_t\tresp_addr;\n+\tuint32_t\tenables;\n \t/*\n-\t * If this field is set to 1, then it indicates that\n-\t * a default VNIC has been allocate.\n+\t * This bit must be '1' for the first_vf_id field to be\n+\t * configured.\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_DEF_VNIC_STATE_DEF_VNIC_ALLOC \\\n-\t\tUINT32_C(0x1)\n+\t#define HWRM_FUNC_VF_ALLOC_INPUT_ENABLES_FIRST_VF_ID     UINT32_C(0x1)\n \t/*\n-\t * If this field is set to 2, then it indicates that\n-\t * a default VNIC has been freed.\n+\t * This value is used to identify a Virtual Function (VF).\n+\t * The scope of VF ID is local within a PF.\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_DEF_VNIC_STATE_DEF_VNIC_FREE \\\n-\t\tUINT32_C(0x2)\n-\t#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_DEF_VNIC_STATE_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_DEF_VNIC_STATE_DEF_VNIC_FREE\n-\t/* Indicates the physical function this event occured on. */\n-\t#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_PF_ID_MASK \\\n-\t\tUINT32_C(0x3fc)\n-\t#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_PF_ID_SFT \\\n-\t\t2\n-\t/* Indicates the virtual function this event occured on */\n-\t#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_VF_ID_MASK \\\n-\t\tUINT32_C(0x3fffc00)\n-\t#define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_VF_ID_SFT \\\n-\t\t10\n+\tuint16_t\tfirst_vf_id;\n+\t/* The number of virtual functions requested. */\n+\tuint16_t\tnum_vfs;\n } __attribute__((packed));\n \n-/* hwrm_async_event_cmpl_hwrm_error (size:128b/16B) */\n-struct hwrm_async_event_cmpl_hwrm_error {\n-\tuint16_t\ttype;\n-\t/*\n-\t * This field indicates the exact type of the completion.\n-\t * By convention, the LSB identifies the length of the\n-\t * record in 16B units.  Even values indicate 16B\n-\t * records.  Odd values indicate 32B\n-\t * records.\n-\t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_TYPE_MASK \\\n-\t\tUINT32_C(0x3f)\n-\t#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_TYPE_SFT             0\n-\t/* HWRM Asynchronous Event Information */\n-\t#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_TYPE_HWRM_ASYNC_EVENT \\\n-\t\tUINT32_C(0x2e)\n-\t#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_TYPE_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_TYPE_HWRM_ASYNC_EVENT\n-\t/* Identifiers of events. */\n-\tuint16_t\tevent_id;\n-\t/* HWRM Error */\n-\t#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_ID_HWRM_ERROR \\\n-\t\tUINT32_C(0xff)\n-\t#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_ID_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_ID_HWRM_ERROR\n-\t/* Event specific data */\n-\tuint32_t\tevent_data2;\n-\t/* Severity of HWRM Error */\n-\t#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA2_SEVERITY_MASK \\\n-\t\tUINT32_C(0xff)\n-\t#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA2_SEVERITY_SFT     0\n-\t/* Warning */\n-\t#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA2_SEVERITY_WARNING \\\n-\t\tUINT32_C(0x0)\n-\t/* Non-fatal Error */\n-\t#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA2_SEVERITY_NONFATAL \\\n-\t\tUINT32_C(0x1)\n-\t/* Fatal Error */\n-\t#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA2_SEVERITY_FATAL \\\n-\t\tUINT32_C(0x2)\n-\t#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA2_SEVERITY_LAST \\\n-\t\tHWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA2_SEVERITY_FATAL\n-\tuint8_t\topaque_v;\n+/* hwrm_func_vf_alloc_output (size:128b/16B) */\n+struct hwrm_func_vf_alloc_output {\n+\t/* The specific error status for the command. */\n+\tuint16_t\terror_code;\n+\t/* The HWRM command request type. */\n+\tuint16_t\treq_type;\n+\t/* The sequence ID from the original command. */\n+\tuint16_t\tseq_id;\n+\t/* The length of the response data in number of bytes. */\n+\tuint16_t\tresp_len;\n+\t/* The ID of the first VF allocated. */\n+\tuint16_t\tfirst_vf_id;\n+\tuint8_t\tunused_0[5];\n \t/*\n-\t * This value is written by the NIC such that it will be different\n-\t * for each pass through the completion queue.   The even passes\n-\t * will write 1.  The odd passes will write 0.\n+\t * This field is used in Output records to indicate that the output\n+\t * is completely written to RAM.  This field should be read as '1'\n+\t * to indicate that the output has been completely written.\n+\t * When writing a command completion or response to an internal processor,\n+\t * the order of writes has to be such that this field is written last.\n \t */\n-\t#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_V          UINT32_C(0x1)\n-\t/* opaque is 7 b */\n-\t#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_OPAQUE_MASK UINT32_C(0xfe)\n-\t#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_OPAQUE_SFT 1\n-\t/* 8-lsb timestamp from POR (100-msec resolution) */\n-\tuint8_t\ttimestamp_lo;\n-\t/* 16-lsb timestamp from POR (100-msec resolution) */\n-\tuint16_t\ttimestamp_hi;\n-\t/* Event specific data */\n-\tuint32_t\tevent_data1;\n-\t/* Time stamp for error event */\n-\t#define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA1_TIMESTAMP \\\n-\t\tUINT32_C(0x1)\n+\tuint8_t\tvalid;\n } __attribute__((packed));\n \n-/*******************\n- * hwrm_func_reset *\n- *******************/\n+/*********************\n+ * hwrm_func_vf_free *\n+ *********************/\n \n \n-/* hwrm_func_reset_input (size:192b/24B) */\n-struct hwrm_func_reset_input {\n+/* hwrm_func_vf_free_input (size:192b/24B) */\n+struct hwrm_func_vf_free_input {\n \t/* The HWRM command request type. */\n \tuint16_t\treq_type;\n \t/*\n@@ -4547,54 +4302,24 @@ struct hwrm_func_reset_input {\n \tuint64_t\tresp_addr;\n \tuint32_t\tenables;\n \t/*\n-\t * This bit must be '1' for the vf_id_valid field to be\n+\t * This bit must be '1' for the first_vf_id field to be\n \t * configured.\n \t */\n-\t#define HWRM_FUNC_RESET_INPUT_ENABLES_VF_ID_VALID     UINT32_C(0x1)\n-\t/*\n-\t * The ID of the VF that this PF is trying to reset.\n-\t * Only the parent PF shall be allowed to reset a child VF.\n-\t *\n-\t * A parent PF driver shall use this field only when a specific child VF\n-\t * is requested to be reset.\n-\t */\n-\tuint16_t\tvf_id;\n-\t/* This value indicates the level of a function reset. */\n-\tuint8_t\tfunc_reset_level;\n-\t/*\n-\t * Reset the caller function and its children VFs (if any). If no\n-\t * children functions exist, then reset the caller function only.\n-\t */\n-\t#define HWRM_FUNC_RESET_INPUT_FUNC_RESET_LEVEL_RESETALL \\\n-\t\tUINT32_C(0x0)\n-\t/* Reset the caller function only */\n-\t#define HWRM_FUNC_RESET_INPUT_FUNC_RESET_LEVEL_RESETME \\\n-\t\tUINT32_C(0x1)\n+\t#define HWRM_FUNC_VF_FREE_INPUT_ENABLES_FIRST_VF_ID     UINT32_C(0x1)\n \t/*\n-\t * Reset all children VFs of the caller function driver if the\n-\t * caller is a PF driver.\n-\t * It is an error to specify this level by a VF driver.\n-\t * It is an error to specify this level by a PF driver with\n-\t * no children VFs.\n+\t * This value is used to identify a Virtual Function (VF).\n+\t * The scope of VF ID is local within a PF.\n \t */\n-\t#define HWRM_FUNC_RESET_INPUT_FUNC_RESET_LEVEL_RESETCHILDREN \\\n-\t\tUINT32_C(0x2)\n+\tuint16_t\tfirst_vf_id;\n \t/*\n-\t * Reset a specific VF of the caller function driver if the caller\n-\t * is the parent PF driver.\n-\t * It is an error to specify this level by a VF driver.\n-\t * It is an error to specify this level by a PF driver that is not\n-\t * the parent of the VF that is being requested to reset.\n+\t * The number of virtual functions requested.\n+\t * 0xFFFF - Cleanup all children of this PF.\n \t */\n-\t#define HWRM_FUNC_RESET_INPUT_FUNC_RESET_LEVEL_RESETVF \\\n-\t\tUINT32_C(0x3)\n-\t#define HWRM_FUNC_RESET_INPUT_FUNC_RESET_LEVEL_LAST \\\n-\t\tHWRM_FUNC_RESET_INPUT_FUNC_RESET_LEVEL_RESETVF\n-\tuint8_t\tunused_0;\n+\tuint16_t\tnum_vfs;\n } __attribute__((packed));\n \n-/* hwrm_func_reset_output (size:128b/16B) */\n-struct hwrm_func_reset_output {\n+/* hwrm_func_vf_free_output (size:128b/16B) */\n+struct hwrm_func_vf_free_output {\n \t/* The specific error status for the command. */\n \tuint16_t\terror_code;\n \t/* The HWRM command request type. */\n@@ -4615,12 +4340,12 @@ struct hwrm_func_reset_output {\n } __attribute__((packed));\n \n /********************\n- * hwrm_func_getfid *\n+ * hwrm_func_vf_cfg *\n  ********************/\n \n \n-/* hwrm_func_getfid_input (size:192b/24B) */\n-struct hwrm_func_getfid_input {\n+/* hwrm_func_vf_cfg_input (size:448b/56B) */\n+struct hwrm_func_vf_cfg_input {\n \t/* The HWRM command request type. */\n \tuint16_t\treq_type;\n \t/*\n@@ -4650,283 +4375,62 @@ struct hwrm_func_getfid_input {\n \tuint64_t\tresp_addr;\n \tuint32_t\tenables;\n \t/*\n-\t * This bit must be '1' for the pci_id field to be\n+\t * This bit must be '1' for the mtu field to be\n \t * configured.\n \t */\n-\t#define HWRM_FUNC_GETFID_INPUT_ENABLES_PCI_ID     UINT32_C(0x1)\n+\t#define HWRM_FUNC_VF_CFG_INPUT_ENABLES_MTU \\\n+\t\tUINT32_C(0x1)\n \t/*\n-\t * This value is the PCI ID of the queried function.\n-\t * If ARI is enabled, then it is\n-\t * Bus Number (8b):Function Number(8b). Otherwise, it is\n-\t * Bus Number (8b):Device Number (5b):Function Number(3b).\n+\t * This bit must be '1' for the guest_vlan field to be\n+\t * configured.\n \t */\n-\tuint16_t\tpci_id;\n-\tuint8_t\tunused_0[2];\n-} __attribute__((packed));\n-\n-/* hwrm_func_getfid_output (size:128b/16B) */\n-struct hwrm_func_getfid_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n+\t#define HWRM_FUNC_VF_CFG_INPUT_ENABLES_GUEST_VLAN \\\n+\t\tUINT32_C(0x2)\n \t/*\n-\t * FID value.  This value is used to identify operations on the PCI\n-\t * bus as belonging to a particular PCI function.\n+\t * This bit must be '1' for the async_event_cr field to be\n+\t * configured.\n \t */\n-\tuint16_t\tfid;\n-\tuint8_t\tunused_0[5];\n+\t#define HWRM_FUNC_VF_CFG_INPUT_ENABLES_ASYNC_EVENT_CR \\\n+\t\tUINT32_C(0x4)\n \t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n+\t * This bit must be '1' for the dflt_mac_addr field to be\n+\t * configured.\n \t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/**********************\n- * hwrm_func_vf_alloc *\n- **********************/\n-\n-\n-/* hwrm_func_vf_alloc_input (size:192b/24B) */\n-struct hwrm_func_vf_alloc_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n+\t#define HWRM_FUNC_VF_CFG_INPUT_ENABLES_DFLT_MAC_ADDR \\\n+\t\tUINT32_C(0x8)\n \t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n+\t * This bit must be '1' for the num_rsscos_ctxs field to be\n+\t * configured.\n \t */\n-\tuint16_t\tcmpl_ring;\n+\t#define HWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_RSSCOS_CTXS \\\n+\t\tUINT32_C(0x10)\n \t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n+\t * This bit must be '1' for the num_cmpl_rings field to be\n+\t * configured.\n \t */\n-\tuint16_t\tseq_id;\n+\t#define HWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_CMPL_RINGS \\\n+\t\tUINT32_C(0x20)\n \t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n+\t * This bit must be '1' for the num_tx_rings field to be\n+\t * configured.\n \t */\n-\tuint16_t\ttarget_id;\n+\t#define HWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_TX_RINGS \\\n+\t\tUINT32_C(0x40)\n \t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n+\t * This bit must be '1' for the num_rx_rings field to be\n+\t * configured.\n \t */\n-\tuint64_t\tresp_addr;\n-\tuint32_t\tenables;\n+\t#define HWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_RX_RINGS \\\n+\t\tUINT32_C(0x80)\n \t/*\n-\t * This bit must be '1' for the first_vf_id field to be\n+\t * This bit must be '1' for the num_l2_ctxs field to be\n \t * configured.\n \t */\n-\t#define HWRM_FUNC_VF_ALLOC_INPUT_ENABLES_FIRST_VF_ID     UINT32_C(0x1)\n+\t#define HWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_L2_CTXS \\\n+\t\tUINT32_C(0x100)\n \t/*\n-\t * This value is used to identify a Virtual Function (VF).\n-\t * The scope of VF ID is local within a PF.\n-\t */\n-\tuint16_t\tfirst_vf_id;\n-\t/* The number of virtual functions requested. */\n-\tuint16_t\tnum_vfs;\n-} __attribute__((packed));\n-\n-/* hwrm_func_vf_alloc_output (size:128b/16B) */\n-struct hwrm_func_vf_alloc_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\t/* The ID of the first VF allocated. */\n-\tuint16_t\tfirst_vf_id;\n-\tuint8_t\tunused_0[5];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/*********************\n- * hwrm_func_vf_free *\n- *********************/\n-\n-\n-/* hwrm_func_vf_free_input (size:192b/24B) */\n-struct hwrm_func_vf_free_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\tuint32_t\tenables;\n-\t/*\n-\t * This bit must be '1' for the first_vf_id field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_FUNC_VF_FREE_INPUT_ENABLES_FIRST_VF_ID     UINT32_C(0x1)\n-\t/*\n-\t * This value is used to identify a Virtual Function (VF).\n-\t * The scope of VF ID is local within a PF.\n-\t */\n-\tuint16_t\tfirst_vf_id;\n-\t/*\n-\t * The number of virtual functions requested.\n-\t * 0xFFFF - Cleanup all children of this PF.\n-\t */\n-\tuint16_t\tnum_vfs;\n-} __attribute__((packed));\n-\n-/* hwrm_func_vf_free_output (size:128b/16B) */\n-struct hwrm_func_vf_free_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\tuint8_t\tunused_0[7];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/********************\n- * hwrm_func_vf_cfg *\n- ********************/\n-\n-\n-/* hwrm_func_vf_cfg_input (size:448b/56B) */\n-struct hwrm_func_vf_cfg_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\tuint32_t\tenables;\n-\t/*\n-\t * This bit must be '1' for the mtu field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_FUNC_VF_CFG_INPUT_ENABLES_MTU \\\n-\t\tUINT32_C(0x1)\n-\t/*\n-\t * This bit must be '1' for the guest_vlan field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_FUNC_VF_CFG_INPUT_ENABLES_GUEST_VLAN \\\n-\t\tUINT32_C(0x2)\n-\t/*\n-\t * This bit must be '1' for the async_event_cr field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_FUNC_VF_CFG_INPUT_ENABLES_ASYNC_EVENT_CR \\\n-\t\tUINT32_C(0x4)\n-\t/*\n-\t * This bit must be '1' for the dflt_mac_addr field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_FUNC_VF_CFG_INPUT_ENABLES_DFLT_MAC_ADDR \\\n-\t\tUINT32_C(0x8)\n-\t/*\n-\t * This bit must be '1' for the num_rsscos_ctxs field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_RSSCOS_CTXS \\\n-\t\tUINT32_C(0x10)\n-\t/*\n-\t * This bit must be '1' for the num_cmpl_rings field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_CMPL_RINGS \\\n-\t\tUINT32_C(0x20)\n-\t/*\n-\t * This bit must be '1' for the num_tx_rings field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_TX_RINGS \\\n-\t\tUINT32_C(0x40)\n-\t/*\n-\t * This bit must be '1' for the num_rx_rings field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_RX_RINGS \\\n-\t\tUINT32_C(0x80)\n-\t/*\n-\t * This bit must be '1' for the num_l2_ctxs field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_L2_CTXS \\\n-\t\tUINT32_C(0x100)\n-\t/*\n-\t * This bit must be '1' for the num_vnics field to be\n-\t * configured.\n+\t * This bit must be '1' for the num_vnics field to be\n+\t * configured.\n \t */\n \t#define HWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_VNICS \\\n \t\tUINT32_C(0x200)\n@@ -5305,6 +4809,20 @@ struct hwrm_func_qcaps_output {\n \t */\n \t#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_ADMIN_PF_SUPPORTED \\\n \t\tUINT32_C(0x40000)\n+\t/*\n+\t * If the query is for a VF, then this flag shall be ignored.\n+\t * If this query is for a PF and this flag is set to 1, then\n+\t * the PF will know that the firmware has the capability to track\n+\t * the virtual link status.\n+\t */\n+\t#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_LINK_ADMIN_STATUS_SUPPORTED \\\n+\t\tUINT32_C(0x80000)\n+\t/*\n+\t * If 1, then this function supports the push mode that uses\n+\t * write combine buffers and the long inline tx buffer descriptor.\n+\t */\n+\t#define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_WCB_PUSH_MODE \\\n+\t\tUINT32_C(0x100000)\n \t/*\n \t * This value is current MAC address configured for this\n \t * function. A value of 00-00-00-00-00-00 indicates no\n@@ -5547,6 +5065,15 @@ struct hwrm_func_qcfg_output {\n \t */\n \t#define HWRM_FUNC_QCFG_OUTPUT_FLAGS_MULTI_HOST \\\n \t\tUINT32_C(0x20)\n+\t/*\n+\t * If the function that is being queried is a PF, then the HWRM shall\n+\t * set this field to 0 and the HWRM client shall ignore this field.\n+\t * If the function that is being queried is a VF, then the HWRM shall\n+\t * set this field to 1 if the queried VF is trusted, otherwise the HWRM\n+\t * shall set this field to 0.\n+\t */\n+\t#define HWRM_FUNC_QCFG_OUTPUT_FLAGS_TRUSTED_VF \\\n+\t\tUINT32_C(0x40)\n \t/*\n \t * This value is current MAC address configured for this\n \t * function. A value of 00-00-00-00-00-00 indicates no\n@@ -5755,7 +5282,7 @@ struct hwrm_func_qcfg_output {\n \t */\n \t#define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_CACHE_LINESIZE_MASK \\\n \t\tUINT32_C(0x3)\n-\t#define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_CACHE_LINESIZE_SFT     0\n+\t#define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_CACHE_LINESIZE_SFT          0\n \t/* Cache Line Size 64 bytes */\n \t#define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_CACHE_LINESIZE_SIZE_64 \\\n \t\tUINT32_C(0x0)\n@@ -5764,10 +5291,25 @@ struct hwrm_func_qcfg_output {\n \t\tUINT32_C(0x1)\n \t#define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_CACHE_LINESIZE_LAST \\\n \t\tHWRM_FUNC_QCFG_OUTPUT_OPTIONS_CACHE_LINESIZE_SIZE_128\n+\t/* This value is the virtual link admin state setting. */\n+\t#define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_LINK_ADMIN_STATE_MASK \\\n+\t\tUINT32_C(0xc)\n+\t#define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_LINK_ADMIN_STATE_SFT        2\n+\t/* Admin link state is in forced down mode. */\n+\t#define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_LINK_ADMIN_STATE_FORCED_DOWN \\\n+\t\t(UINT32_C(0x0) << 2)\n+\t/* Admin link state is in forced up mode. */\n+\t#define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_LINK_ADMIN_STATE_FORCED_UP \\\n+\t\t(UINT32_C(0x1) << 2)\n+\t/* Admin link state is in auto mode  - follows the physical link state. */\n+\t#define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_LINK_ADMIN_STATE_AUTO \\\n+\t\t(UINT32_C(0x2) << 2)\n+\t#define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_LINK_ADMIN_STATE_LAST \\\n+\t\tHWRM_FUNC_QCFG_OUTPUT_OPTIONS_LINK_ADMIN_STATE_AUTO\n \t/* Reserved for future. */\n \t#define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_RSVD_MASK \\\n-\t\tUINT32_C(0xfc)\n-\t#define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_RSVD_SFT               2\n+\t\tUINT32_C(0xf0)\n+\t#define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_RSVD_SFT                    4\n \t/*\n \t * The number of VFs that are allocated to the function.\n \t * This is valid only on the PF with SR-IOV enabled.\n@@ -5814,13 +5356,13 @@ struct hwrm_func_qcfg_output {\n \tuint8_t\tvalid;\n } __attribute__((packed));\n \n-/***********************\n- * hwrm_func_vlan_qcfg *\n- ***********************/\n+/*****************\n+ * hwrm_func_cfg *\n+ *****************/\n \n \n-/* hwrm_func_vlan_qcfg_input (size:192b/24B) */\n-struct hwrm_func_vlan_qcfg_input {\n+/* hwrm_func_cfg_input (size:704b/88B) */\n+struct hwrm_func_cfg_input {\n \t/* The HWRM command request type. */\n \tuint16_t\treq_type;\n \t/*\n@@ -5851,239 +5393,28 @@ struct hwrm_func_vlan_qcfg_input {\n \t/*\n \t * Function ID of the function that is being\n \t * configured.\n-\t * If set to 0xFF... (All Fs), then the configuration is\n+\t * If set to 0xFF... (All Fs), then the the configuration is\n \t * for the requesting function.\n \t */\n \tuint16_t\tfid;\n-\tuint8_t\tunused_0[6];\n-} __attribute__((packed));\n-\n-/* hwrm_func_vlan_qcfg_output (size:320b/40B) */\n-struct hwrm_func_vlan_qcfg_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\tuint8_t\tunused_0[7];\n \t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n+\t * This field specifies how many NQs will be reserved for the PF.\n+\t * Remaining NQs that belong to the PF become available for VFs.\n+\t * Once a PF has created VFs, it cannot change how many NQs are\n+\t * reserved for itself (since the NQs must be contiguous in HW).\n \t */\n-\tuint8_t\tvalid;\n-\t/* S-TAG VLAN identifier configured for the function. */\n-\tuint16_t\tstag_vid;\n-\t/* S-TAG PCP value configured for the function. */\n-\tuint8_t\tstag_pcp;\n-\tuint8_t\tunused_1;\n+\tuint16_t\tnum_msix;\n+\tuint32_t\tflags;\n \t/*\n-\t * S-TAG TPID value configured for the function. This field is specified in\n-\t * network byte order.\n+\t * When this bit is '1', the function is disabled with\n+\t * source MAC address check.\n+\t * This is an anti-spoofing check. If this flag is set,\n+\t * then the function shall be configured to disallow\n+\t * transmission of frames with the source MAC address that\n+\t * is configured for this function.\n \t */\n-\tuint16_t\tstag_tpid;\n-\t/* C-TAG VLAN identifier configured for the function. */\n-\tuint16_t\tctag_vid;\n-\t/* C-TAG PCP value configured for the function. */\n-\tuint8_t\tctag_pcp;\n-\tuint8_t\tunused_2;\n-\t/*\n-\t * C-TAG TPID value configured for the function. This field is specified in\n-\t * network byte order.\n-\t */\n-\tuint16_t\tctag_tpid;\n-\t/* Future use. */\n-\tuint32_t\trsvd2;\n-\t/* Future use. */\n-\tuint32_t\trsvd3;\n-\tuint32_t\tunused_3;\n-} __attribute__((packed));\n-\n-/**********************\n- * hwrm_func_vlan_cfg *\n- **********************/\n-\n-\n-/* hwrm_func_vlan_cfg_input (size:384b/48B) */\n-struct hwrm_func_vlan_cfg_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\t/*\n-\t * Function ID of the function that is being\n-\t * configured.\n-\t * If set to 0xFF... (All Fs), then the configuration is\n-\t * for the requesting function.\n-\t */\n-\tuint16_t\tfid;\n-\tuint8_t\tunused_0[2];\n-\tuint32_t\tenables;\n-\t/*\n-\t * This bit must be '1' for the stag_vid field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_FUNC_VLAN_CFG_INPUT_ENABLES_STAG_VID      UINT32_C(0x1)\n-\t/*\n-\t * This bit must be '1' for the ctag_vid field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_FUNC_VLAN_CFG_INPUT_ENABLES_CTAG_VID      UINT32_C(0x2)\n-\t/*\n-\t * This bit must be '1' for the stag_pcp field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_FUNC_VLAN_CFG_INPUT_ENABLES_STAG_PCP      UINT32_C(0x4)\n-\t/*\n-\t * This bit must be '1' for the ctag_pcp field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_FUNC_VLAN_CFG_INPUT_ENABLES_CTAG_PCP      UINT32_C(0x8)\n-\t/*\n-\t * This bit must be '1' for the stag_tpid field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_FUNC_VLAN_CFG_INPUT_ENABLES_STAG_TPID     UINT32_C(0x10)\n-\t/*\n-\t * This bit must be '1' for the ctag_tpid field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_FUNC_VLAN_CFG_INPUT_ENABLES_CTAG_TPID     UINT32_C(0x20)\n-\t/* S-TAG VLAN identifier configured for the function. */\n-\tuint16_t\tstag_vid;\n-\t/* S-TAG PCP value configured for the function. */\n-\tuint8_t\tstag_pcp;\n-\tuint8_t\tunused_1;\n-\t/*\n-\t * S-TAG TPID value configured for the function. This field is specified in\n-\t * network byte order.\n-\t */\n-\tuint16_t\tstag_tpid;\n-\t/* C-TAG VLAN identifier configured for the function. */\n-\tuint16_t\tctag_vid;\n-\t/* C-TAG PCP value configured for the function. */\n-\tuint8_t\tctag_pcp;\n-\tuint8_t\tunused_2;\n-\t/*\n-\t * C-TAG TPID value configured for the function. This field is specified in\n-\t * network byte order.\n-\t */\n-\tuint16_t\tctag_tpid;\n-\t/* Future use. */\n-\tuint32_t\trsvd1;\n-\t/* Future use. */\n-\tuint32_t\trsvd2;\n-\tuint8_t\tunused_3[4];\n-} __attribute__((packed));\n-\n-/* hwrm_func_vlan_cfg_output (size:128b/16B) */\n-struct hwrm_func_vlan_cfg_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\tuint8_t\tunused_0[7];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/*****************\n- * hwrm_func_cfg *\n- *****************/\n-\n-\n-/* hwrm_func_cfg_input (size:704b/88B) */\n-struct hwrm_func_cfg_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\t/*\n-\t * Function ID of the function that is being\n-\t * configured.\n-\t * If set to 0xFF... (All Fs), then the the configuration is\n-\t * for the requesting function.\n-\t */\n-\tuint16_t\tfid;\n-\t/*\n-\t * This field specifies how many NQs will be reserved for the PF.\n-\t * Remaining NQs that belong to the PF become available for VFs.\n-\t * Once a PF has created VFs, it cannot change how many NQs are\n-\t * reserved for itself (since the NQs must be contiguous in HW).\n-\t */\n-\tuint16_t\tnum_msix;\n-\tuint32_t\tflags;\n-\t/*\n-\t * When this bit is '1', the function is disabled with\n-\t * source MAC address check.\n-\t * This is an anti-spoofing check. If this flag is set,\n-\t * then the function shall be configured to disallow\n-\t * transmission of frames with the source MAC address that\n-\t * is configured for this function.\n-\t */\n-\t#define HWRM_FUNC_CFG_INPUT_FLAGS_SRC_MAC_ADDR_CHECK_DISABLE \\\n-\t\tUINT32_C(0x1)\n+\t#define HWRM_FUNC_CFG_INPUT_FLAGS_SRC_MAC_ADDR_CHECK_DISABLE \\\n+\t\tUINT32_C(0x1)\n \t/*\n \t * When this bit is '1', the function is enabled with\n \t * source MAC address check.\n@@ -6205,6 +5536,17 @@ struct hwrm_func_cfg_input {\n \t */\n \t#define HWRM_FUNC_CFG_INPUT_FLAGS_L2_CTX_ASSETS_TEST \\\n \t\tUINT32_C(0x100000)\n+\t/*\n+\t * This configuration change can be initiated by a PF driver. This\n+\t * configuration request shall be targeted to a VF. From local host\n+\t * resident HWRM clients, only the parent PF driver shall be allowed\n+\t * to initiate this change on one of its children VFs. If this bit is\n+\t * set to 1, then the VF that is being configured is requested to be\n+\t * trusted. If this bit is set to 0, then the VF that is being configured\n+\t * is requested to be not trusted.\n+\t */\n+\t#define HWRM_FUNC_CFG_INPUT_FLAGS_TRUSTED_VF_ENABLE \\\n+\t\tUINT32_C(0x200000)\n \tuint32_t\tenables;\n \t/*\n \t * This bit must be '1' for the mtu field to be\n@@ -6338,6 +5680,12 @@ struct hwrm_func_cfg_input {\n \t */\n \t#define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_MSIX \\\n \t\tUINT32_C(0x200000)\n+\t/*\n+\t * This bit must be '1' for the link admin state field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_FUNC_CFG_INPUT_ENABLES_ADMIN_LINK_STATE \\\n+\t\tUINT32_C(0x400000)\n \t/*\n \t * The maximum transmission unit of the function.\n \t * The HWRM should make sure that the mtu of\n@@ -6569,7 +5917,7 @@ struct hwrm_func_cfg_input {\n \t */\n \t#define HWRM_FUNC_CFG_INPUT_OPTIONS_CACHE_LINESIZE_MASK \\\n \t\tUINT32_C(0x3)\n-\t#define HWRM_FUNC_CFG_INPUT_OPTIONS_CACHE_LINESIZE_SFT     0\n+\t#define HWRM_FUNC_CFG_INPUT_OPTIONS_CACHE_LINESIZE_SFT          0\n \t/* Cache Line Size 64 bytes */\n \t#define HWRM_FUNC_CFG_INPUT_OPTIONS_CACHE_LINESIZE_SIZE_64 \\\n \t\tUINT32_C(0x0)\n@@ -6578,10 +5926,25 @@ struct hwrm_func_cfg_input {\n \t\tUINT32_C(0x1)\n \t#define HWRM_FUNC_CFG_INPUT_OPTIONS_CACHE_LINESIZE_LAST \\\n \t\tHWRM_FUNC_CFG_INPUT_OPTIONS_CACHE_LINESIZE_SIZE_128\n+\t/* This value is the virtual link admin state setting. */\n+\t#define HWRM_FUNC_CFG_INPUT_OPTIONS_LINK_ADMIN_STATE_MASK \\\n+\t\tUINT32_C(0xc)\n+\t#define HWRM_FUNC_CFG_INPUT_OPTIONS_LINK_ADMIN_STATE_SFT        2\n+\t/* Admin state is forced down. */\n+\t#define HWRM_FUNC_CFG_INPUT_OPTIONS_LINK_ADMIN_STATE_FORCED_DOWN \\\n+\t\t(UINT32_C(0x0) << 2)\n+\t/* Admin state is forced up. */\n+\t#define HWRM_FUNC_CFG_INPUT_OPTIONS_LINK_ADMIN_STATE_FORCED_UP \\\n+\t\t(UINT32_C(0x1) << 2)\n+\t/* Admin state is in auto mode - is to follow the physical link state. */\n+\t#define HWRM_FUNC_CFG_INPUT_OPTIONS_LINK_ADMIN_STATE_AUTO \\\n+\t\t(UINT32_C(0x2) << 2)\n+\t#define HWRM_FUNC_CFG_INPUT_OPTIONS_LINK_ADMIN_STATE_LAST \\\n+\t\tHWRM_FUNC_CFG_INPUT_OPTIONS_LINK_ADMIN_STATE_AUTO\n \t/* Reserved for future. */\n \t#define HWRM_FUNC_CFG_INPUT_OPTIONS_RSVD_MASK \\\n-\t\tUINT32_C(0xfc)\n-\t#define HWRM_FUNC_CFG_INPUT_OPTIONS_RSVD_SFT               2\n+\t\tUINT32_C(0xf0)\n+\t#define HWRM_FUNC_CFG_INPUT_OPTIONS_RSVD_SFT                    4\n \t/*\n \t * The number of multicast filters that should\n \t * be reserved for this function on the RX side.\n@@ -6862,13 +6225,13 @@ struct hwrm_func_vf_resc_free_output {\n \tuint8_t\tvalid;\n } __attribute__((packed));\n \n-/*******************************\n- * hwrm_func_vf_vnic_ids_query *\n- *******************************/\n+/**********************\n+ * hwrm_func_drv_rgtr *\n+ **********************/\n \n \n-/* hwrm_func_vf_vnic_ids_query_input (size:256b/32B) */\n-struct hwrm_func_vf_vnic_ids_query_input {\n+/* hwrm_func_drv_rgtr_input (size:896b/112B) */\n+struct hwrm_func_drv_rgtr_input {\n \t/* The HWRM command request type. */\n \tuint16_t\treq_type;\n \t/*\n@@ -6896,98 +6259,27 @@ struct hwrm_func_vf_vnic_ids_query_input {\n \t * point to a physically contiguous block of memory.\n \t */\n \tuint64_t\tresp_addr;\n+\tuint32_t\tflags;\n \t/*\n-\t * This value is used to identify a Virtual Function (VF).\n-\t * The scope of VF ID is local within a PF.\n+\t * When this bit is '1', the function driver is requesting\n+\t * all requests from its children VF drivers to be\n+\t * forwarded to itself.\n+\t * This flag can only be set by the PF driver.\n+\t * If a VF driver sets this flag, it should be ignored\n+\t * by the HWRM.\n \t */\n-\tuint16_t\tvf_id;\n-\tuint8_t\tunused_0[2];\n-\t/* Max number of vnic ids in vnic id table */\n-\tuint32_t\tmax_vnic_id_cnt;\n-\t/* This is the address for VF VNIC ID table */\n-\tuint64_t\tvnic_id_tbl_addr;\n-} __attribute__((packed));\n-\n-/* hwrm_func_vf_vnic_ids_query_output (size:128b/16B) */\n-struct hwrm_func_vf_vnic_ids_query_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n+\t#define HWRM_FUNC_DRV_RGTR_INPUT_FLAGS_FWD_ALL_MODE \\\n+\t\tUINT32_C(0x1)\n \t/*\n-\t * Actual number of vnic ids\n-\t *\n-\t * Each VNIC ID is written as a 32-bit number.\n+\t * When this bit is '1', the function is requesting none of\n+\t * the requests from its children VF drivers to be\n+\t * forwarded to itself.\n+\t * This flag can only be set by the PF driver.\n+\t * If a VF driver sets this flag, it should be ignored\n+\t * by the HWRM.\n \t */\n-\tuint32_t\tvnic_id_cnt;\n-\tuint8_t\tunused_0[3];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/**********************\n- * hwrm_func_drv_rgtr *\n- **********************/\n-\n-\n-/* hwrm_func_drv_rgtr_input (size:896b/112B) */\n-struct hwrm_func_drv_rgtr_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\tuint32_t\tflags;\n-\t/*\n-\t * When this bit is '1', the function driver is requesting\n-\t * all requests from its children VF drivers to be\n-\t * forwarded to itself.\n-\t * This flag can only be set by the PF driver.\n-\t * If a VF driver sets this flag, it should be ignored\n-\t * by the HWRM.\n-\t */\n-\t#define HWRM_FUNC_DRV_RGTR_INPUT_FLAGS_FWD_ALL_MODE       UINT32_C(0x1)\n-\t/*\n-\t * When this bit is '1', the function is requesting none of\n-\t * the requests from its children VF drivers to be\n-\t * forwarded to itself.\n-\t * This flag can only be set by the PF driver.\n-\t * If a VF driver sets this flag, it should be ignored\n-\t * by the HWRM.\n-\t */\n-\t#define HWRM_FUNC_DRV_RGTR_INPUT_FLAGS_FWD_NONE_MODE      UINT32_C(0x2)\n+\t#define HWRM_FUNC_DRV_RGTR_INPUT_FLAGS_FWD_NONE_MODE \\\n+\t\tUINT32_C(0x2)\n \t/*\n \t * When this bit is '1', then ver_maj_8b, ver_min_8b, ver_upd_8b\n \t * fields shall be ignored and ver_maj, ver_min, ver_upd\n@@ -6996,7 +6288,22 @@ struct hwrm_func_drv_rgtr_input {\n \t * fields shall be used for the driver version information and\n \t * ver_maj, ver_min, ver_upd and ver_patch shall be ignored.\n \t */\n-\t#define HWRM_FUNC_DRV_RGTR_INPUT_FLAGS_16BIT_VER_MODE     UINT32_C(0x4)\n+\t#define HWRM_FUNC_DRV_RGTR_INPUT_FLAGS_16BIT_VER_MODE \\\n+\t\tUINT32_C(0x4)\n+\t/*\n+\t * When this bit is '1', the function is indicating support of\n+\t * 64bit flow handle.  The firmware that only supports 64bit flow\n+\t * handle should check this bit before allowing processing of\n+\t * HWRM_CFA_FLOW_XXX commands from the requesting function as firmware\n+\t * with 64bit flow handle support can only be compatible with drivers\n+\t * that support 64bit flow handle. The legacy drivers that don't support\n+\t * 64bit flow handle won't be able to use HWRM_CFA_FLOW_XXX commands when\n+\t * running with new firmware that only supports 64bit flow handle. The new\n+\t * firmware support 64bit flow handle returns HWRM_ERR_CODE_CMD_NOT_SUPPORTED\n+\t * status to the legacy driver when encounters these commands.\n+\t */\n+\t#define HWRM_FUNC_DRV_RGTR_INPUT_FLAGS_FLOW_HANDLE_64BIT_MODE \\\n+\t\tUINT32_C(0x8)\n \tuint32_t\tenables;\n \t/*\n \t * This bit must be '1' for the os_type field to be\n@@ -7117,7 +6424,14 @@ struct hwrm_func_drv_rgtr_output {\n \tuint16_t\tseq_id;\n \t/* The length of the response data in number of bytes. */\n \tuint16_t\tresp_len;\n-\tuint8_t\tunused_0[7];\n+\tuint32_t\tflags;\n+\t/*\n+\t * When this bit is '1', it indicates that the\n+\t * HWRM_FUNC_DRV_IF_CHANGE call is supported.\n+\t */\n+\t#define HWRM_FUNC_DRV_RGTR_OUTPUT_FLAGS_IF_CHANGE_SUPPORTED \\\n+\t\tUINT32_C(0x1)\n+\tuint8_t\tunused_0[3];\n \t/*\n \t * This field is used in Output records to indicate that the output\n \t * is completely written to RAM.  This field should be read as '1'\n@@ -7441,7 +6755,7 @@ struct hwrm_func_drv_qver_input {\n \tuint8_t\tunused_0[2];\n } __attribute__((packed));\n \n-/* hwrm_func_drv_qver_output (size:192b/24B) */\n+/* hwrm_func_drv_qver_output (size:256b/32B) */\n struct hwrm_func_drv_qver_output {\n \t/* The specific error status for the command. */\n \tuint16_t\terror_code;\n@@ -7483,15 +6797,7 @@ struct hwrm_func_drv_qver_output {\n \tuint8_t\tver_min_8b;\n \t/* This is the 8bit update version of the driver. */\n \tuint8_t\tver_upd_8b;\n-\tuint8_t\tunused_0[2];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n+\tuint8_t\tunused_0[3];\n \t/* This is the 16bit major version of the driver. */\n \tuint16_t\tver_maj;\n \t/* This is the 16bit minor version of the driver. */\n@@ -7500,6 +6806,15 @@ struct hwrm_func_drv_qver_output {\n \tuint16_t\tver_upd;\n \t/* This is the 16bit patch version of the driver. */\n \tuint16_t\tver_patch;\n+\tuint8_t\tunused_1[7];\n+\t/*\n+\t * This field is used in Output records to indicate that the output\n+\t * is completely written to RAM.  This field should be read as '1'\n+\t * to indicate that the output has been completely written.\n+\t * When writing a command completion or response to an internal processor,\n+\t * the order of writes has to be such that this field is written last.\n+\t */\n+\tuint8_t\tvalid;\n } __attribute__((packed));\n \n /****************************\n@@ -7612,7 +6927,15 @@ struct hwrm_func_resource_qcaps_output {\n \t * The number of TX rings assigned to the function cannot exceed this value.\n \t */\n \tuint16_t\tmax_tx_scheduler_inputs;\n-\tuint8_t\tunused_0[7];\n+\tuint16_t\tflags;\n+\t/*\n+\t * When this bit is '1', it indicates that VF_RESOURCE_CFG supports\n+\t * feature to reserve all minimum resources when minimum >= 1, otherwise\n+\t * returns an error.\n+\t */\n+\t#define HWRM_FUNC_RESOURCE_QCAPS_OUTPUT_FLAGS_MIN_GUARANTEED \\\n+\t\tUINT32_C(0x1)\n+\tuint8_t\tunused_0[5];\n \t/*\n \t * This field is used in Output records to indicate that the output\n \t * is completely written to RAM.  This field should be read as '1'\n@@ -7623,13 +6946,13 @@ struct hwrm_func_resource_qcaps_output {\n \tuint8_t\tvalid;\n } __attribute__((packed));\n \n-/*****************************\n- * hwrm_func_vf_resource_cfg *\n- *****************************/\n+/***********************\n+ * hwrm_func_vlan_qcfg *\n+ ***********************/\n \n \n-/* hwrm_func_vf_resource_cfg_input (size:448b/56B) */\n-struct hwrm_func_vf_resource_cfg_input {\n+/* hwrm_func_vlan_qcfg_input (size:192b/24B) */\n+struct hwrm_func_vlan_qcfg_input {\n \t/* The HWRM command request type. */\n \tuint16_t\treq_type;\n \t/*\n@@ -7657,47 +6980,18 @@ struct hwrm_func_vf_resource_cfg_input {\n \t * point to a physically contiguous block of memory.\n \t */\n \tuint64_t\tresp_addr;\n-\t/* VF ID that is being configured by PF */\n-\tuint16_t\tvf_id;\n-\t/* Maximum guaranteed number of MSI-X vectors for the function */\n-\tuint16_t\tmax_msix;\n-\t/* Minimum guaranteed number of RSS/COS contexts */\n-\tuint16_t\tmin_rsscos_ctx;\n-\t/* Maximum non-guaranteed number of RSS/COS contexts */\n-\tuint16_t\tmax_rsscos_ctx;\n-\t/* Minimum guaranteed number of completion rings */\n-\tuint16_t\tmin_cmpl_rings;\n-\t/* Maximum non-guaranteed number of completion rings */\n-\tuint16_t\tmax_cmpl_rings;\n-\t/* Minimum guaranteed number of transmit rings */\n-\tuint16_t\tmin_tx_rings;\n-\t/* Maximum non-guaranteed number of transmit rings */\n-\tuint16_t\tmax_tx_rings;\n-\t/* Minimum guaranteed number of receive rings */\n-\tuint16_t\tmin_rx_rings;\n-\t/* Maximum non-guaranteed number of receive rings */\n-\tuint16_t\tmax_rx_rings;\n-\t/* Minimum guaranteed number of L2 contexts */\n-\tuint16_t\tmin_l2_ctxs;\n-\t/* Maximum non-guaranteed number of L2 contexts */\n-\tuint16_t\tmax_l2_ctxs;\n-\t/* Minimum guaranteed number of VNICs */\n-\tuint16_t\tmin_vnics;\n-\t/* Maximum non-guaranteed number of VNICs */\n-\tuint16_t\tmax_vnics;\n-\t/* Minimum guaranteed number of statistic contexts */\n-\tuint16_t\tmin_stat_ctx;\n-\t/* Maximum non-guaranteed number of statistic contexts */\n-\tuint16_t\tmax_stat_ctx;\n-\t/* Minimum guaranteed number of ring groups */\n-\tuint16_t\tmin_hw_ring_grps;\n-\t/* Maximum non-guaranteed number of ring groups */\n-\tuint16_t\tmax_hw_ring_grps;\n-\tuint8_t\tunused_0[4];\n+\t/*\n+\t * Function ID of the function that is being\n+\t * configured.\n+\t * If set to 0xFF... (All Fs), then the configuration is\n+\t * for the requesting function.\n+\t */\n+\tuint16_t\tfid;\n+\tuint8_t\tunused_0[6];\n } __attribute__((packed));\n \n-/* hwrm_func_vf_resource_cfg_output (size:256b/32B) */\n-struct hwrm_func_vf_resource_cfg_output {\n+/* hwrm_func_vlan_qcfg_output (size:320b/40B) */\n+struct hwrm_func_vlan_qcfg_output {\n \t/* The specific error status for the command. */\n \tuint16_t\terror_code;\n \t/* The HWRM command request type. */\n@@ -7706,23 +7000,32 @@ struct hwrm_func_vf_resource_cfg_output {\n \tuint16_t\tseq_id;\n \t/* The length of the response data in number of bytes. */\n \tuint16_t\tresp_len;\n-\t/* Reserved number of RSS/COS contexts */\n-\tuint16_t\treserved_rsscos_ctx;\n-\t/* Reserved number of completion rings */\n-\tuint16_t\treserved_cmpl_rings;\n-\t/* Reserved number of transmit rings */\n-\tuint16_t\treserved_tx_rings;\n-\t/* Reserved number of receive rings */\n-\tuint16_t\treserved_rx_rings;\n-\t/* Reserved number of L2 contexts */\n-\tuint16_t\treserved_l2_ctxs;\n-\t/* Reserved number of VNICs */\n-\tuint16_t\treserved_vnics;\n-\t/* Reserved number of statistic contexts */\n-\tuint16_t\treserved_stat_ctx;\n-\t/* Reserved number of ring groups */\n-\tuint16_t\treserved_hw_ring_grps;\n-\tuint8_t\tunused_0[7];\n+\tuint64_t\tunused_0;\n+\t/* S-TAG VLAN identifier configured for the function. */\n+\tuint16_t\tstag_vid;\n+\t/* S-TAG PCP value configured for the function. */\n+\tuint8_t\tstag_pcp;\n+\tuint8_t\tunused_1;\n+\t/*\n+\t * S-TAG TPID value configured for the function. This field is specified in\n+\t * network byte order.\n+\t */\n+\tuint16_t\tstag_tpid;\n+\t/* C-TAG VLAN identifier configured for the function. */\n+\tuint16_t\tctag_vid;\n+\t/* C-TAG PCP value configured for the function. */\n+\tuint8_t\tctag_pcp;\n+\tuint8_t\tunused_2;\n+\t/*\n+\t * C-TAG TPID value configured for the function. This field is specified in\n+\t * network byte order.\n+\t */\n+\tuint16_t\tctag_tpid;\n+\t/* Future use. */\n+\tuint32_t\trsvd2;\n+\t/* Future use. */\n+\tuint32_t\trsvd3;\n+\tuint8_t\tunused_3[3];\n \t/*\n \t * This field is used in Output records to indicate that the output\n \t * is completely written to RAM.  This field should be read as '1'\n@@ -7733,13 +7036,13 @@ struct hwrm_func_vf_resource_cfg_output {\n \tuint8_t\tvalid;\n } __attribute__((packed));\n \n-/*********************************\n- * hwrm_func_backing_store_qcaps *\n- *********************************/\n+/**********************\n+ * hwrm_func_vlan_cfg *\n+ **********************/\n \n \n-/* hwrm_func_backing_store_qcaps_input (size:128b/16B) */\n-struct hwrm_func_backing_store_qcaps_input {\n+/* hwrm_func_vlan_cfg_input (size:384b/48B) */\n+struct hwrm_func_vlan_cfg_input {\n \t/* The HWRM command request type. */\n \tuint16_t\treq_type;\n \t/*\n@@ -7767,10 +7070,74 @@ struct hwrm_func_backing_store_qcaps_input {\n \t * point to a physically contiguous block of memory.\n \t */\n \tuint64_t\tresp_addr;\n+\t/*\n+\t * Function ID of the function that is being\n+\t * configured.\n+\t * If set to 0xFF... (All Fs), then the configuration is\n+\t * for the requesting function.\n+\t */\n+\tuint16_t\tfid;\n+\tuint8_t\tunused_0[2];\n+\tuint32_t\tenables;\n+\t/*\n+\t * This bit must be '1' for the stag_vid field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_FUNC_VLAN_CFG_INPUT_ENABLES_STAG_VID      UINT32_C(0x1)\n+\t/*\n+\t * This bit must be '1' for the ctag_vid field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_FUNC_VLAN_CFG_INPUT_ENABLES_CTAG_VID      UINT32_C(0x2)\n+\t/*\n+\t * This bit must be '1' for the stag_pcp field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_FUNC_VLAN_CFG_INPUT_ENABLES_STAG_PCP      UINT32_C(0x4)\n+\t/*\n+\t * This bit must be '1' for the ctag_pcp field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_FUNC_VLAN_CFG_INPUT_ENABLES_CTAG_PCP      UINT32_C(0x8)\n+\t/*\n+\t * This bit must be '1' for the stag_tpid field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_FUNC_VLAN_CFG_INPUT_ENABLES_STAG_TPID     UINT32_C(0x10)\n+\t/*\n+\t * This bit must be '1' for the ctag_tpid field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_FUNC_VLAN_CFG_INPUT_ENABLES_CTAG_TPID     UINT32_C(0x20)\n+\t/* S-TAG VLAN identifier configured for the function. */\n+\tuint16_t\tstag_vid;\n+\t/* S-TAG PCP value configured for the function. */\n+\tuint8_t\tstag_pcp;\n+\tuint8_t\tunused_1;\n+\t/*\n+\t * S-TAG TPID value configured for the function. This field is specified in\n+\t * network byte order.\n+\t */\n+\tuint16_t\tstag_tpid;\n+\t/* C-TAG VLAN identifier configured for the function. */\n+\tuint16_t\tctag_vid;\n+\t/* C-TAG PCP value configured for the function. */\n+\tuint8_t\tctag_pcp;\n+\tuint8_t\tunused_2;\n+\t/*\n+\t * C-TAG TPID value configured for the function. This field is specified in\n+\t * network byte order.\n+\t */\n+\tuint16_t\tctag_tpid;\n+\t/* Future use. */\n+\tuint32_t\trsvd1;\n+\t/* Future use. */\n+\tuint32_t\trsvd2;\n+\tuint8_t\tunused_3[4];\n } __attribute__((packed));\n \n-/* hwrm_func_backing_store_qcaps_output (size:512b/64B) */\n-struct hwrm_func_backing_store_qcaps_output {\n+/* hwrm_func_vlan_cfg_output (size:128b/16B) */\n+struct hwrm_func_vlan_cfg_output {\n \t/* The specific error status for the command. */\n \tuint16_t\terror_code;\n \t/* The HWRM command request type. */\n@@ -7779,53 +7146,7 @@ struct hwrm_func_backing_store_qcaps_output {\n \tuint16_t\tseq_id;\n \t/* The length of the response data in number of bytes. */\n \tuint16_t\tresp_len;\n-\t/* Maximum number of QP context entries supported for this function. */\n-\tuint32_t\tqp_max_entries;\n-\t/*\n-\t * Minimum number of QP context entries that are needed to be reserved\n-\t * for QP1 for the PF and its VFs. PF drivers must allocate at least\n-\t * this many QP context entries, even if RoCE will not be used.\n-\t */\n-\tuint16_t\tqp_min_qp1_entries;\n-\t/* Maximum number of QP context entries that can be used for L2. */\n-\tuint16_t\tqp_max_l2_entries;\n-\t/* Number of bytes that must be allocated for each context entry. */\n-\tuint16_t\tqp_entry_size;\n-\t/* Maximum number of SRQ context entries that can be used for L2. */\n-\tuint16_t\tsrq_max_l2_entries;\n-\t/* Maximum number of SRQ context entries supported for this function. */\n-\tuint32_t\tsrq_max_entries;\n-\t/* Number of bytes that must be allocated for each context entry. */\n-\tuint16_t\tsrq_entry_size;\n-\t/* Maximum number of CQ context entries that can be used for L2. */\n-\tuint16_t\tcq_max_l2_entries;\n-\t/* Maximum number of CQ context entries supported for this function. */\n-\tuint32_t\tcq_max_entries;\n-\t/* Number of bytes that must be allocated for each context entry. */\n-\tuint16_t\tcq_entry_size;\n-\t/* Maximum number of VNIC context entries supported for this function. */\n-\tuint16_t\tvnic_max_vnic_entries;\n-\t/* Maximum number of Ring table context entries supported for this function. */\n-\tuint16_t\tvnic_max_ring_table_entries;\n-\t/* Number of bytes that must be allocated for each context entry. */\n-\tuint16_t\tvnic_entry_size;\n-\t/* Maximum number of statistic context entries supported for this function. */\n-\tuint32_t\tstat_max_entries;\n-\t/* Number of bytes that must be allocated for each context entry. */\n-\tuint16_t\tstat_entry_size;\n-\t/* Maximum number of TQM context entries supported per ring. */\n-\tuint16_t\ttqm_max_entries_per_ring;\n-\t/* Number of bytes that must be allocated for each context entry. */\n-\tuint16_t\ttqm_entry_size;\n-\t/* Number of bytes that must be allocated for each context entry. */\n-\tuint16_t\tmrav_entry_size;\n-\t/* Maximum number of MR/AV context entries supported for this function. */\n-\tuint32_t\tmrav_max_entries;\n-\t/* Maximum number of Timer context entries supported for this function. */\n-\tuint32_t\ttim_max_entries;\n-\t/* Number of bytes that must be allocated for each context entry. */\n-\tuint16_t\ttim_entry_size;\n-\tuint8_t\tunused_0;\n+\tuint8_t\tunused_0[7];\n \t/*\n \t * This field is used in Output records to indicate that the output\n \t * is completely written to RAM.  This field should be read as '1'\n@@ -7837,12 +7158,12 @@ struct hwrm_func_backing_store_qcaps_output {\n } __attribute__((packed));\n \n /*******************************\n- * hwrm_func_backing_store_cfg *\n+ * hwrm_func_vf_vnic_ids_query *\n  *******************************/\n \n \n-/* hwrm_func_backing_store_cfg_input (size:2048b/256B) */\n-struct hwrm_func_backing_store_cfg_input {\n+/* hwrm_func_vf_vnic_ids_query_input (size:256b/32B) */\n+struct hwrm_func_vf_vnic_ids_query_input {\n \t/* The HWRM command request type. */\n \tuint16_t\treq_type;\n \t/*\n@@ -7870,862 +7191,150 @@ struct hwrm_func_backing_store_cfg_input {\n \t * point to a physically contiguous block of memory.\n \t */\n \tuint64_t\tresp_addr;\n-\tuint32_t\tflags;\n-\t/*\n-\t * When set, the firmware only uses on-chip resources and does not\n-\t * expect any backing store to be provided by the host driver. This\n-\t * mode provides minimal L2 functionality (e.g. limited L2 resources,\n-\t * no RoCE).\n-\t */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_FLAGS_PREBOOT_MODE \\\n-\t\tUINT32_C(0x1)\n-\tuint32_t\tenables;\n-\t/*\n-\t * This bit must be '1' for the qp fields to be\n-\t * configured.\n-\t */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_QP \\\n-\t\tUINT32_C(0x1)\n \t/*\n-\t * This bit must be '1' for the srq fields to be\n-\t * configured.\n+\t * This value is used to identify a Virtual Function (VF).\n+\t * The scope of VF ID is local within a PF.\n \t */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_SRQ \\\n-\t\tUINT32_C(0x2)\n-\t/*\n-\t * This bit must be '1' for the cq fields to be\n-\t * configured.\n-\t */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_CQ \\\n-\t\tUINT32_C(0x4)\n-\t/*\n-\t * This bit must be '1' for the vnic fields to be\n-\t * configured.\n-\t */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_VNIC \\\n-\t\tUINT32_C(0x8)\n-\t/*\n-\t * This bit must be '1' for the stat fields to be\n-\t * configured.\n-\t */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_STAT \\\n-\t\tUINT32_C(0x10)\n-\t/*\n-\t * This bit must be '1' for the tqm_sp fields to be\n-\t * configured.\n-\t */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TQM_SP \\\n-\t\tUINT32_C(0x20)\n-\t/*\n-\t * This bit must be '1' for the tqm_ring0 fields to be\n-\t * configured.\n-\t */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TQM_RING0 \\\n-\t\tUINT32_C(0x40)\n-\t/*\n-\t * This bit must be '1' for the tqm_ring1 fields to be\n-\t * configured.\n-\t */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TQM_RING1 \\\n-\t\tUINT32_C(0x80)\n-\t/*\n-\t * This bit must be '1' for the tqm_ring2 fields to be\n-\t * configured.\n-\t */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TQM_RING2 \\\n-\t\tUINT32_C(0x100)\n+\tuint16_t\tvf_id;\n+\tuint8_t\tunused_0[2];\n+\t/* Max number of vnic ids in vnic id table */\n+\tuint32_t\tmax_vnic_id_cnt;\n+\t/* This is the address for VF VNIC ID table */\n+\tuint64_t\tvnic_id_tbl_addr;\n+} __attribute__((packed));\n+\n+/* hwrm_func_vf_vnic_ids_query_output (size:128b/16B) */\n+struct hwrm_func_vf_vnic_ids_query_output {\n+\t/* The specific error status for the command. */\n+\tuint16_t\terror_code;\n+\t/* The HWRM command request type. */\n+\tuint16_t\treq_type;\n+\t/* The sequence ID from the original command. */\n+\tuint16_t\tseq_id;\n+\t/* The length of the response data in number of bytes. */\n+\tuint16_t\tresp_len;\n \t/*\n-\t * This bit must be '1' for the tqm_ring3 fields to be\n-\t * configured.\n+\t * Actual number of vnic ids\n+\t *\n+\t * Each VNIC ID is written as a 32-bit number.\n \t */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TQM_RING3 \\\n-\t\tUINT32_C(0x200)\n+\tuint32_t\tvnic_id_cnt;\n+\tuint8_t\tunused_0[3];\n \t/*\n-\t * This bit must be '1' for the tqm_ring4 fields to be\n-\t * configured.\n+\t * This field is used in Output records to indicate that the output\n+\t * is completely written to RAM.  This field should be read as '1'\n+\t * to indicate that the output has been completely written.\n+\t * When writing a command completion or response to an internal processor,\n+\t * the order of writes has to be such that this field is written last.\n \t */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TQM_RING4 \\\n-\t\tUINT32_C(0x400)\n+\tuint8_t\tvalid;\n+} __attribute__((packed));\n+\n+/***********************\n+ * hwrm_func_vf_bw_cfg *\n+ ***********************/\n+\n+\n+/* hwrm_func_vf_bw_cfg_input (size:960b/120B) */\n+struct hwrm_func_vf_bw_cfg_input {\n+\t/* The HWRM command request type. */\n+\tuint16_t\treq_type;\n \t/*\n-\t * This bit must be '1' for the tqm_ring5 fields to be\n-\t * configured.\n+\t * The completion ring to send the completion event on. This should\n+\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n \t */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TQM_RING5 \\\n-\t\tUINT32_C(0x800)\n+\tuint16_t\tcmpl_ring;\n \t/*\n-\t * This bit must be '1' for the tqm_ring6 fields to be\n-\t * configured.\n+\t * The sequence ID is used by the driver for tracking multiple\n+\t * commands. This ID is treated as opaque data by the firmware and\n+\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n \t */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TQM_RING6 \\\n-\t\tUINT32_C(0x1000)\n+\tuint16_t\tseq_id;\n \t/*\n-\t * This bit must be '1' for the tqm_ring7 fields to be\n-\t * configured.\n+\t * The target ID of the command:\n+\t * * 0x0-0xFFF8 - The function ID\n+\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n+\t * * 0xFFFF - HWRM\n \t */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TQM_RING7 \\\n-\t\tUINT32_C(0x2000)\n+\tuint16_t\ttarget_id;\n \t/*\n-\t * This bit must be '1' for the mrav fields to be\n-\t * configured.\n+\t * A physical address pointer pointing to a host buffer that the\n+\t * command's response data will be written. This can be either a host\n+\t * physical address (HPA) or a guest physical address (GPA) and must\n+\t * point to a physically contiguous block of memory.\n \t */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_MRAV \\\n-\t\tUINT32_C(0x4000)\n+\tuint64_t\tresp_addr;\n \t/*\n-\t * This bit must be '1' for the tim fields to be\n-\t * configured.\n+\t * The number of VF functions that are being configured.\n+\t * The cmd space allows up to 50 VFs' BW to be configured with one cmd.\n \t */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TIM \\\n-\t\tUINT32_C(0x8000)\n-\t/* QPC page size and level. */\n-\tuint8_t\tqpc_pg_size_qpc_lvl;\n-\t/* QPC PBL indirect levels. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_LVL_MASK \\\n-\t\tUINT32_C(0xf)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_LVL_SFT       0\n-\t/* PBL pointer is physical start address. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_LVL_LVL_0 \\\n-\t\tUINT32_C(0x0)\n-\t/* PBL pointer points to PTE table. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_LVL_LVL_1 \\\n-\t\tUINT32_C(0x1)\n-\t/* PBL pointer points to PDE table with each entry pointing to PTE tables. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_LVL_LVL_2 \\\n-\t\tUINT32_C(0x2)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_LVL_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_LVL_LVL_2\n-\t/* QPC page size. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_MASK \\\n-\t\tUINT32_C(0xf0)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_SFT   4\n-\t/* 4KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_PG_4K \\\n-\t\t(UINT32_C(0x0) << 4)\n-\t/* 8KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_PG_8K \\\n-\t\t(UINT32_C(0x1) << 4)\n-\t/* 64KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_PG_64K \\\n-\t\t(UINT32_C(0x2) << 4)\n-\t/* 2MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_PG_2M \\\n-\t\t(UINT32_C(0x3) << 4)\n-\t/* 8MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_PG_8M \\\n-\t\t(UINT32_C(0x4) << 4)\n-\t/* 1GB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_PG_1G \\\n-\t\t(UINT32_C(0x5) << 4)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_PG_1G\n-\t/* SRQ page size and level. */\n-\tuint8_t\tsrq_pg_size_srq_lvl;\n-\t/* SRQ PBL indirect levels. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_LVL_MASK \\\n-\t\tUINT32_C(0xf)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_LVL_SFT       0\n-\t/* PBL pointer is physical start address. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_LVL_LVL_0 \\\n-\t\tUINT32_C(0x0)\n-\t/* PBL pointer points to PTE table. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_LVL_LVL_1 \\\n-\t\tUINT32_C(0x1)\n-\t/* PBL pointer points to PDE table with each entry pointing to PTE tables. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_LVL_LVL_2 \\\n-\t\tUINT32_C(0x2)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_LVL_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_LVL_LVL_2\n-\t/* SRQ page size. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_MASK \\\n-\t\tUINT32_C(0xf0)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_SFT   4\n-\t/* 4KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_PG_4K \\\n-\t\t(UINT32_C(0x0) << 4)\n-\t/* 8KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_PG_8K \\\n-\t\t(UINT32_C(0x1) << 4)\n-\t/* 64KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_PG_64K \\\n-\t\t(UINT32_C(0x2) << 4)\n-\t/* 2MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_PG_2M \\\n-\t\t(UINT32_C(0x3) << 4)\n-\t/* 8MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_PG_8M \\\n-\t\t(UINT32_C(0x4) << 4)\n-\t/* 1GB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_PG_1G \\\n-\t\t(UINT32_C(0x5) << 4)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_PG_1G\n-\t/* CQ page size and level. */\n-\tuint8_t\tcq_pg_size_cq_lvl;\n-\t/* CQ PBL indirect levels. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_LVL_MASK \\\n-\t\tUINT32_C(0xf)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_LVL_SFT       0\n-\t/* PBL pointer is physical start address. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_LVL_LVL_0 \\\n-\t\tUINT32_C(0x0)\n-\t/* PBL pointer points to PTE table. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_LVL_LVL_1 \\\n-\t\tUINT32_C(0x1)\n-\t/* PBL pointer points to PDE table with each entry pointing to PTE tables. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_LVL_LVL_2 \\\n-\t\tUINT32_C(0x2)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_LVL_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_LVL_LVL_2\n-\t/* CQ page size. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_MASK \\\n-\t\tUINT32_C(0xf0)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_SFT   4\n-\t/* 4KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_PG_4K \\\n-\t\t(UINT32_C(0x0) << 4)\n-\t/* 8KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_PG_8K \\\n-\t\t(UINT32_C(0x1) << 4)\n-\t/* 64KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_PG_64K \\\n-\t\t(UINT32_C(0x2) << 4)\n-\t/* 2MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_PG_2M \\\n-\t\t(UINT32_C(0x3) << 4)\n-\t/* 8MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_PG_8M \\\n-\t\t(UINT32_C(0x4) << 4)\n-\t/* 1GB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_PG_1G \\\n-\t\t(UINT32_C(0x5) << 4)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_PG_1G\n-\t/* VNIC page size and level. */\n-\tuint8_t\tvnic_pg_size_vnic_lvl;\n-\t/* VNIC PBL indirect levels. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_LVL_MASK \\\n-\t\tUINT32_C(0xf)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_LVL_SFT       0\n-\t/* PBL pointer is physical start address. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_LVL_LVL_0 \\\n-\t\tUINT32_C(0x0)\n-\t/* PBL pointer points to PTE table. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_LVL_LVL_1 \\\n-\t\tUINT32_C(0x1)\n-\t/* PBL pointer points to PDE table with each entry pointing to PTE tables. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_LVL_LVL_2 \\\n-\t\tUINT32_C(0x2)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_LVL_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_LVL_LVL_2\n-\t/* VNIC page size. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_MASK \\\n-\t\tUINT32_C(0xf0)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_SFT   4\n-\t/* 4KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_PG_4K \\\n-\t\t(UINT32_C(0x0) << 4)\n-\t/* 8KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_PG_8K \\\n-\t\t(UINT32_C(0x1) << 4)\n-\t/* 64KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_PG_64K \\\n-\t\t(UINT32_C(0x2) << 4)\n-\t/* 2MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_PG_2M \\\n-\t\t(UINT32_C(0x3) << 4)\n-\t/* 8MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_PG_8M \\\n-\t\t(UINT32_C(0x4) << 4)\n-\t/* 1GB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_PG_1G \\\n-\t\t(UINT32_C(0x5) << 4)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_PG_1G\n-\t/* Stat page size and level. */\n-\tuint8_t\tstat_pg_size_stat_lvl;\n-\t/* Stat PBL indirect levels. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_LVL_MASK \\\n-\t\tUINT32_C(0xf)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_LVL_SFT       0\n-\t/* PBL pointer is physical start address. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_LVL_LVL_0 \\\n-\t\tUINT32_C(0x0)\n-\t/* PBL pointer points to PTE table. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_LVL_LVL_1 \\\n-\t\tUINT32_C(0x1)\n-\t/* PBL pointer points to PDE table with each entry pointing to PTE tables. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_LVL_LVL_2 \\\n-\t\tUINT32_C(0x2)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_LVL_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_LVL_LVL_2\n-\t/* Stat page size. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_MASK \\\n-\t\tUINT32_C(0xf0)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_SFT   4\n-\t/* 4KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_PG_4K \\\n-\t\t(UINT32_C(0x0) << 4)\n-\t/* 8KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_PG_8K \\\n-\t\t(UINT32_C(0x1) << 4)\n-\t/* 64KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_PG_64K \\\n-\t\t(UINT32_C(0x2) << 4)\n-\t/* 2MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_PG_2M \\\n-\t\t(UINT32_C(0x3) << 4)\n-\t/* 8MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_PG_8M \\\n-\t\t(UINT32_C(0x4) << 4)\n-\t/* 1GB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_PG_1G \\\n-\t\t(UINT32_C(0x5) << 4)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_PG_1G\n-\t/* TQM slow path page size and level. */\n-\tuint8_t\ttqm_sp_pg_size_tqm_sp_lvl;\n-\t/* TQM slow path PBL indirect levels. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_LVL_MASK \\\n-\t\tUINT32_C(0xf)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_LVL_SFT       0\n-\t/* PBL pointer is physical start address. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_LVL_LVL_0 \\\n-\t\tUINT32_C(0x0)\n-\t/* PBL pointer points to PTE table. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_LVL_LVL_1 \\\n-\t\tUINT32_C(0x1)\n-\t/* PBL pointer points to PDE table with each entry pointing to PTE tables. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_LVL_LVL_2 \\\n-\t\tUINT32_C(0x2)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_LVL_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_LVL_LVL_2\n-\t/* TQM slow path page size. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_MASK \\\n-\t\tUINT32_C(0xf0)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_SFT   4\n-\t/* 4KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_PG_4K \\\n-\t\t(UINT32_C(0x0) << 4)\n-\t/* 8KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_PG_8K \\\n-\t\t(UINT32_C(0x1) << 4)\n-\t/* 64KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_PG_64K \\\n-\t\t(UINT32_C(0x2) << 4)\n-\t/* 2MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_PG_2M \\\n-\t\t(UINT32_C(0x3) << 4)\n-\t/* 8MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_PG_8M \\\n-\t\t(UINT32_C(0x4) << 4)\n-\t/* 1GB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_PG_1G \\\n-\t\t(UINT32_C(0x5) << 4)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_PG_1G\n-\t/* TQM ring 0 page size and level. */\n-\tuint8_t\ttqm_ring0_pg_size_tqm_ring0_lvl;\n-\t/* TQM ring 0 PBL indirect levels. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_LVL_MASK \\\n-\t\tUINT32_C(0xf)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_LVL_SFT       0\n-\t/* PBL pointer is physical start address. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_LVL_LVL_0 \\\n-\t\tUINT32_C(0x0)\n-\t/* PBL pointer points to PTE table. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_LVL_LVL_1 \\\n-\t\tUINT32_C(0x1)\n-\t/* PBL pointer points to PDE table with each entry pointing to PTE tables. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_LVL_LVL_2 \\\n-\t\tUINT32_C(0x2)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_LVL_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_LVL_LVL_2\n-\t/* TQM ring 0 page size. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_MASK \\\n-\t\tUINT32_C(0xf0)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_SFT   4\n-\t/* 4KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_PG_4K \\\n-\t\t(UINT32_C(0x0) << 4)\n-\t/* 8KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_PG_8K \\\n-\t\t(UINT32_C(0x1) << 4)\n-\t/* 64KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_PG_64K \\\n-\t\t(UINT32_C(0x2) << 4)\n-\t/* 2MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_PG_2M \\\n-\t\t(UINT32_C(0x3) << 4)\n-\t/* 8MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_PG_8M \\\n-\t\t(UINT32_C(0x4) << 4)\n-\t/* 1GB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_PG_1G \\\n-\t\t(UINT32_C(0x5) << 4)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_PG_1G\n-\t/* TQM ring 1 page size and level. */\n-\tuint8_t\ttqm_ring1_pg_size_tqm_ring1_lvl;\n-\t/* TQM ring 1 PBL indirect levels. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_LVL_MASK \\\n-\t\tUINT32_C(0xf)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_LVL_SFT       0\n-\t/* PBL pointer is physical start address. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_LVL_LVL_0 \\\n-\t\tUINT32_C(0x0)\n-\t/* PBL pointer points to PTE table. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_LVL_LVL_1 \\\n-\t\tUINT32_C(0x1)\n-\t/* PBL pointer points to PDE table with each entry pointing to PTE tables. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_LVL_LVL_2 \\\n-\t\tUINT32_C(0x2)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_LVL_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_LVL_LVL_2\n-\t/* TQM ring 1 page size. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_MASK \\\n-\t\tUINT32_C(0xf0)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_SFT   4\n-\t/* 4KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_PG_4K \\\n-\t\t(UINT32_C(0x0) << 4)\n-\t/* 8KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_PG_8K \\\n-\t\t(UINT32_C(0x1) << 4)\n-\t/* 64KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_PG_64K \\\n-\t\t(UINT32_C(0x2) << 4)\n-\t/* 2MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_PG_2M \\\n-\t\t(UINT32_C(0x3) << 4)\n-\t/* 8MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_PG_8M \\\n-\t\t(UINT32_C(0x4) << 4)\n-\t/* 1GB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_PG_1G \\\n-\t\t(UINT32_C(0x5) << 4)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_PG_1G\n-\t/* TQM ring 2 page size and level. */\n-\tuint8_t\ttqm_ring2_pg_size_tqm_ring2_lvl;\n-\t/* TQM ring 2 PBL indirect levels. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_LVL_MASK \\\n-\t\tUINT32_C(0xf)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_LVL_SFT       0\n-\t/* PBL pointer is physical start address. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_LVL_LVL_0 \\\n-\t\tUINT32_C(0x0)\n-\t/* PBL pointer points to PTE table. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_LVL_LVL_1 \\\n-\t\tUINT32_C(0x1)\n-\t/* PBL pointer points to PDE table with each entry pointing to PTE tables. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_LVL_LVL_2 \\\n-\t\tUINT32_C(0x2)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_LVL_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_LVL_LVL_2\n-\t/* TQM ring 2 page size. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_MASK \\\n-\t\tUINT32_C(0xf0)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_SFT   4\n-\t/* 4KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_PG_4K \\\n-\t\t(UINT32_C(0x0) << 4)\n-\t/* 8KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_PG_8K \\\n-\t\t(UINT32_C(0x1) << 4)\n-\t/* 64KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_PG_64K \\\n-\t\t(UINT32_C(0x2) << 4)\n-\t/* 2MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_PG_2M \\\n-\t\t(UINT32_C(0x3) << 4)\n-\t/* 8MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_PG_8M \\\n-\t\t(UINT32_C(0x4) << 4)\n-\t/* 1GB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_PG_1G \\\n-\t\t(UINT32_C(0x5) << 4)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_PG_1G\n-\t/* TQM ring 3 page size and level. */\n-\tuint8_t\ttqm_ring3_pg_size_tqm_ring3_lvl;\n-\t/* TQM ring 3 PBL indirect levels. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_LVL_MASK \\\n-\t\tUINT32_C(0xf)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_LVL_SFT       0\n-\t/* PBL pointer is physical start address. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_LVL_LVL_0 \\\n-\t\tUINT32_C(0x0)\n-\t/* PBL pointer points to PTE table. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_LVL_LVL_1 \\\n-\t\tUINT32_C(0x1)\n-\t/* PBL pointer points to PDE table with each entry pointing to PTE tables. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_LVL_LVL_2 \\\n-\t\tUINT32_C(0x2)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_LVL_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_LVL_LVL_2\n-\t/* TQM ring 3 page size. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_MASK \\\n-\t\tUINT32_C(0xf0)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_SFT   4\n-\t/* 4KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_PG_4K \\\n-\t\t(UINT32_C(0x0) << 4)\n-\t/* 8KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_PG_8K \\\n-\t\t(UINT32_C(0x1) << 4)\n-\t/* 64KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_PG_64K \\\n-\t\t(UINT32_C(0x2) << 4)\n-\t/* 2MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_PG_2M \\\n-\t\t(UINT32_C(0x3) << 4)\n-\t/* 8MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_PG_8M \\\n-\t\t(UINT32_C(0x4) << 4)\n-\t/* 1GB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_PG_1G \\\n-\t\t(UINT32_C(0x5) << 4)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_PG_1G\n-\t/* TQM ring 4 page size and level. */\n-\tuint8_t\ttqm_ring4_pg_size_tqm_ring4_lvl;\n-\t/* TQM ring 4 PBL indirect levels. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_LVL_MASK \\\n-\t\tUINT32_C(0xf)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_LVL_SFT       0\n-\t/* PBL pointer is physical start address. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_LVL_LVL_0 \\\n-\t\tUINT32_C(0x0)\n-\t/* PBL pointer points to PTE table. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_LVL_LVL_1 \\\n-\t\tUINT32_C(0x1)\n-\t/* PBL pointer points to PDE table with each entry pointing to PTE tables. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_LVL_LVL_2 \\\n-\t\tUINT32_C(0x2)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_LVL_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_LVL_LVL_2\n-\t/* TQM ring 4 page size. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_MASK \\\n-\t\tUINT32_C(0xf0)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_SFT   4\n-\t/* 4KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_PG_4K \\\n-\t\t(UINT32_C(0x0) << 4)\n-\t/* 8KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_PG_8K \\\n-\t\t(UINT32_C(0x1) << 4)\n-\t/* 64KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_PG_64K \\\n-\t\t(UINT32_C(0x2) << 4)\n-\t/* 2MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_PG_2M \\\n-\t\t(UINT32_C(0x3) << 4)\n-\t/* 8MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_PG_8M \\\n-\t\t(UINT32_C(0x4) << 4)\n-\t/* 1GB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_PG_1G \\\n-\t\t(UINT32_C(0x5) << 4)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_PG_1G\n-\t/* TQM ring 5 page size and level. */\n-\tuint8_t\ttqm_ring5_pg_size_tqm_ring5_lvl;\n-\t/* TQM ring 5 PBL indirect levels. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_LVL_MASK \\\n-\t\tUINT32_C(0xf)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_LVL_SFT       0\n-\t/* PBL pointer is physical start address. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_LVL_LVL_0 \\\n-\t\tUINT32_C(0x0)\n-\t/* PBL pointer points to PTE table. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_LVL_LVL_1 \\\n-\t\tUINT32_C(0x1)\n-\t/* PBL pointer points to PDE table with each entry pointing to PTE tables. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_LVL_LVL_2 \\\n-\t\tUINT32_C(0x2)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_LVL_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_LVL_LVL_2\n-\t/* TQM ring 5 page size. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_MASK \\\n-\t\tUINT32_C(0xf0)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_SFT   4\n-\t/* 4KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_PG_4K \\\n-\t\t(UINT32_C(0x0) << 4)\n-\t/* 8KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_PG_8K \\\n-\t\t(UINT32_C(0x1) << 4)\n-\t/* 64KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_PG_64K \\\n-\t\t(UINT32_C(0x2) << 4)\n-\t/* 2MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_PG_2M \\\n-\t\t(UINT32_C(0x3) << 4)\n-\t/* 8MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_PG_8M \\\n-\t\t(UINT32_C(0x4) << 4)\n-\t/* 1GB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_PG_1G \\\n-\t\t(UINT32_C(0x5) << 4)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_PG_1G\n-\t/* TQM ring 6 page size and level. */\n-\tuint8_t\ttqm_ring6_pg_size_tqm_ring6_lvl;\n-\t/* TQM ring 6 PBL indirect levels. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_LVL_MASK \\\n-\t\tUINT32_C(0xf)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_LVL_SFT       0\n-\t/* PBL pointer is physical start address. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_LVL_LVL_0 \\\n-\t\tUINT32_C(0x0)\n-\t/* PBL pointer points to PTE table. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_LVL_LVL_1 \\\n-\t\tUINT32_C(0x1)\n-\t/* PBL pointer points to PDE table with each entry pointing to PTE tables. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_LVL_LVL_2 \\\n-\t\tUINT32_C(0x2)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_LVL_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_LVL_LVL_2\n-\t/* TQM ring 6 page size. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_MASK \\\n-\t\tUINT32_C(0xf0)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_SFT   4\n-\t/* 4KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_PG_4K \\\n-\t\t(UINT32_C(0x0) << 4)\n-\t/* 8KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_PG_8K \\\n-\t\t(UINT32_C(0x1) << 4)\n-\t/* 64KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_PG_64K \\\n-\t\t(UINT32_C(0x2) << 4)\n-\t/* 2MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_PG_2M \\\n-\t\t(UINT32_C(0x3) << 4)\n-\t/* 8MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_PG_8M \\\n-\t\t(UINT32_C(0x4) << 4)\n-\t/* 1GB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_PG_1G \\\n-\t\t(UINT32_C(0x5) << 4)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_PG_1G\n-\t/* TQM ring 7 page size and level. */\n-\tuint8_t\ttqm_ring7_pg_size_tqm_ring7_lvl;\n-\t/* TQM ring 7 PBL indirect levels. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_LVL_MASK \\\n-\t\tUINT32_C(0xf)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_LVL_SFT       0\n-\t/* PBL pointer is physical start address. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_LVL_LVL_0 \\\n-\t\tUINT32_C(0x0)\n-\t/* PBL pointer points to PTE table. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_LVL_LVL_1 \\\n-\t\tUINT32_C(0x1)\n-\t/* PBL pointer points to PDE table with each entry pointing to PTE tables. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_LVL_LVL_2 \\\n-\t\tUINT32_C(0x2)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_LVL_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_LVL_LVL_2\n-\t/* TQM ring 7 page size. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_MASK \\\n-\t\tUINT32_C(0xf0)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_SFT   4\n-\t/* 4KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_PG_4K \\\n-\t\t(UINT32_C(0x0) << 4)\n-\t/* 8KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_PG_8K \\\n-\t\t(UINT32_C(0x1) << 4)\n-\t/* 64KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_PG_64K \\\n-\t\t(UINT32_C(0x2) << 4)\n-\t/* 2MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_PG_2M \\\n-\t\t(UINT32_C(0x3) << 4)\n-\t/* 8MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_PG_8M \\\n-\t\t(UINT32_C(0x4) << 4)\n-\t/* 1GB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_PG_1G \\\n-\t\t(UINT32_C(0x5) << 4)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_PG_1G\n-\t/* MR/AV page size and level. */\n-\tuint8_t\tmrav_pg_size_mrav_lvl;\n-\t/* MR/AV PBL indirect levels. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_LVL_MASK \\\n-\t\tUINT32_C(0xf)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_LVL_SFT       0\n-\t/* PBL pointer is physical start address. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_LVL_LVL_0 \\\n-\t\tUINT32_C(0x0)\n-\t/* PBL pointer points to PTE table. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_LVL_LVL_1 \\\n-\t\tUINT32_C(0x1)\n-\t/* PBL pointer points to PDE table with each entry pointing to PTE tables. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_LVL_LVL_2 \\\n-\t\tUINT32_C(0x2)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_LVL_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_LVL_LVL_2\n-\t/* MR/AV page size. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_MASK \\\n-\t\tUINT32_C(0xf0)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_SFT   4\n-\t/* 4KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_PG_4K \\\n-\t\t(UINT32_C(0x0) << 4)\n-\t/* 8KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_PG_8K \\\n-\t\t(UINT32_C(0x1) << 4)\n-\t/* 64KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_PG_64K \\\n-\t\t(UINT32_C(0x2) << 4)\n-\t/* 2MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_PG_2M \\\n-\t\t(UINT32_C(0x3) << 4)\n-\t/* 8MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_PG_8M \\\n-\t\t(UINT32_C(0x4) << 4)\n-\t/* 1GB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_PG_1G \\\n-\t\t(UINT32_C(0x5) << 4)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_PG_1G\n-\t/* Timer page size and level. */\n-\tuint8_t\ttim_pg_size_tim_lvl;\n-\t/* Timer PBL indirect levels. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_LVL_MASK \\\n-\t\tUINT32_C(0xf)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_LVL_SFT       0\n-\t/* PBL pointer is physical start address. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_LVL_LVL_0 \\\n-\t\tUINT32_C(0x0)\n-\t/* PBL pointer points to PTE table. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_LVL_LVL_1 \\\n-\t\tUINT32_C(0x1)\n-\t/* PBL pointer points to PDE table with each entry pointing to PTE tables. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_LVL_LVL_2 \\\n-\t\tUINT32_C(0x2)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_LVL_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_LVL_LVL_2\n-\t/* Timer page size. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_MASK \\\n-\t\tUINT32_C(0xf0)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_SFT   4\n-\t/* 4KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_PG_4K \\\n-\t\t(UINT32_C(0x0) << 4)\n-\t/* 8KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_PG_8K \\\n-\t\t(UINT32_C(0x1) << 4)\n-\t/* 64KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_PG_64K \\\n-\t\t(UINT32_C(0x2) << 4)\n-\t/* 2MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_PG_2M \\\n-\t\t(UINT32_C(0x3) << 4)\n-\t/* 8MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_PG_8M \\\n-\t\t(UINT32_C(0x4) << 4)\n-\t/* 1GB. */\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_PG_1G \\\n-\t\t(UINT32_C(0x5) << 4)\n-\t#define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_PG_1G\n-\t/* QP page directory. */\n-\tuint64_t\tqpc_page_dir;\n-\t/* SRQ page directory. */\n-\tuint64_t\tsrq_page_dir;\n-\t/* CQ page directory. */\n-\tuint64_t\tcq_page_dir;\n-\t/* VNIC page directory. */\n-\tuint64_t\tvnic_page_dir;\n-\t/* Stat page directory. */\n-\tuint64_t\tstat_page_dir;\n-\t/* TQM slowpath page directory. */\n-\tuint64_t\ttqm_sp_page_dir;\n-\t/* TQM ring 0 page directory. */\n-\tuint64_t\ttqm_ring0_page_dir;\n-\t/* TQM ring 1 page directory. */\n-\tuint64_t\ttqm_ring1_page_dir;\n-\t/* TQM ring 2 page directory. */\n-\tuint64_t\ttqm_ring2_page_dir;\n-\t/* TQM ring 3 page directory. */\n-\tuint64_t\ttqm_ring3_page_dir;\n-\t/* TQM ring 4 page directory. */\n-\tuint64_t\ttqm_ring4_page_dir;\n-\t/* TQM ring 5 page directory. */\n-\tuint64_t\ttqm_ring5_page_dir;\n-\t/* TQM ring 6 page directory. */\n-\tuint64_t\ttqm_ring6_page_dir;\n-\t/* TQM ring 7 page directory. */\n-\tuint64_t\ttqm_ring7_page_dir;\n-\t/* MR/AV page directory. */\n-\tuint64_t\tmrav_page_dir;\n-\t/* Timer page directory. */\n-\tuint64_t\ttim_page_dir;\n-\t/* Number of QPs. */\n-\tuint32_t\tqp_num_entries;\n-\t/* Number of SRQs. */\n-\tuint32_t\tsrq_num_entries;\n-\t/* Number of CQs. */\n-\tuint32_t\tcq_num_entries;\n-\t/* Number of Stats. */\n-\tuint32_t\tstat_num_entries;\n-\t/* Number of TQM slowpath entries. */\n-\tuint32_t\ttqm_sp_num_entries;\n-\t/* Number of TQM ring 0 entries. */\n-\tuint32_t\ttqm_ring0_num_entries;\n-\t/* Number of TQM ring 1 entries. */\n-\tuint32_t\ttqm_ring1_num_entries;\n-\t/* Number of TQM ring 2 entries. */\n-\tuint32_t\ttqm_ring2_num_entries;\n-\t/* Number of TQM ring 3 entries. */\n-\tuint32_t\ttqm_ring3_num_entries;\n-\t/* Number of TQM ring 4 entries. */\n-\tuint32_t\ttqm_ring4_num_entries;\n-\t/* Number of TQM ring 5 entries. */\n-\tuint32_t\ttqm_ring5_num_entries;\n-\t/* Number of TQM ring 6 entries. */\n-\tuint32_t\ttqm_ring6_num_entries;\n-\t/* Number of TQM ring 7 entries. */\n-\tuint32_t\ttqm_ring7_num_entries;\n-\t/* Number of MR/AV entries. */\n-\tuint32_t\tmrav_num_entries;\n-\t/* Number of Timer entries. */\n-\tuint32_t\ttim_num_entries;\n-\t/* Number of entries to reserve for QP1 */\n-\tuint16_t\tqp_num_qp1_entries;\n-\t/* Number of entries to reserve for L2 */\n-\tuint16_t\tqp_num_l2_entries;\n-\t/* Number of bytes that have been allocated for each context entry. */\n-\tuint16_t\tqp_entry_size;\n-\t/* Number of entries to reserve for L2 */\n-\tuint16_t\tsrq_num_l2_entries;\n-\t/* Number of bytes that have been allocated for each context entry. */\n-\tuint16_t\tsrq_entry_size;\n-\t/* Number of entries to reserve for L2 */\n-\tuint16_t\tcq_num_l2_entries;\n-\t/* Number of bytes that have been allocated for each context entry. */\n-\tuint16_t\tcq_entry_size;\n-\t/* Number of entries to reserve for VNIC entries */\n-\tuint16_t\tvnic_num_vnic_entries;\n-\t/* Number of entries to reserve for Ring table entries */\n-\tuint16_t\tvnic_num_ring_table_entries;\n-\t/* Number of bytes that have been allocated for each context entry. */\n-\tuint16_t\tvnic_entry_size;\n-\t/* Number of bytes that have been allocated for each context entry. */\n-\tuint16_t\tstat_entry_size;\n-\t/* Number of bytes that have been allocated for each context entry. */\n-\tuint16_t\ttqm_entry_size;\n-\t/* Number of bytes that have been allocated for each context entry. */\n-\tuint16_t\tmrav_entry_size;\n-\t/* Number of bytes that have been allocated for each context entry. */\n-\tuint16_t\ttim_entry_size;\n-} __attribute__((packed));\n-\n-/* hwrm_func_backing_store_cfg_output (size:128b/16B) */\n-struct hwrm_func_backing_store_cfg_output {\n+\tuint16_t\tnum_vfs;\n+\tuint16_t\tunused[3];\n+\t/* These 16-bit fields contain the VF fid and the rate scale percentage. */\n+\tuint16_t\tvfn[48];\n+\t/* The physical VF id the adjustment will be made to. */\n+\t#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_VFID_MASK     UINT32_C(0xfff)\n+\t#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_VFID_SFT      0\n+\t/*\n+\t * This field configures the rate scale percentage of the VF as specified\n+\t * by the physical VF id.\n+\t */\n+\t#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_MASK     UINT32_C(0xf000)\n+\t#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_SFT      12\n+\t/* 0% of the max tx rate */\n+\t#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_0 \\\n+\t\t(UINT32_C(0x0) << 12)\n+\t/* 6.66% of the max tx rate */\n+\t#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_6_66 \\\n+\t\t(UINT32_C(0x1) << 12)\n+\t/* 13.33% of the max tx rate */\n+\t#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_13_33 \\\n+\t\t(UINT32_C(0x2) << 12)\n+\t/* 20% of the max tx rate */\n+\t#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_20 \\\n+\t\t(UINT32_C(0x3) << 12)\n+\t/* 26.66% of the max tx rate */\n+\t#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_26_66 \\\n+\t\t(UINT32_C(0x4) << 12)\n+\t/* 33% of the max tx rate */\n+\t#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_33_33 \\\n+\t\t(UINT32_C(0x5) << 12)\n+\t/* 40% of the max tx rate */\n+\t#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_40 \\\n+\t\t(UINT32_C(0x6) << 12)\n+\t/* 46.66% of the max tx rate */\n+\t#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_46_66 \\\n+\t\t(UINT32_C(0x7) << 12)\n+\t/* 53.33% of the max tx rate */\n+\t#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_53_33 \\\n+\t\t(UINT32_C(0x8) << 12)\n+\t/* 60% of the max tx rate */\n+\t#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_60 \\\n+\t\t(UINT32_C(0x9) << 12)\n+\t/* 66.66% of the max tx rate */\n+\t#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_66_66 \\\n+\t\t(UINT32_C(0xa) << 12)\n+\t/* 53.33% of the max tx rate */\n+\t#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_73_33 \\\n+\t\t(UINT32_C(0xb) << 12)\n+\t/* 80% of the max tx rate */\n+\t#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_80 \\\n+\t\t(UINT32_C(0xc) << 12)\n+\t/* 86.66% of the max tx rate */\n+\t#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_86_66 \\\n+\t\t(UINT32_C(0xd) << 12)\n+\t/* 93.33% of the max tx rate */\n+\t#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_93_33 \\\n+\t\t(UINT32_C(0xe) << 12)\n+\t/* 100% of the max tx rate */\n+\t#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_100 \\\n+\t\t(UINT32_C(0xf) << 12)\n+\t#define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_LAST \\\n+\t\tHWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_100\n+} __attribute__((packed));\n+\n+/* hwrm_func_vf_bw_cfg_output (size:128b/16B) */\n+struct hwrm_func_vf_bw_cfg_output {\n \t/* The specific error status for the command. */\n \tuint16_t\terror_code;\n \t/* The HWRM command request type. */\n@@ -8745,13 +7354,13 @@ struct hwrm_func_backing_store_cfg_output {\n \tuint8_t\tvalid;\n } __attribute__((packed));\n \n-/********************************\n- * hwrm_func_backing_store_qcfg *\n- ********************************/\n+/************************\n+ * hwrm_func_vf_bw_qcfg *\n+ ************************/\n \n \n-/* hwrm_func_backing_store_qcfg_input (size:128b/16B) */\n-struct hwrm_func_backing_store_qcfg_input {\n+/* hwrm_func_vf_bw_qcfg_input (size:960b/120B) */\n+struct hwrm_func_vf_bw_qcfg_input {\n \t/* The HWRM command request type. */\n \tuint16_t\treq_type;\n \t/*\n@@ -8779,10 +7388,22 @@ struct hwrm_func_backing_store_qcfg_input {\n \t * point to a physically contiguous block of memory.\n \t */\n \tuint64_t\tresp_addr;\n+\t/*\n+\t * The number of VF functions that are being queried.\n+\t * The inline response space allows the host to query up to 50 VFs'\n+\t * rate scale percentage\n+\t */\n+\tuint16_t\tnum_vfs;\n+\tuint16_t\tunused[3];\n+\t/* These 16-bit fields contain the VF fid */\n+\tuint16_t\tvfn[48];\n+\t/* The physical VF id of interest */\n+\t#define HWRM_FUNC_VF_BW_QCFG_INPUT_VFN_VFID_MASK UINT32_C(0xfff)\n+\t#define HWRM_FUNC_VF_BW_QCFG_INPUT_VFN_VFID_SFT 0\n } __attribute__((packed));\n \n-/* hwrm_func_backing_store_qcfg_output (size:1920b/240B) */\n-struct hwrm_func_backing_store_qcfg_output {\n+/* hwrm_func_vf_bw_qcfg_output (size:960b/120B) */\n+struct hwrm_func_vf_bw_qcfg_output {\n \t/* The specific error status for the command. */\n \tuint16_t\terror_code;\n \t/* The HWRM command request type. */\n@@ -8791,843 +7412,157 @@ struct hwrm_func_backing_store_qcfg_output {\n \tuint16_t\tseq_id;\n \t/* The length of the response data in number of bytes. */\n \tuint16_t\tresp_len;\n-\tuint32_t\tflags;\n \t/*\n-\t * When set, the firmware only uses on-chip resources and does not\n-\t * expect any backing store to be provided by the host driver. This\n-\t * mode provides minimal L2 functionality (e.g. limited L2 resources,\n-\t * no RoCE).\n+\t * The number of VF functions that are being queried.\n+\t * The inline response space allows the host to query up to 50 VFs' rate\n+\t * scale percentage\n \t */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_FLAGS_PREBOOT_MODE \\\n-\t\tUINT32_C(0x1)\n-\tuint8_t\tunused_0[4];\n+\tuint16_t\tnum_vfs;\n+\tuint16_t\tunused[3];\n+\t/* These 16-bit fields contain the VF fid and the rate scale percentage. */\n+\tuint16_t\tvfn[48];\n+\t/* The physical VF id the adjustment will be made to. */\n+\t#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_VFID_MASK     UINT32_C(0xfff)\n+\t#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_VFID_SFT      0\n+\t/*\n+\t * This field configures the rate scale percentage of the VF as specified\n+\t * by the physical VF id.\n+\t */\n+\t#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_MASK     UINT32_C(0xf000)\n+\t#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_SFT      12\n+\t/* 0% of the max tx rate */\n+\t#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_0 \\\n+\t\t(UINT32_C(0x0) << 12)\n+\t/* 6.66% of the max tx rate */\n+\t#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_6_66 \\\n+\t\t(UINT32_C(0x1) << 12)\n+\t/* 13.33% of the max tx rate */\n+\t#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_13_33 \\\n+\t\t(UINT32_C(0x2) << 12)\n+\t/* 20% of the max tx rate */\n+\t#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_20 \\\n+\t\t(UINT32_C(0x3) << 12)\n+\t/* 26.66% of the max tx rate */\n+\t#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_26_66 \\\n+\t\t(UINT32_C(0x4) << 12)\n+\t/* 33% of the max tx rate */\n+\t#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_33_33 \\\n+\t\t(UINT32_C(0x5) << 12)\n+\t/* 40% of the max tx rate */\n+\t#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_40 \\\n+\t\t(UINT32_C(0x6) << 12)\n+\t/* 46.66% of the max tx rate */\n+\t#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_46_66 \\\n+\t\t(UINT32_C(0x7) << 12)\n+\t/* 53.33% of the max tx rate */\n+\t#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_53_33 \\\n+\t\t(UINT32_C(0x8) << 12)\n+\t/* 60% of the max tx rate */\n+\t#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_60 \\\n+\t\t(UINT32_C(0x9) << 12)\n+\t/* 66.66% of the max tx rate */\n+\t#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_66_66 \\\n+\t\t(UINT32_C(0xa) << 12)\n+\t/* 53.33% of the max tx rate */\n+\t#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_73_33 \\\n+\t\t(UINT32_C(0xb) << 12)\n+\t/* 80% of the max tx rate */\n+\t#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_80 \\\n+\t\t(UINT32_C(0xc) << 12)\n+\t/* 86.66% of the max tx rate */\n+\t#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_86_66 \\\n+\t\t(UINT32_C(0xd) << 12)\n+\t/* 93.33% of the max tx rate */\n+\t#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_93_33 \\\n+\t\t(UINT32_C(0xe) << 12)\n+\t/* 100% of the max tx rate */\n+\t#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_100 \\\n+\t\t(UINT32_C(0xf) << 12)\n+\t#define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_LAST \\\n+\t\tHWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_100\n+\tuint8_t\tunused_0[7];\n \t/*\n-\t * This bit must be '1' for the qp fields to be\n-\t * configured.\n-\t */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_QP \\\n-\t\tUINT32_C(0x1)\n-\t/*\n-\t * This bit must be '1' for the srq fields to be\n-\t * configured.\n-\t */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_SRQ \\\n-\t\tUINT32_C(0x2)\n-\t/*\n-\t * This bit must be '1' for the cq fields to be\n-\t * configured.\n-\t */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_CQ \\\n-\t\tUINT32_C(0x4)\n-\t/*\n-\t * This bit must be '1' for the vnic fields to be\n-\t * configured.\n-\t */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_VNIC \\\n-\t\tUINT32_C(0x8)\n-\t/*\n-\t * This bit must be '1' for the stat fields to be\n-\t * configured.\n-\t */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_STAT \\\n-\t\tUINT32_C(0x10)\n-\t/*\n-\t * This bit must be '1' for the tqm_sp fields to be\n-\t * configured.\n-\t */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_TQM_SP \\\n-\t\tUINT32_C(0x20)\n-\t/*\n-\t * This bit must be '1' for the tqm_ring0 fields to be\n-\t * configured.\n-\t */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_TQM_RING0 \\\n-\t\tUINT32_C(0x40)\n-\t/*\n-\t * This bit must be '1' for the tqm_ring1 fields to be\n-\t * configured.\n-\t */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_TQM_RING1 \\\n-\t\tUINT32_C(0x80)\n-\t/*\n-\t * This bit must be '1' for the tqm_ring2 fields to be\n-\t * configured.\n-\t */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_TQM_RING2 \\\n-\t\tUINT32_C(0x100)\n-\t/*\n-\t * This bit must be '1' for the tqm_ring3 fields to be\n-\t * configured.\n+\t * This field is used in Output records to indicate that the output\n+\t * is completely written to RAM.  This field should be read as '1'\n+\t * to indicate that the output has been completely written.\n+\t * When writing a command completion or response to an internal processor,\n+\t * the order of writes has to be such that this field is written last.\n \t */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_TQM_RING3 \\\n-\t\tUINT32_C(0x200)\n+\tuint8_t\tvalid;\n+} __attribute__((packed));\n+\n+/***************************\n+ * hwrm_func_drv_if_change *\n+ ***************************/\n+\n+\n+/* hwrm_func_drv_if_change_input (size:192b/24B) */\n+struct hwrm_func_drv_if_change_input {\n+\t/* The HWRM command request type. */\n+\tuint16_t\treq_type;\n \t/*\n-\t * This bit must be '1' for the tqm_ring4 fields to be\n-\t * configured.\n+\t * The completion ring to send the completion event on. This should\n+\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n \t */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_TQM_RING4 \\\n-\t\tUINT32_C(0x400)\n+\tuint16_t\tcmpl_ring;\n \t/*\n-\t * This bit must be '1' for the tqm_ring5 fields to be\n-\t * configured.\n+\t * The sequence ID is used by the driver for tracking multiple\n+\t * commands. This ID is treated as opaque data by the firmware and\n+\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n \t */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_TQM_RING5 \\\n-\t\tUINT32_C(0x800)\n+\tuint16_t\tseq_id;\n \t/*\n-\t * This bit must be '1' for the tqm_ring6 fields to be\n-\t * configured.\n+\t * The target ID of the command:\n+\t * * 0x0-0xFFF8 - The function ID\n+\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n+\t * * 0xFFFF - HWRM\n \t */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_TQM_RING6 \\\n-\t\tUINT32_C(0x1000)\n+\tuint16_t\ttarget_id;\n \t/*\n-\t * This bit must be '1' for the tqm_ring7 fields to be\n-\t * configured.\n+\t * A physical address pointer pointing to a host buffer that the\n+\t * command's response data will be written. This can be either a host\n+\t * physical address (HPA) or a guest physical address (GPA) and must\n+\t * point to a physically contiguous block of memory.\n \t */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_TQM_RING7 \\\n-\t\tUINT32_C(0x2000)\n+\tuint64_t\tresp_addr;\n+\tuint32_t\tflags;\n \t/*\n-\t * This bit must be '1' for the mrav fields to be\n-\t * configured.\n+\t * When this bit is '1', the function driver is indicating\n+\t * that the IF state is changing to UP state.  The call should\n+\t * be made at the beginning of the driver's open call before\n+\t * resources are allocated.  After making the call, the driver\n+\t * should check the response to see if any resources may have\n+\t * changed (see the response below).  If the driver fails\n+\t * the open call, the driver should make this call again with\n+\t * this bit cleared to indicate that the IF state is not UP.\n+\t * During the driver's close call when the IF state is changing\n+\t * to DOWN, the driver should make this call with the bit cleared\n+\t * after all resources have been freed.\n \t */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_MRAV \\\n-\t\tUINT32_C(0x4000)\n+\t#define HWRM_FUNC_DRV_IF_CHANGE_INPUT_FLAGS_UP     UINT32_C(0x1)\n+\tuint32_t\tunused;\n+} __attribute__((packed));\n+\n+/* hwrm_func_drv_if_change_output (size:128b/16B) */\n+struct hwrm_func_drv_if_change_output {\n+\t/* The specific error status for the command. */\n+\tuint16_t\terror_code;\n+\t/* The HWRM command request type. */\n+\tuint16_t\treq_type;\n+\t/* The sequence ID from the original command. */\n+\tuint16_t\tseq_id;\n+\t/* The length of the response data in number of bytes. */\n+\tuint16_t\tresp_len;\n+\tuint32_t\tflags;\n \t/*\n-\t * This bit must be '1' for the tim fields to be\n-\t * configured.\n+\t * When this bit is '1', it indicates that the resources reserved\n+\t * for this function may have changed.  The driver should check\n+\t * resource capabilities and reserve resources again before\n+\t * allocating resources.\n \t */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_TIM \\\n-\t\tUINT32_C(0x8000)\n-\t/* QPC page size and level. */\n-\tuint8_t\tqpc_pg_size_qpc_lvl;\n-\t/* QPC PBL indirect levels. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_LVL_MASK \\\n-\t\tUINT32_C(0xf)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_LVL_SFT       0\n-\t/* PBL pointer is physical start address. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_LVL_LVL_0 \\\n-\t\tUINT32_C(0x0)\n-\t/* PBL pointer points to PTE table. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_LVL_LVL_1 \\\n-\t\tUINT32_C(0x1)\n-\t/* PBL pointer points to PDE table with each entry pointing to PTE tables. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_LVL_LVL_2 \\\n-\t\tUINT32_C(0x2)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_LVL_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_LVL_LVL_2\n-\t/* QPC page size. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_MASK \\\n-\t\tUINT32_C(0xf0)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_SFT   4\n-\t/* 4KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_PG_4K \\\n-\t\t(UINT32_C(0x0) << 4)\n-\t/* 8KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_PG_8K \\\n-\t\t(UINT32_C(0x1) << 4)\n-\t/* 64KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_PG_64K \\\n-\t\t(UINT32_C(0x2) << 4)\n-\t/* 2MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_PG_2M \\\n-\t\t(UINT32_C(0x3) << 4)\n-\t/* 8MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_PG_8M \\\n-\t\t(UINT32_C(0x4) << 4)\n-\t/* 1GB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_PG_1G \\\n-\t\t(UINT32_C(0x5) << 4)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_PG_1G\n-\t/* SRQ page size and level. */\n-\tuint8_t\tsrq_pg_size_srq_lvl;\n-\t/* SRQ PBL indirect levels. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_LVL_MASK \\\n-\t\tUINT32_C(0xf)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_LVL_SFT       0\n-\t/* PBL pointer is physical start address. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_LVL_LVL_0 \\\n-\t\tUINT32_C(0x0)\n-\t/* PBL pointer points to PTE table. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_LVL_LVL_1 \\\n-\t\tUINT32_C(0x1)\n-\t/* PBL pointer points to PDE table with each entry pointing to PTE tables. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_LVL_LVL_2 \\\n-\t\tUINT32_C(0x2)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_LVL_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_LVL_LVL_2\n-\t/* SRQ page size. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_MASK \\\n-\t\tUINT32_C(0xf0)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_SFT   4\n-\t/* 4KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_PG_4K \\\n-\t\t(UINT32_C(0x0) << 4)\n-\t/* 8KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_PG_8K \\\n-\t\t(UINT32_C(0x1) << 4)\n-\t/* 64KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_PG_64K \\\n-\t\t(UINT32_C(0x2) << 4)\n-\t/* 2MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_PG_2M \\\n-\t\t(UINT32_C(0x3) << 4)\n-\t/* 8MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_PG_8M \\\n-\t\t(UINT32_C(0x4) << 4)\n-\t/* 1GB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_PG_1G \\\n-\t\t(UINT32_C(0x5) << 4)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_PG_1G\n-\t/* CQ page size and level. */\n-\tuint8_t\tcq_pg_size_cq_lvl;\n-\t/* CQ PBL indirect levels. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_LVL_MASK \\\n-\t\tUINT32_C(0xf)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_LVL_SFT       0\n-\t/* PBL pointer is physical start address. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_LVL_LVL_0 \\\n-\t\tUINT32_C(0x0)\n-\t/* PBL pointer points to PTE table. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_LVL_LVL_1 \\\n-\t\tUINT32_C(0x1)\n-\t/* PBL pointer points to PDE table with each entry pointing to PTE tables. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_LVL_LVL_2 \\\n-\t\tUINT32_C(0x2)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_LVL_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_LVL_LVL_2\n-\t/* CQ page size. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_MASK \\\n-\t\tUINT32_C(0xf0)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_SFT   4\n-\t/* 4KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_PG_4K \\\n-\t\t(UINT32_C(0x0) << 4)\n-\t/* 8KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_PG_8K \\\n-\t\t(UINT32_C(0x1) << 4)\n-\t/* 64KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_PG_64K \\\n-\t\t(UINT32_C(0x2) << 4)\n-\t/* 2MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_PG_2M \\\n-\t\t(UINT32_C(0x3) << 4)\n-\t/* 8MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_PG_8M \\\n-\t\t(UINT32_C(0x4) << 4)\n-\t/* 1GB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_PG_1G \\\n-\t\t(UINT32_C(0x5) << 4)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_PG_1G\n-\t/* VNIC page size and level. */\n-\tuint8_t\tvnic_pg_size_vnic_lvl;\n-\t/* VNIC PBL indirect levels. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_LVL_MASK \\\n-\t\tUINT32_C(0xf)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_LVL_SFT       0\n-\t/* PBL pointer is physical start address. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_LVL_LVL_0 \\\n-\t\tUINT32_C(0x0)\n-\t/* PBL pointer points to PTE table. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_LVL_LVL_1 \\\n-\t\tUINT32_C(0x1)\n-\t/* PBL pointer points to PDE table with each entry pointing to PTE tables. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_LVL_LVL_2 \\\n-\t\tUINT32_C(0x2)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_LVL_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_LVL_LVL_2\n-\t/* VNIC page size. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_MASK \\\n-\t\tUINT32_C(0xf0)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_SFT   4\n-\t/* 4KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_PG_4K \\\n-\t\t(UINT32_C(0x0) << 4)\n-\t/* 8KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_PG_8K \\\n-\t\t(UINT32_C(0x1) << 4)\n-\t/* 64KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_PG_64K \\\n-\t\t(UINT32_C(0x2) << 4)\n-\t/* 2MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_PG_2M \\\n-\t\t(UINT32_C(0x3) << 4)\n-\t/* 8MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_PG_8M \\\n-\t\t(UINT32_C(0x4) << 4)\n-\t/* 1GB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_PG_1G \\\n-\t\t(UINT32_C(0x5) << 4)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_PG_1G\n-\t/* Stat page size and level. */\n-\tuint8_t\tstat_pg_size_stat_lvl;\n-\t/* Stat PBL indirect levels. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_LVL_MASK \\\n-\t\tUINT32_C(0xf)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_LVL_SFT       0\n-\t/* PBL pointer is physical start address. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_LVL_LVL_0 \\\n-\t\tUINT32_C(0x0)\n-\t/* PBL pointer points to PTE table. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_LVL_LVL_1 \\\n-\t\tUINT32_C(0x1)\n-\t/* PBL pointer points to PDE table with each entry pointing to PTE tables. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_LVL_LVL_2 \\\n-\t\tUINT32_C(0x2)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_LVL_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_LVL_LVL_2\n-\t/* Stat page size. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_MASK \\\n-\t\tUINT32_C(0xf0)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_SFT   4\n-\t/* 4KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_PG_4K \\\n-\t\t(UINT32_C(0x0) << 4)\n-\t/* 8KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_PG_8K \\\n-\t\t(UINT32_C(0x1) << 4)\n-\t/* 64KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_PG_64K \\\n-\t\t(UINT32_C(0x2) << 4)\n-\t/* 2MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_PG_2M \\\n-\t\t(UINT32_C(0x3) << 4)\n-\t/* 8MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_PG_8M \\\n-\t\t(UINT32_C(0x4) << 4)\n-\t/* 1GB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_PG_1G \\\n-\t\t(UINT32_C(0x5) << 4)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_PG_1G\n-\t/* TQM slow path page size and level. */\n-\tuint8_t\ttqm_sp_pg_size_tqm_sp_lvl;\n-\t/* TQM slow path PBL indirect levels. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_LVL_MASK \\\n-\t\tUINT32_C(0xf)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_LVL_SFT       0\n-\t/* PBL pointer is physical start address. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_LVL_LVL_0 \\\n-\t\tUINT32_C(0x0)\n-\t/* PBL pointer points to PTE table. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_LVL_LVL_1 \\\n-\t\tUINT32_C(0x1)\n-\t/* PBL pointer points to PDE table with each entry pointing to PTE tables. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_LVL_LVL_2 \\\n-\t\tUINT32_C(0x2)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_LVL_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_LVL_LVL_2\n-\t/* TQM slow path page size. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_MASK \\\n-\t\tUINT32_C(0xf0)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_SFT   4\n-\t/* 4KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_PG_4K \\\n-\t\t(UINT32_C(0x0) << 4)\n-\t/* 8KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_PG_8K \\\n-\t\t(UINT32_C(0x1) << 4)\n-\t/* 64KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_PG_64K \\\n-\t\t(UINT32_C(0x2) << 4)\n-\t/* 2MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_PG_2M \\\n-\t\t(UINT32_C(0x3) << 4)\n-\t/* 8MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_PG_8M \\\n-\t\t(UINT32_C(0x4) << 4)\n-\t/* 1GB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_PG_1G \\\n-\t\t(UINT32_C(0x5) << 4)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_PG_1G\n-\t/* TQM ring 0 page size and level. */\n-\tuint8_t\ttqm_ring0_pg_size_tqm_ring0_lvl;\n-\t/* TQM ring 0 PBL indirect levels. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_LVL_MASK \\\n-\t\tUINT32_C(0xf)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_LVL_SFT       0\n-\t/* PBL pointer is physical start address. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_LVL_LVL_0 \\\n-\t\tUINT32_C(0x0)\n-\t/* PBL pointer points to PTE table. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_LVL_LVL_1 \\\n-\t\tUINT32_C(0x1)\n-\t/* PBL pointer points to PDE table with each entry pointing to PTE tables. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_LVL_LVL_2 \\\n-\t\tUINT32_C(0x2)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_LVL_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_LVL_LVL_2\n-\t/* TQM ring 0 page size. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_MASK \\\n-\t\tUINT32_C(0xf0)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_SFT   4\n-\t/* 4KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_PG_4K \\\n-\t\t(UINT32_C(0x0) << 4)\n-\t/* 8KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_PG_8K \\\n-\t\t(UINT32_C(0x1) << 4)\n-\t/* 64KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_PG_64K \\\n-\t\t(UINT32_C(0x2) << 4)\n-\t/* 2MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_PG_2M \\\n-\t\t(UINT32_C(0x3) << 4)\n-\t/* 8MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_PG_8M \\\n-\t\t(UINT32_C(0x4) << 4)\n-\t/* 1GB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_PG_1G \\\n-\t\t(UINT32_C(0x5) << 4)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_PG_1G\n-\t/* TQM ring 1 page size and level. */\n-\tuint8_t\ttqm_ring1_pg_size_tqm_ring1_lvl;\n-\t/* TQM ring 1 PBL indirect levels. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_LVL_MASK \\\n-\t\tUINT32_C(0xf)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_LVL_SFT       0\n-\t/* PBL pointer is physical start address. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_LVL_LVL_0 \\\n-\t\tUINT32_C(0x0)\n-\t/* PBL pointer points to PTE table. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_LVL_LVL_1 \\\n-\t\tUINT32_C(0x1)\n-\t/* PBL pointer points to PDE table with each entry pointing to PTE tables. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_LVL_LVL_2 \\\n-\t\tUINT32_C(0x2)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_LVL_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_LVL_LVL_2\n-\t/* TQM ring 1 page size. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_MASK \\\n-\t\tUINT32_C(0xf0)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_SFT   4\n-\t/* 4KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_PG_4K \\\n-\t\t(UINT32_C(0x0) << 4)\n-\t/* 8KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_PG_8K \\\n-\t\t(UINT32_C(0x1) << 4)\n-\t/* 64KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_PG_64K \\\n-\t\t(UINT32_C(0x2) << 4)\n-\t/* 2MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_PG_2M \\\n-\t\t(UINT32_C(0x3) << 4)\n-\t/* 8MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_PG_8M \\\n-\t\t(UINT32_C(0x4) << 4)\n-\t/* 1GB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_PG_1G \\\n-\t\t(UINT32_C(0x5) << 4)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_PG_1G\n-\t/* TQM ring 2 page size and level. */\n-\tuint8_t\ttqm_ring2_pg_size_tqm_ring2_lvl;\n-\t/* TQM ring 2 PBL indirect levels. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_LVL_MASK \\\n-\t\tUINT32_C(0xf)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_LVL_SFT       0\n-\t/* PBL pointer is physical start address. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_LVL_LVL_0 \\\n-\t\tUINT32_C(0x0)\n-\t/* PBL pointer points to PTE table. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_LVL_LVL_1 \\\n-\t\tUINT32_C(0x1)\n-\t/* PBL pointer points to PDE table with each entry pointing to PTE tables. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_LVL_LVL_2 \\\n-\t\tUINT32_C(0x2)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_LVL_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_LVL_LVL_2\n-\t/* TQM ring 2 page size. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_MASK \\\n-\t\tUINT32_C(0xf0)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_SFT   4\n-\t/* 4KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_PG_4K \\\n-\t\t(UINT32_C(0x0) << 4)\n-\t/* 8KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_PG_8K \\\n-\t\t(UINT32_C(0x1) << 4)\n-\t/* 64KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_PG_64K \\\n-\t\t(UINT32_C(0x2) << 4)\n-\t/* 2MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_PG_2M \\\n-\t\t(UINT32_C(0x3) << 4)\n-\t/* 8MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_PG_8M \\\n-\t\t(UINT32_C(0x4) << 4)\n-\t/* 1GB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_PG_1G \\\n-\t\t(UINT32_C(0x5) << 4)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_PG_1G\n-\t/* TQM ring 3 page size and level. */\n-\tuint8_t\ttqm_ring3_pg_size_tqm_ring3_lvl;\n-\t/* TQM ring 3 PBL indirect levels. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_LVL_MASK \\\n-\t\tUINT32_C(0xf)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_LVL_SFT       0\n-\t/* PBL pointer is physical start address. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_LVL_LVL_0 \\\n-\t\tUINT32_C(0x0)\n-\t/* PBL pointer points to PTE table. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_LVL_LVL_1 \\\n-\t\tUINT32_C(0x1)\n-\t/* PBL pointer points to PDE table with each entry pointing to PTE tables. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_LVL_LVL_2 \\\n-\t\tUINT32_C(0x2)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_LVL_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_LVL_LVL_2\n-\t/* TQM ring 3 page size. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_MASK \\\n-\t\tUINT32_C(0xf0)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_SFT   4\n-\t/* 4KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_PG_4K \\\n-\t\t(UINT32_C(0x0) << 4)\n-\t/* 8KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_PG_8K \\\n-\t\t(UINT32_C(0x1) << 4)\n-\t/* 64KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_PG_64K \\\n-\t\t(UINT32_C(0x2) << 4)\n-\t/* 2MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_PG_2M \\\n-\t\t(UINT32_C(0x3) << 4)\n-\t/* 8MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_PG_8M \\\n-\t\t(UINT32_C(0x4) << 4)\n-\t/* 1GB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_PG_1G \\\n-\t\t(UINT32_C(0x5) << 4)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_PG_1G\n-\t/* TQM ring 4 page size and level. */\n-\tuint8_t\ttqm_ring4_pg_size_tqm_ring4_lvl;\n-\t/* TQM ring 4 PBL indirect levels. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_LVL_MASK \\\n-\t\tUINT32_C(0xf)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_LVL_SFT       0\n-\t/* PBL pointer is physical start address. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_LVL_LVL_0 \\\n-\t\tUINT32_C(0x0)\n-\t/* PBL pointer points to PTE table. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_LVL_LVL_1 \\\n-\t\tUINT32_C(0x1)\n-\t/* PBL pointer points to PDE table with each entry pointing to PTE tables. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_LVL_LVL_2 \\\n-\t\tUINT32_C(0x2)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_LVL_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_LVL_LVL_2\n-\t/* TQM ring 4 page size. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_MASK \\\n-\t\tUINT32_C(0xf0)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_SFT   4\n-\t/* 4KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_PG_4K \\\n-\t\t(UINT32_C(0x0) << 4)\n-\t/* 8KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_PG_8K \\\n-\t\t(UINT32_C(0x1) << 4)\n-\t/* 64KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_PG_64K \\\n-\t\t(UINT32_C(0x2) << 4)\n-\t/* 2MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_PG_2M \\\n-\t\t(UINT32_C(0x3) << 4)\n-\t/* 8MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_PG_8M \\\n-\t\t(UINT32_C(0x4) << 4)\n-\t/* 1GB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_PG_1G \\\n-\t\t(UINT32_C(0x5) << 4)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_PG_1G\n-\t/* TQM ring 5 page size and level. */\n-\tuint8_t\ttqm_ring5_pg_size_tqm_ring5_lvl;\n-\t/* TQM ring 5 PBL indirect levels. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_LVL_MASK \\\n-\t\tUINT32_C(0xf)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_LVL_SFT       0\n-\t/* PBL pointer is physical start address. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_LVL_LVL_0 \\\n-\t\tUINT32_C(0x0)\n-\t/* PBL pointer points to PTE table. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_LVL_LVL_1 \\\n-\t\tUINT32_C(0x1)\n-\t/* PBL pointer points to PDE table with each entry pointing to PTE tables. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_LVL_LVL_2 \\\n-\t\tUINT32_C(0x2)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_LVL_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_LVL_LVL_2\n-\t/* TQM ring 5 page size. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_MASK \\\n-\t\tUINT32_C(0xf0)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_SFT   4\n-\t/* 4KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_PG_4K \\\n-\t\t(UINT32_C(0x0) << 4)\n-\t/* 8KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_PG_8K \\\n-\t\t(UINT32_C(0x1) << 4)\n-\t/* 64KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_PG_64K \\\n-\t\t(UINT32_C(0x2) << 4)\n-\t/* 2MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_PG_2M \\\n-\t\t(UINT32_C(0x3) << 4)\n-\t/* 8MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_PG_8M \\\n-\t\t(UINT32_C(0x4) << 4)\n-\t/* 1GB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_PG_1G \\\n-\t\t(UINT32_C(0x5) << 4)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_PG_1G\n-\t/* TQM ring 6 page size and level. */\n-\tuint8_t\ttqm_ring6_pg_size_tqm_ring6_lvl;\n-\t/* TQM ring 6 PBL indirect levels. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_LVL_MASK \\\n-\t\tUINT32_C(0xf)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_LVL_SFT       0\n-\t/* PBL pointer is physical start address. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_LVL_LVL_0 \\\n-\t\tUINT32_C(0x0)\n-\t/* PBL pointer points to PTE table. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_LVL_LVL_1 \\\n-\t\tUINT32_C(0x1)\n-\t/* PBL pointer points to PDE table with each entry pointing to PTE tables. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_LVL_LVL_2 \\\n-\t\tUINT32_C(0x2)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_LVL_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_LVL_LVL_2\n-\t/* TQM ring 6 page size. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_MASK \\\n-\t\tUINT32_C(0xf0)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_SFT   4\n-\t/* 4KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_PG_4K \\\n-\t\t(UINT32_C(0x0) << 4)\n-\t/* 8KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_PG_8K \\\n-\t\t(UINT32_C(0x1) << 4)\n-\t/* 64KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_PG_64K \\\n-\t\t(UINT32_C(0x2) << 4)\n-\t/* 2MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_PG_2M \\\n-\t\t(UINT32_C(0x3) << 4)\n-\t/* 8MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_PG_8M \\\n-\t\t(UINT32_C(0x4) << 4)\n-\t/* 1GB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_PG_1G \\\n-\t\t(UINT32_C(0x5) << 4)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_PG_1G\n-\t/* TQM ring 7 page size and level. */\n-\tuint8_t\ttqm_ring7_pg_size_tqm_ring7_lvl;\n-\t/* TQM ring 7 PBL indirect levels. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_LVL_MASK \\\n-\t\tUINT32_C(0xf)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_LVL_SFT       0\n-\t/* PBL pointer is physical start address. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_LVL_LVL_0 \\\n-\t\tUINT32_C(0x0)\n-\t/* PBL pointer points to PTE table. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_LVL_LVL_1 \\\n-\t\tUINT32_C(0x1)\n-\t/* PBL pointer points to PDE table with each entry pointing to PTE tables. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_LVL_LVL_2 \\\n-\t\tUINT32_C(0x2)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_LVL_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_LVL_LVL_2\n-\t/* TQM ring 7 page size. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_MASK \\\n-\t\tUINT32_C(0xf0)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_SFT   4\n-\t/* 4KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_PG_4K \\\n-\t\t(UINT32_C(0x0) << 4)\n-\t/* 8KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_PG_8K \\\n-\t\t(UINT32_C(0x1) << 4)\n-\t/* 64KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_PG_64K \\\n-\t\t(UINT32_C(0x2) << 4)\n-\t/* 2MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_PG_2M \\\n-\t\t(UINT32_C(0x3) << 4)\n-\t/* 8MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_PG_8M \\\n-\t\t(UINT32_C(0x4) << 4)\n-\t/* 1GB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_PG_1G \\\n-\t\t(UINT32_C(0x5) << 4)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_PG_1G\n-\t/* MR/AV page size and level. */\n-\tuint8_t\tmrav_pg_size_mrav_lvl;\n-\t/* MR/AV PBL indirect levels. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_LVL_MASK \\\n-\t\tUINT32_C(0xf)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_LVL_SFT       0\n-\t/* PBL pointer is physical start address. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_LVL_LVL_0 \\\n-\t\tUINT32_C(0x0)\n-\t/* PBL pointer points to PTE table. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_LVL_LVL_1 \\\n-\t\tUINT32_C(0x1)\n-\t/* PBL pointer points to PDE table with each entry pointing to PTE tables. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_LVL_LVL_2 \\\n-\t\tUINT32_C(0x2)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_LVL_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_LVL_LVL_2\n-\t/* MR/AV page size. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_MASK \\\n-\t\tUINT32_C(0xf0)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_SFT   4\n-\t/* 4KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_PG_4K \\\n-\t\t(UINT32_C(0x0) << 4)\n-\t/* 8KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_PG_8K \\\n-\t\t(UINT32_C(0x1) << 4)\n-\t/* 64KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_PG_64K \\\n-\t\t(UINT32_C(0x2) << 4)\n-\t/* 2MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_PG_2M \\\n-\t\t(UINT32_C(0x3) << 4)\n-\t/* 8MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_PG_8M \\\n-\t\t(UINT32_C(0x4) << 4)\n-\t/* 1GB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_PG_1G \\\n-\t\t(UINT32_C(0x5) << 4)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_PG_1G\n-\t/* Timer page size and level. */\n-\tuint8_t\ttim_pg_size_tim_lvl;\n-\t/* Timer PBL indirect levels. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_LVL_MASK \\\n-\t\tUINT32_C(0xf)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_LVL_SFT       0\n-\t/* PBL pointer is physical start address. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_LVL_LVL_0 \\\n-\t\tUINT32_C(0x0)\n-\t/* PBL pointer points to PTE table. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_LVL_LVL_1 \\\n+\t#define HWRM_FUNC_DRV_IF_CHANGE_OUTPUT_FLAGS_RESC_CHANGE \\\n \t\tUINT32_C(0x1)\n-\t/* PBL pointer points to PDE table with each entry pointing to PTE tables. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_LVL_LVL_2 \\\n-\t\tUINT32_C(0x2)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_LVL_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_LVL_LVL_2\n-\t/* Timer page size. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_MASK \\\n-\t\tUINT32_C(0xf0)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_SFT   4\n-\t/* 4KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_PG_4K \\\n-\t\t(UINT32_C(0x0) << 4)\n-\t/* 8KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_PG_8K \\\n-\t\t(UINT32_C(0x1) << 4)\n-\t/* 64KB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_PG_64K \\\n-\t\t(UINT32_C(0x2) << 4)\n-\t/* 2MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_PG_2M \\\n-\t\t(UINT32_C(0x3) << 4)\n-\t/* 8MB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_PG_8M \\\n-\t\t(UINT32_C(0x4) << 4)\n-\t/* 1GB. */\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_PG_1G \\\n-\t\t(UINT32_C(0x5) << 4)\n-\t#define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_LAST \\\n-\t\tHWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_PG_1G\n-\t/* QP page directory. */\n-\tuint64_t\tqpc_page_dir;\n-\t/* SRQ page directory. */\n-\tuint64_t\tsrq_page_dir;\n-\t/* CQ page directory. */\n-\tuint64_t\tcq_page_dir;\n-\t/* VNIC page directory. */\n-\tuint64_t\tvnic_page_dir;\n-\t/* Stat page directory. */\n-\tuint64_t\tstat_page_dir;\n-\t/* TQM slowpath page directory. */\n-\tuint64_t\ttqm_sp_page_dir;\n-\t/* TQM ring 0 page directory. */\n-\tuint64_t\ttqm_ring0_page_dir;\n-\t/* TQM ring 1 page directory. */\n-\tuint64_t\ttqm_ring1_page_dir;\n-\t/* TQM ring 2 page directory. */\n-\tuint64_t\ttqm_ring2_page_dir;\n-\t/* TQM ring 3 page directory. */\n-\tuint64_t\ttqm_ring3_page_dir;\n-\t/* TQM ring 4 page directory. */\n-\tuint64_t\ttqm_ring4_page_dir;\n-\t/* TQM ring 5 page directory. */\n-\tuint64_t\ttqm_ring5_page_dir;\n-\t/* TQM ring 6 page directory. */\n-\tuint64_t\ttqm_ring6_page_dir;\n-\t/* TQM ring 7 page directory. */\n-\tuint64_t\ttqm_ring7_page_dir;\n-\t/* MR/AV page directory. */\n-\tuint64_t\tmrav_page_dir;\n-\t/* Timer page directory. */\n-\tuint64_t\ttim_page_dir;\n-\t/* Number of entries to reserve for QP1 */\n-\tuint16_t\tqp_num_qp1_entries;\n-\t/* Number of entries to reserve for L2 */\n-\tuint16_t\tqp_num_l2_entries;\n-\t/* Number of QPs. */\n-\tuint32_t\tqp_num_entries;\n-\t/* Number of SRQs. */\n-\tuint32_t\tsrq_num_entries;\n-\t/* Number of entries to reserve for L2 */\n-\tuint16_t\tsrq_num_l2_entries;\n-\t/* Number of entries to reserve for L2 */\n-\tuint16_t\tcq_num_l2_entries;\n-\t/* Number of CQs. */\n-\tuint32_t\tcq_num_entries;\n-\t/* Number of entries to reserve for VNIC entries */\n-\tuint16_t\tvnic_num_vnic_entries;\n-\t/* Number of entries to reserve for Ring table entries */\n-\tuint16_t\tvnic_num_ring_table_entries;\n-\t/* Number of Stats. */\n-\tuint32_t\tstat_num_entries;\n-\t/* Number of TQM slowpath entries. */\n-\tuint32_t\ttqm_sp_num_entries;\n-\t/* Number of TQM ring 0 entries. */\n-\tuint32_t\ttqm_ring0_num_entries;\n-\t/* Number of TQM ring 1 entries. */\n-\tuint32_t\ttqm_ring1_num_entries;\n-\t/* Number of TQM ring 2 entries. */\n-\tuint32_t\ttqm_ring2_num_entries;\n-\t/* Number of TQM ring 3 entries. */\n-\tuint32_t\ttqm_ring3_num_entries;\n-\t/* Number of TQM ring 4 entries. */\n-\tuint32_t\ttqm_ring4_num_entries;\n-\t/* Number of TQM ring 5 entries. */\n-\tuint32_t\ttqm_ring5_num_entries;\n-\t/* Number of TQM ring 6 entries. */\n-\tuint32_t\ttqm_ring6_num_entries;\n-\t/* Number of TQM ring 7 entries. */\n-\tuint32_t\ttqm_ring7_num_entries;\n-\t/* Number of MR/AV entries. */\n-\tuint32_t\tmrav_num_entries;\n-\t/* Number of Timer entries. */\n-\tuint32_t\ttim_num_entries;\n-\tuint8_t\tunused_1[7];\n+\tuint8_t\tunused_0[3];\n \t/*\n \t * This field is used in Output records to indicate that the output\n \t * is completely written to RAM.  This field should be read as '1'\n@@ -11916,171 +9851,369 @@ struct hwrm_port_mac_ptp_qcfg_output {\n \tuint8_t\tvalid;\n } __attribute__((packed));\n \n-/********************\n- * hwrm_port_qstats *\n- ********************/\n-\n-\n-/* hwrm_port_qstats_input (size:320b/40B) */\n-struct hwrm_port_qstats_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n+/* Port Tx Statistics Formats */\n+/* tx_port_stats (size:3264b/408B) */\n+struct tx_port_stats {\n+\t/* Total Number of 64 Bytes frames transmitted */\n+\tuint64_t\ttx_64b_frames;\n+\t/* Total Number of 65-127 Bytes frames transmitted */\n+\tuint64_t\ttx_65b_127b_frames;\n+\t/* Total Number of 128-255 Bytes frames transmitted */\n+\tuint64_t\ttx_128b_255b_frames;\n+\t/* Total Number of 256-511 Bytes frames transmitted */\n+\tuint64_t\ttx_256b_511b_frames;\n+\t/* Total Number of 512-1023 Bytes frames transmitted */\n+\tuint64_t\ttx_512b_1023b_frames;\n+\t/* Total Number of 1024-1518 Bytes frames transmitted */\n+\tuint64_t\ttx_1024b_1518b_frames;\n \t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n+\t * Total Number of each good VLAN (exludes FCS errors)\n+\t * frame transmitted which is 1519 to 1522 bytes in length\n+\t * inclusive (excluding framing bits but including FCS bytes).\n \t */\n-\tuint16_t\tseq_id;\n+\tuint64_t\ttx_good_vlan_frames;\n+\t/* Total Number of 1519-2047 Bytes frames transmitted */\n+\tuint64_t\ttx_1519b_2047b_frames;\n+\t/* Total Number of 2048-4095 Bytes frames transmitted */\n+\tuint64_t\ttx_2048b_4095b_frames;\n+\t/* Total Number of 4096-9216 Bytes frames transmitted */\n+\tuint64_t\ttx_4096b_9216b_frames;\n+\t/* Total Number of 9217-16383 Bytes frames transmitted */\n+\tuint64_t\ttx_9217b_16383b_frames;\n+\t/* Total Number of good frames transmitted */\n+\tuint64_t\ttx_good_frames;\n+\t/* Total Number of frames transmitted */\n+\tuint64_t\ttx_total_frames;\n+\t/* Total number of unicast frames transmitted */\n+\tuint64_t\ttx_ucast_frames;\n+\t/* Total number of multicast frames transmitted */\n+\tuint64_t\ttx_mcast_frames;\n+\t/* Total number of broadcast frames transmitted */\n+\tuint64_t\ttx_bcast_frames;\n+\t/* Total number of PAUSE control frames transmitted */\n+\tuint64_t\ttx_pause_frames;\n \t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n+\t * Total number of PFC/per-priority PAUSE\n+\t * control frames transmitted\n \t */\n-\tuint16_t\ttarget_id;\n+\tuint64_t\ttx_pfc_frames;\n+\t/* Total number of jabber frames transmitted */\n+\tuint64_t\ttx_jabber_frames;\n+\t/* Total number of frames transmitted with FCS error */\n+\tuint64_t\ttx_fcs_err_frames;\n+\t/* Total number of control frames transmitted */\n+\tuint64_t\ttx_control_frames;\n+\t/* Total number of over-sized frames transmitted */\n+\tuint64_t\ttx_oversz_frames;\n+\t/* Total number of frames with single deferral */\n+\tuint64_t\ttx_single_dfrl_frames;\n+\t/* Total number of frames with multiple deferrals */\n+\tuint64_t\ttx_multi_dfrl_frames;\n+\t/* Total number of frames with single collision */\n+\tuint64_t\ttx_single_coll_frames;\n+\t/* Total number of frames with multiple collisions */\n+\tuint64_t\ttx_multi_coll_frames;\n+\t/* Total number of frames with late collisions */\n+\tuint64_t\ttx_late_coll_frames;\n+\t/* Total number of frames with excessive collisions */\n+\tuint64_t\ttx_excessive_coll_frames;\n+\t/* Total number of fragmented frames transmitted */\n+\tuint64_t\ttx_frag_frames;\n+\t/* Total number of transmit errors */\n+\tuint64_t\ttx_err;\n+\t/* Total number of single VLAN tagged frames transmitted */\n+\tuint64_t\ttx_tagged_frames;\n+\t/* Total number of double VLAN tagged frames transmitted */\n+\tuint64_t\ttx_dbl_tagged_frames;\n+\t/* Total number of runt frames transmitted */\n+\tuint64_t\ttx_runt_frames;\n+\t/* Total number of TX FIFO under runs */\n+\tuint64_t\ttx_fifo_underruns;\n \t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n+\t * Total number of PFC frames with PFC enabled bit for\n+\t * Pri 0 transmitted\n \t */\n-\tuint64_t\tresp_addr;\n-\t/* Port ID of port that is being queried. */\n-\tuint16_t\tport_id;\n-\tuint8_t\tunused_0[6];\n+\tuint64_t\ttx_pfc_ena_frames_pri0;\n \t/*\n-\t * This is the host address where\n-\t * Tx port statistics will be stored\n+\t * Total number of PFC frames with PFC enabled bit for\n+\t * Pri 1 transmitted\n \t */\n-\tuint64_t\ttx_stat_host_addr;\n+\tuint64_t\ttx_pfc_ena_frames_pri1;\n \t/*\n-\t * This is the host address where\n-\t * Rx port statistics will be stored\n+\t * Total number of PFC frames with PFC enabled bit for\n+\t * Pri 2 transmitted\n \t */\n-\tuint64_t\trx_stat_host_addr;\n-} __attribute__((packed));\n-\n-/* hwrm_port_qstats_output (size:128b/16B) */\n-struct hwrm_port_qstats_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\t/* The size of TX port statistics block in bytes. */\n-\tuint16_t\ttx_stat_size;\n-\t/* The size of RX port statistics block in bytes. */\n-\tuint16_t\trx_stat_size;\n-\tuint8_t\tunused_0[3];\n+\tuint64_t\ttx_pfc_ena_frames_pri2;\n \t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n+\t * Total number of PFC frames with PFC enabled bit for\n+\t * Pri 3 transmitted\n \t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/************************\n- * hwrm_port_qstats_ext *\n- ************************/\n-\n-\n-/* hwrm_port_qstats_ext_input (size:320b/40B) */\n-struct hwrm_port_qstats_ext_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n+\tuint64_t\ttx_pfc_ena_frames_pri3;\n \t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n+\t * Total number of PFC frames with PFC enabled bit for\n+\t * Pri 4 transmitted\n \t */\n-\tuint16_t\tcmpl_ring;\n+\tuint64_t\ttx_pfc_ena_frames_pri4;\n \t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n+\t * Total number of PFC frames with PFC enabled bit for\n+\t * Pri 5 transmitted\n \t */\n-\tuint16_t\tseq_id;\n+\tuint64_t\ttx_pfc_ena_frames_pri5;\n \t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n+\t * Total number of PFC frames with PFC enabled bit for\n+\t * Pri 6 transmitted\n \t */\n-\tuint16_t\ttarget_id;\n+\tuint64_t\ttx_pfc_ena_frames_pri6;\n \t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n+\t * Total number of PFC frames with PFC enabled bit for\n+\t * Pri 7 transmitted\n \t */\n-\tuint64_t\tresp_addr;\n-\t/* Port ID of port that is being queried. */\n-\tuint16_t\tport_id;\n+\tuint64_t\ttx_pfc_ena_frames_pri7;\n+\t/* Total number of EEE LPI Events on TX */\n+\tuint64_t\ttx_eee_lpi_events;\n+\t/* EEE LPI Duration Counter on TX */\n+\tuint64_t\ttx_eee_lpi_duration;\n \t/*\n-\t * The size of TX port extended\n-\t * statistics block in bytes.\n+\t * Total number of Link Level Flow Control (LLFC) messages\n+\t * transmitted\n \t */\n-\tuint16_t\ttx_stat_size;\n+\tuint64_t\ttx_llfc_logical_msgs;\n+\t/* Total number of HCFC messages transmitted */\n+\tuint64_t\ttx_hcfc_msgs;\n+\t/* Total number of TX collisions */\n+\tuint64_t\ttx_total_collisions;\n+\t/* Total number of transmitted bytes */\n+\tuint64_t\ttx_bytes;\n+\t/* Total number of end-to-end HOL frames */\n+\tuint64_t\ttx_xthol_frames;\n+\t/* Total Tx Drops per Port reported by STATS block */\n+\tuint64_t\ttx_stat_discard;\n+\t/* Total Tx Error Drops per Port reported by STATS block */\n+\tuint64_t\ttx_stat_error;\n+} __attribute__((packed));\n+\n+/* Port Rx Statistics Formats */\n+/* rx_port_stats (size:4224b/528B) */\n+struct rx_port_stats {\n+\t/* Total Number of 64 Bytes frames received */\n+\tuint64_t\trx_64b_frames;\n+\t/* Total Number of 65-127 Bytes frames received */\n+\tuint64_t\trx_65b_127b_frames;\n+\t/* Total Number of 128-255 Bytes frames received */\n+\tuint64_t\trx_128b_255b_frames;\n+\t/* Total Number of 256-511 Bytes frames received */\n+\tuint64_t\trx_256b_511b_frames;\n+\t/* Total Number of 512-1023 Bytes frames received */\n+\tuint64_t\trx_512b_1023b_frames;\n+\t/* Total Number of 1024-1518 Bytes frames received */\n+\tuint64_t\trx_1024b_1518b_frames;\n \t/*\n-\t * The size of RX port extended\n-\t * statistics block in bytes\n+\t * Total Number of each good VLAN (exludes FCS errors)\n+\t * frame received which is 1519 to 1522 bytes in length\n+\t * inclusive (excluding framing bits but including FCS bytes).\n \t */\n-\tuint16_t\trx_stat_size;\n-\tuint8_t\tunused_0[2];\n+\tuint64_t\trx_good_vlan_frames;\n+\t/* Total Number of 1519-2047 Bytes frames received */\n+\tuint64_t\trx_1519b_2047b_frames;\n+\t/* Total Number of 2048-4095 Bytes frames received */\n+\tuint64_t\trx_2048b_4095b_frames;\n+\t/* Total Number of 4096-9216 Bytes frames received */\n+\tuint64_t\trx_4096b_9216b_frames;\n+\t/* Total Number of 9217-16383 Bytes frames received */\n+\tuint64_t\trx_9217b_16383b_frames;\n+\t/* Total number of frames received */\n+\tuint64_t\trx_total_frames;\n+\t/* Total number of unicast frames received */\n+\tuint64_t\trx_ucast_frames;\n+\t/* Total number of multicast frames received */\n+\tuint64_t\trx_mcast_frames;\n+\t/* Total number of broadcast frames received */\n+\tuint64_t\trx_bcast_frames;\n+\t/* Total number of received frames with FCS error */\n+\tuint64_t\trx_fcs_err_frames;\n+\t/* Total number of control frames received */\n+\tuint64_t\trx_ctrl_frames;\n+\t/* Total number of PAUSE frames received */\n+\tuint64_t\trx_pause_frames;\n+\t/* Total number of PFC frames received */\n+\tuint64_t\trx_pfc_frames;\n \t/*\n-\t * This is the host address where\n-\t * Tx port statistics will be stored\n+\t * Total number of frames received with an unsupported\n+\t * opcode\n \t */\n-\tuint64_t\ttx_stat_host_addr;\n+\tuint64_t\trx_unsupported_opcode_frames;\n \t/*\n-\t * This is the host address where\n-\t * Rx port statistics will be stored\n+\t * Total number of frames received with an unsupported\n+\t * DA for pause and PFC\n \t */\n-\tuint64_t\trx_stat_host_addr;\n-} __attribute__((packed));\n-\n-/* hwrm_port_qstats_ext_output (size:128b/16B) */\n-struct hwrm_port_qstats_ext_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\t/* The size of TX port statistics block in bytes. */\n-\tuint16_t\ttx_stat_size;\n-\t/* The size of RX port statistics block in bytes. */\n-\tuint16_t\trx_stat_size;\n-\tuint8_t\tunused_0[3];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n+\tuint64_t\trx_unsupported_da_pausepfc_frames;\n+\t/* Total number of frames received with an unsupported SA */\n+\tuint64_t\trx_wrong_sa_frames;\n+\t/* Total number of received packets with alignment error */\n+\tuint64_t\trx_align_err_frames;\n+\t/* Total number of received frames with out-of-range length */\n+\tuint64_t\trx_oor_len_frames;\n+\t/* Total number of received frames with error termination */\n+\tuint64_t\trx_code_err_frames;\n+\t/*\n+\t * Total number of received frames with a false carrier is\n+\t * detected during idle, as defined by RX_ER samples active\n+\t * and RXD is 0xE. The event is reported along with the\n+\t * statistics generated on the next received frame. Only\n+\t * one false carrier condition can be detected and logged\n+\t * between frames.\n+\t *\n+\t * Carrier event, valid for 10M/100M speed modes only.\n \t */\n-\tuint8_t\tvalid;\n+\tuint64_t\trx_false_carrier_frames;\n+\t/* Total number of over-sized frames received */\n+\tuint64_t\trx_ovrsz_frames;\n+\t/* Total number of jabber packets received */\n+\tuint64_t\trx_jbr_frames;\n+\t/* Total number of received frames with MTU error */\n+\tuint64_t\trx_mtu_err_frames;\n+\t/* Total number of received frames with CRC match */\n+\tuint64_t\trx_match_crc_frames;\n+\t/* Total number of frames received promiscuously */\n+\tuint64_t\trx_promiscuous_frames;\n+\t/*\n+\t * Total number of received frames with one or two VLAN\n+\t * tags\n+\t */\n+\tuint64_t\trx_tagged_frames;\n+\t/* Total number of received frames with two VLAN tags */\n+\tuint64_t\trx_double_tagged_frames;\n+\t/* Total number of truncated frames received */\n+\tuint64_t\trx_trunc_frames;\n+\t/* Total number of good frames (without errors) received */\n+\tuint64_t\trx_good_frames;\n+\t/*\n+\t * Total number of received PFC frames with transition from\n+\t * XON to XOFF on Pri 0\n+\t */\n+\tuint64_t\trx_pfc_xon2xoff_frames_pri0;\n+\t/*\n+\t * Total number of received PFC frames with transition from\n+\t * XON to XOFF on Pri 1\n+\t */\n+\tuint64_t\trx_pfc_xon2xoff_frames_pri1;\n+\t/*\n+\t * Total number of received PFC frames with transition from\n+\t * XON to XOFF on Pri 2\n+\t */\n+\tuint64_t\trx_pfc_xon2xoff_frames_pri2;\n+\t/*\n+\t * Total number of received PFC frames with transition from\n+\t * XON to XOFF on Pri 3\n+\t */\n+\tuint64_t\trx_pfc_xon2xoff_frames_pri3;\n+\t/*\n+\t * Total number of received PFC frames with transition from\n+\t * XON to XOFF on Pri 4\n+\t */\n+\tuint64_t\trx_pfc_xon2xoff_frames_pri4;\n+\t/*\n+\t * Total number of received PFC frames with transition from\n+\t * XON to XOFF on Pri 5\n+\t */\n+\tuint64_t\trx_pfc_xon2xoff_frames_pri5;\n+\t/*\n+\t * Total number of received PFC frames with transition from\n+\t * XON to XOFF on Pri 6\n+\t */\n+\tuint64_t\trx_pfc_xon2xoff_frames_pri6;\n+\t/*\n+\t * Total number of received PFC frames with transition from\n+\t * XON to XOFF on Pri 7\n+\t */\n+\tuint64_t\trx_pfc_xon2xoff_frames_pri7;\n+\t/*\n+\t * Total number of received PFC frames with PFC enabled\n+\t * bit for Pri 0\n+\t */\n+\tuint64_t\trx_pfc_ena_frames_pri0;\n+\t/*\n+\t * Total number of received PFC frames with PFC enabled\n+\t * bit for Pri 1\n+\t */\n+\tuint64_t\trx_pfc_ena_frames_pri1;\n+\t/*\n+\t * Total number of received PFC frames with PFC enabled\n+\t * bit for Pri 2\n+\t */\n+\tuint64_t\trx_pfc_ena_frames_pri2;\n+\t/*\n+\t * Total number of received PFC frames with PFC enabled\n+\t * bit for Pri 3\n+\t */\n+\tuint64_t\trx_pfc_ena_frames_pri3;\n+\t/*\n+\t * Total number of received PFC frames with PFC enabled\n+\t * bit for Pri 4\n+\t */\n+\tuint64_t\trx_pfc_ena_frames_pri4;\n+\t/*\n+\t * Total number of received PFC frames with PFC enabled\n+\t * bit for Pri 5\n+\t */\n+\tuint64_t\trx_pfc_ena_frames_pri5;\n+\t/*\n+\t * Total number of received PFC frames with PFC enabled\n+\t * bit for Pri 6\n+\t */\n+\tuint64_t\trx_pfc_ena_frames_pri6;\n+\t/*\n+\t * Total number of received PFC frames with PFC enabled\n+\t * bit for Pri 7\n+\t */\n+\tuint64_t\trx_pfc_ena_frames_pri7;\n+\t/* Total Number of frames received with SCH CRC error */\n+\tuint64_t\trx_sch_crc_err_frames;\n+\t/* Total Number of under-sized frames received */\n+\tuint64_t\trx_undrsz_frames;\n+\t/* Total Number of fragmented frames received */\n+\tuint64_t\trx_frag_frames;\n+\t/* Total number of RX EEE LPI Events */\n+\tuint64_t\trx_eee_lpi_events;\n+\t/* EEE LPI Duration Counter on RX */\n+\tuint64_t\trx_eee_lpi_duration;\n+\t/*\n+\t * Total number of physical type Link Level Flow Control\n+\t * (LLFC) messages received\n+\t */\n+\tuint64_t\trx_llfc_physical_msgs;\n+\t/*\n+\t * Total number of logical type Link Level Flow Control\n+\t * (LLFC) messages received\n+\t */\n+\tuint64_t\trx_llfc_logical_msgs;\n+\t/*\n+\t * Total number of logical type Link Level Flow Control\n+\t * (LLFC) messages received with CRC error\n+\t */\n+\tuint64_t\trx_llfc_msgs_with_crc_err;\n+\t/* Total number of HCFC messages received */\n+\tuint64_t\trx_hcfc_msgs;\n+\t/* Total number of HCFC messages received with CRC error */\n+\tuint64_t\trx_hcfc_msgs_with_crc_err;\n+\t/* Total number of received bytes */\n+\tuint64_t\trx_bytes;\n+\t/* Total number of bytes received in runt frames */\n+\tuint64_t\trx_runt_bytes;\n+\t/* Total number of runt frames received */\n+\tuint64_t\trx_runt_frames;\n+\t/* Total Rx Discards per Port reported by STATS block */\n+\tuint64_t\trx_stat_discard;\n+\tuint64_t\trx_stat_err;\n } __attribute__((packed));\n \n-/*************************\n- * hwrm_port_lpbk_qstats *\n- *************************/\n+/********************\n+ * hwrm_port_qstats *\n+ ********************/\n \n \n-/* hwrm_port_lpbk_qstats_input (size:128b/16B) */\n-struct hwrm_port_lpbk_qstats_input {\n+/* hwrm_port_qstats_input (size:320b/40B) */\n+struct hwrm_port_qstats_input {\n \t/* The HWRM command request type. */\n \tuint16_t\treq_type;\n \t/*\n@@ -12108,10 +10241,23 @@ struct hwrm_port_lpbk_qstats_input {\n \t * point to a physically contiguous block of memory.\n \t */\n \tuint64_t\tresp_addr;\n+\t/* Port ID of port that is being queried. */\n+\tuint16_t\tport_id;\n+\tuint8_t\tunused_0[6];\n+\t/*\n+\t * This is the host address where\n+\t * Tx port statistics will be stored\n+\t */\n+\tuint64_t\ttx_stat_host_addr;\n+\t/*\n+\t * This is the host address where\n+\t * Rx port statistics will be stored\n+\t */\n+\tuint64_t\trx_stat_host_addr;\n } __attribute__((packed));\n \n-/* hwrm_port_lpbk_qstats_output (size:768b/96B) */\n-struct hwrm_port_lpbk_qstats_output {\n+/* hwrm_port_qstats_output (size:128b/16B) */\n+struct hwrm_port_qstats_output {\n \t/* The specific error status for the command. */\n \tuint16_t\terror_code;\n \t/* The HWRM command request type. */\n@@ -12120,27 +10266,11 @@ struct hwrm_port_lpbk_qstats_output {\n \tuint16_t\tseq_id;\n \t/* The length of the response data in number of bytes. */\n \tuint16_t\tresp_len;\n-\t/* Number of transmitted unicast frames */\n-\tuint64_t\tlpbk_ucast_frames;\n-\t/* Number of transmitted multicast frames */\n-\tuint64_t\tlpbk_mcast_frames;\n-\t/* Number of transmitted broadcast frames */\n-\tuint64_t\tlpbk_bcast_frames;\n-\t/* Number of transmitted bytes for unicast traffic */\n-\tuint64_t\tlpbk_ucast_bytes;\n-\t/* Number of transmitted bytes for multicast traffic */\n-\tuint64_t\tlpbk_mcast_bytes;\n-\t/* Number of transmitted bytes for broadcast traffic */\n-\tuint64_t\tlpbk_bcast_bytes;\n-\t/* Total Tx Drops for loopback traffic reported by STATS block */\n-\tuint64_t\ttx_stat_discard;\n-\t/* Total Tx Error Drops for loopback traffic reported by STATS block */\n-\tuint64_t\ttx_stat_error;\n-\t/* Total Rx Drops for loopback traffic reported by STATS block */\n-\tuint64_t\trx_stat_discard;\n-\t/* Total Rx Error Drops for loopback traffic reported by STATS block */\n-\tuint64_t\trx_stat_error;\n-\tuint8_t\tunused_0[7];\n+\t/* The size of TX port statistics block in bytes. */\n+\tuint16_t\ttx_stat_size;\n+\t/* The size of RX port statistics block in bytes. */\n+\tuint16_t\trx_stat_size;\n+\tuint8_t\tunused_0[3];\n \t/*\n \t * This field is used in Output records to indicate that the output\n \t * is completely written to RAM.  This field should be read as '1'\n@@ -12151,13 +10281,161 @@ struct hwrm_port_lpbk_qstats_output {\n \tuint8_t\tvalid;\n } __attribute__((packed));\n \n-/***********************\n- * hwrm_port_clr_stats *\n- ***********************/\n+/* Port Tx Statistics extended Formats */\n+/* tx_port_stats_ext (size:2048b/256B) */\n+struct tx_port_stats_ext {\n+\t/* Total number of tx bytes count on cos queue 0 */\n+\tuint64_t\ttx_bytes_cos0;\n+\t/* Total number of tx bytes count on cos queue 1 */\n+\tuint64_t\ttx_bytes_cos1;\n+\t/* Total number of tx bytes count on cos queue 2 */\n+\tuint64_t\ttx_bytes_cos2;\n+\t/* Total number of tx bytes count on cos queue 3 */\n+\tuint64_t\ttx_bytes_cos3;\n+\t/* Total number of tx bytes count on cos queue 4 */\n+\tuint64_t\ttx_bytes_cos4;\n+\t/* Total number of tx bytes count on cos queue 5 */\n+\tuint64_t\ttx_bytes_cos5;\n+\t/* Total number of tx bytes count on cos queue 6 */\n+\tuint64_t\ttx_bytes_cos6;\n+\t/* Total number of tx bytes count on cos queue 7 */\n+\tuint64_t\ttx_bytes_cos7;\n+\t/* Total number of tx packets count on cos queue 0 */\n+\tuint64_t\ttx_packets_cos0;\n+\t/* Total number of tx packets count on cos queue 1 */\n+\tuint64_t\ttx_packets_cos1;\n+\t/* Total number of tx packets count on cos queue 2 */\n+\tuint64_t\ttx_packets_cos2;\n+\t/* Total number of tx packets count on cos queue 3 */\n+\tuint64_t\ttx_packets_cos3;\n+\t/* Total number of tx packets count on cos queue 4 */\n+\tuint64_t\ttx_packets_cos4;\n+\t/* Total number of tx packets count on cos queue 5 */\n+\tuint64_t\ttx_packets_cos5;\n+\t/* Total number of tx packets count on cos queue 6 */\n+\tuint64_t\ttx_packets_cos6;\n+\t/* Total number of tx packets count on cos queue 7 */\n+\tuint64_t\ttx_packets_cos7;\n+\t/* time duration between transmitting a XON -> XOFF and a subsequent XOFF -> XON for priority 0 */\n+\tuint64_t\tpfc_pri0_tx_duration_us;\n+\t/* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 0 */\n+\tuint64_t\tpfc_pri0_tx_transitions;\n+\t/* time duration between transmitting a XON -> XOFF and a subsequent XOFF -> XON for priority 1 */\n+\tuint64_t\tpfc_pri1_tx_duration_us;\n+\t/* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 1 */\n+\tuint64_t\tpfc_pri1_tx_transitions;\n+\t/* time duration between transmitting a XON -> XOFF and a subsequent XOFF -> XON for priority 2 */\n+\tuint64_t\tpfc_pri2_tx_duration_us;\n+\t/* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 2 */\n+\tuint64_t\tpfc_pri2_tx_transitions;\n+\t/* time duration between transmitting a XON -> XOFF and a subsequent XOFF -> XON for priority 3 */\n+\tuint64_t\tpfc_pri3_tx_duration_us;\n+\t/* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 3 */\n+\tuint64_t\tpfc_pri3_tx_transitions;\n+\t/* time duration between transmitting a XON -> XOFF and a subsequent XOFF -> XON for priority 4 */\n+\tuint64_t\tpfc_pri4_tx_duration_us;\n+\t/* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 4 */\n+\tuint64_t\tpfc_pri4_tx_transitions;\n+\t/* time duration between transmitting a XON -> XOFF and a subsequent XOFF -> XON for priority 5 */\n+\tuint64_t\tpfc_pri5_tx_duration_us;\n+\t/* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 5 */\n+\tuint64_t\tpfc_pri5_tx_transitions;\n+\t/* time duration between transmitting a XON -> XOFF and a subsequent XOFF -> XON for priority 6 */\n+\tuint64_t\tpfc_pri6_tx_duration_us;\n+\t/* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 6 */\n+\tuint64_t\tpfc_pri6_tx_transitions;\n+\t/* time duration between transmitting a XON -> XOFF and a subsequent XOFF -> XON for priority 7 */\n+\tuint64_t\tpfc_pri7_tx_duration_us;\n+\t/* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 7 */\n+\tuint64_t\tpfc_pri7_tx_transitions;\n+} __attribute__((packed));\n+\n+/* Port Rx Statistics extended Formats */\n+/* rx_port_stats_ext (size:2368b/296B) */\n+struct rx_port_stats_ext {\n+\t/* Number of times link state changed to down */\n+\tuint64_t\tlink_down_events;\n+\t/* Number of times the idle rings with pause bit are found */\n+\tuint64_t\tcontinuous_pause_events;\n+\t/* Number of times the active rings pause bit resumed back */\n+\tuint64_t\tresume_pause_events;\n+\t/* Number of times, the ROCE cos queue PFC is disabled to avoid pause flood/burst */\n+\tuint64_t\tcontinuous_roce_pause_events;\n+\t/* Number of times, the ROCE cos queue PFC is enabled back */\n+\tuint64_t\tresume_roce_pause_events;\n+\t/* Total number of rx bytes count on cos queue 0 */\n+\tuint64_t\trx_bytes_cos0;\n+\t/* Total number of rx bytes count on cos queue 1 */\n+\tuint64_t\trx_bytes_cos1;\n+\t/* Total number of rx bytes count on cos queue 2 */\n+\tuint64_t\trx_bytes_cos2;\n+\t/* Total number of rx bytes count on cos queue 3 */\n+\tuint64_t\trx_bytes_cos3;\n+\t/* Total number of rx bytes count on cos queue 4 */\n+\tuint64_t\trx_bytes_cos4;\n+\t/* Total number of rx bytes count on cos queue 5 */\n+\tuint64_t\trx_bytes_cos5;\n+\t/* Total number of rx bytes count on cos queue 6 */\n+\tuint64_t\trx_bytes_cos6;\n+\t/* Total number of rx bytes count on cos queue 7 */\n+\tuint64_t\trx_bytes_cos7;\n+\t/* Total number of rx packets count on cos queue 0 */\n+\tuint64_t\trx_packets_cos0;\n+\t/* Total number of rx packets count on cos queue 1 */\n+\tuint64_t\trx_packets_cos1;\n+\t/* Total number of rx packets count on cos queue 2 */\n+\tuint64_t\trx_packets_cos2;\n+\t/* Total number of rx packets count on cos queue 3 */\n+\tuint64_t\trx_packets_cos3;\n+\t/* Total number of rx packets count on cos queue 4 */\n+\tuint64_t\trx_packets_cos4;\n+\t/* Total number of rx packets count on cos queue 5 */\n+\tuint64_t\trx_packets_cos5;\n+\t/* Total number of rx packets count on cos queue 6 */\n+\tuint64_t\trx_packets_cos6;\n+\t/* Total number of rx packets count on cos queue 7 */\n+\tuint64_t\trx_packets_cos7;\n+\t/* time duration receiving a XON -> XOFF and a subsequent XOFF -> XON for priority 0 */\n+\tuint64_t\tpfc_pri0_rx_duration_us;\n+\t/* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 0 */\n+\tuint64_t\tpfc_pri0_rx_transitions;\n+\t/* time duration receiving a XON -> XOFF and a subsequent XOFF -> XON for priority 1 */\n+\tuint64_t\tpfc_pri1_rx_duration_us;\n+\t/* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 1 */\n+\tuint64_t\tpfc_pri1_rx_transitions;\n+\t/* time duration receiving a XON -> XOFF and a subsequent XOFF -> XON for priority 2 */\n+\tuint64_t\tpfc_pri2_rx_duration_us;\n+\t/* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 2 */\n+\tuint64_t\tpfc_pri2_rx_transitions;\n+\t/* time duration receiving a XON -> XOFF and a subsequent XOFF -> XON for priority 3 */\n+\tuint64_t\tpfc_pri3_rx_duration_us;\n+\t/* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 3 */\n+\tuint64_t\tpfc_pri3_rx_transitions;\n+\t/* time duration receiving a XON -> XOFF and a subsequent XOFF -> XON for priority 4 */\n+\tuint64_t\tpfc_pri4_rx_duration_us;\n+\t/* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 4 */\n+\tuint64_t\tpfc_pri4_rx_transitions;\n+\t/* time duration receiving a XON -> XOFF and a subsequent XOFF -> XON for priority 5 */\n+\tuint64_t\tpfc_pri5_rx_duration_us;\n+\t/* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 5 */\n+\tuint64_t\tpfc_pri5_rx_transitions;\n+\t/* time duration receiving a XON -> XOFF and a subsequent XOFF -> XON for priority 6 */\n+\tuint64_t\tpfc_pri6_rx_duration_us;\n+\t/* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 6 */\n+\tuint64_t\tpfc_pri6_rx_transitions;\n+\t/* time duration receiving a XON -> XOFF and a subsequent XOFF -> XON for priority 7 */\n+\tuint64_t\tpfc_pri7_rx_duration_us;\n+\t/* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 7 */\n+\tuint64_t\tpfc_pri7_rx_transitions;\n+} __attribute__((packed));\n+\n+/************************\n+ * hwrm_port_qstats_ext *\n+ ************************/\n \n \n-/* hwrm_port_clr_stats_input (size:192b/24B) */\n-struct hwrm_port_clr_stats_input {\n+/* hwrm_port_qstats_ext_input (size:320b/40B) */\n+struct hwrm_port_qstats_ext_input {\n \t/* The HWRM command request type. */\n \tuint16_t\treq_type;\n \t/*\n@@ -12187,37 +10465,69 @@ struct hwrm_port_clr_stats_input {\n \tuint64_t\tresp_addr;\n \t/* Port ID of port that is being queried. */\n \tuint16_t\tport_id;\n-\tuint8_t\tunused_0[6];\n-} __attribute__((packed));\n-\n-/* hwrm_port_clr_stats_output (size:128b/16B) */\n-struct hwrm_port_clr_stats_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\tuint8_t\tunused_0[7];\n \t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n+\t * The size of TX port extended\n+\t * statistics block in bytes.\n+\t */\n+\tuint16_t\ttx_stat_size;\n+\t/*\n+\t * The size of RX port extended\n+\t * statistics block in bytes\n+\t */\n+\tuint16_t\trx_stat_size;\n+\tuint8_t\tunused_0[2];\n+\t/*\n+\t * This is the host address where\n+\t * Tx port statistics will be stored\n+\t */\n+\tuint64_t\ttx_stat_host_addr;\n+\t/*\n+\t * This is the host address where\n+\t * Rx port statistics will be stored\n+\t */\n+\tuint64_t\trx_stat_host_addr;\n+} __attribute__((packed));\n+\n+/* hwrm_port_qstats_ext_output (size:128b/16B) */\n+struct hwrm_port_qstats_ext_output {\n+\t/* The specific error status for the command. */\n+\tuint16_t\terror_code;\n+\t/* The HWRM command request type. */\n+\tuint16_t\treq_type;\n+\t/* The sequence ID from the original command. */\n+\tuint16_t\tseq_id;\n+\t/* The length of the response data in number of bytes. */\n+\tuint16_t\tresp_len;\n+\t/* The size of TX port statistics block in bytes. */\n+\tuint16_t\ttx_stat_size;\n+\t/* The size of RX port statistics block in bytes. */\n+\tuint16_t\trx_stat_size;\n+\t/* Total number of active cos queues available. */\n+\tuint16_t\ttotal_active_cos_queues;\n+\tuint8_t\tflags;\n+\t/*\n+\t * If set to 1, then this field indicates that clear\n+\t * roce specific counters is supported.\n+\t */\n+\t#define HWRM_PORT_QSTATS_EXT_OUTPUT_FLAGS_CLEAR_ROCE_COUNTERS_SUPPORTED \\\n+\t\tUINT32_C(0x1)\n+\t/*\n+\t * This field is used in Output records to indicate that the output\n+\t * is completely written to RAM.  This field should be read as '1'\n+\t * to indicate that the output has been completely written.\n+\t * When writing a command completion or response to an internal processor,\n \t * the order of writes has to be such that this field is written last.\n \t */\n \tuint8_t\tvalid;\n } __attribute__((packed));\n \n-/****************************\n- * hwrm_port_lpbk_clr_stats *\n- ****************************/\n+/*************************\n+ * hwrm_port_lpbk_qstats *\n+ *************************/\n \n \n-/* hwrm_port_lpbk_clr_stats_input (size:128b/16B) */\n-struct hwrm_port_lpbk_clr_stats_input {\n+/* hwrm_port_lpbk_qstats_input (size:128b/16B) */\n+struct hwrm_port_lpbk_qstats_input {\n \t/* The HWRM command request type. */\n \tuint16_t\treq_type;\n \t/*\n@@ -12247,8 +10557,8 @@ struct hwrm_port_lpbk_clr_stats_input {\n \tuint64_t\tresp_addr;\n } __attribute__((packed));\n \n-/* hwrm_port_lpbk_clr_stats_output (size:128b/16B) */\n-struct hwrm_port_lpbk_clr_stats_output {\n+/* hwrm_port_lpbk_qstats_output (size:768b/96B) */\n+struct hwrm_port_lpbk_qstats_output {\n \t/* The specific error status for the command. */\n \tuint16_t\terror_code;\n \t/* The HWRM command request type. */\n@@ -12257,6 +10567,26 @@ struct hwrm_port_lpbk_clr_stats_output {\n \tuint16_t\tseq_id;\n \t/* The length of the response data in number of bytes. */\n \tuint16_t\tresp_len;\n+\t/* Number of transmitted unicast frames */\n+\tuint64_t\tlpbk_ucast_frames;\n+\t/* Number of transmitted multicast frames */\n+\tuint64_t\tlpbk_mcast_frames;\n+\t/* Number of transmitted broadcast frames */\n+\tuint64_t\tlpbk_bcast_frames;\n+\t/* Number of transmitted bytes for unicast traffic */\n+\tuint64_t\tlpbk_ucast_bytes;\n+\t/* Number of transmitted bytes for multicast traffic */\n+\tuint64_t\tlpbk_mcast_bytes;\n+\t/* Number of transmitted bytes for broadcast traffic */\n+\tuint64_t\tlpbk_bcast_bytes;\n+\t/* Total Tx Drops for loopback traffic reported by STATS block */\n+\tuint64_t\ttx_stat_discard;\n+\t/* Total Tx Error Drops for loopback traffic reported by STATS block */\n+\tuint64_t\ttx_stat_error;\n+\t/* Total Rx Drops for loopback traffic reported by STATS block */\n+\tuint64_t\trx_stat_discard;\n+\t/* Total Rx Error Drops for loopback traffic reported by STATS block */\n+\tuint64_t\trx_stat_error;\n \tuint8_t\tunused_0[7];\n \t/*\n \t * This field is used in Output records to indicate that the output\n@@ -12268,13 +10598,13 @@ struct hwrm_port_lpbk_clr_stats_output {\n \tuint8_t\tvalid;\n } __attribute__((packed));\n \n-/**********************\n- * hwrm_port_ts_query *\n- **********************/\n+/***********************\n+ * hwrm_port_clr_stats *\n+ ***********************/\n \n \n-/* hwrm_port_ts_query_input (size:192b/24B) */\n-struct hwrm_port_ts_query_input {\n+/* hwrm_port_clr_stats_input (size:192b/24B) */\n+struct hwrm_port_clr_stats_input {\n \t/* The HWRM command request type. */\n \tuint16_t\treq_type;\n \t/*\n@@ -12302,26 +10632,24 @@ struct hwrm_port_ts_query_input {\n \t * point to a physically contiguous block of memory.\n \t */\n \tuint64_t\tresp_addr;\n-\tuint32_t\tflags;\n-\t/*\n-\t * Enumeration denoting the RX, TX type of the resource.\n-\t * This enumeration is used for resources that are similar for both\n-\t * TX and RX paths of the chip.\n-\t */\n-\t#define HWRM_PORT_TS_QUERY_INPUT_FLAGS_PATH     UINT32_C(0x1)\n-\t/* tx path */\n-\t#define HWRM_PORT_TS_QUERY_INPUT_FLAGS_PATH_TX    UINT32_C(0x0)\n-\t/* rx path */\n-\t#define HWRM_PORT_TS_QUERY_INPUT_FLAGS_PATH_RX    UINT32_C(0x1)\n-\t#define HWRM_PORT_TS_QUERY_INPUT_FLAGS_PATH_LAST \\\n-\t\tHWRM_PORT_TS_QUERY_INPUT_FLAGS_PATH_RX\n \t/* Port ID of port that is being queried. */\n \tuint16_t\tport_id;\n-\tuint8_t\tunused_0[2];\n+\tuint8_t\tflags;\n+\t/*\n+\t * If set to 1, then this field indicates clear the following RoCE\n+\t * specific counters.\n+\t * RoCE associated TX/RX cos counters\n+\t * CNP associated TX/RX cos counters\n+\t * RoCE/CNP specific TX/RX flow counters\n+\t * Firmware will determine the RoCE/CNP cos queue based on qos profile.\n+\t * This flag is honored only when RoCE is enabled on that port.\n+\t */\n+\t#define HWRM_PORT_CLR_STATS_INPUT_FLAGS_ROCE_COUNTERS     UINT32_C(0x1)\n+\tuint8_t\tunused_0[5];\n } __attribute__((packed));\n \n-/* hwrm_port_ts_query_output (size:192b/24B) */\n-struct hwrm_port_ts_query_output {\n+/* hwrm_port_clr_stats_output (size:128b/16B) */\n+struct hwrm_port_clr_stats_output {\n \t/* The specific error status for the command. */\n \tuint16_t\terror_code;\n \t/* The HWRM command request type. */\n@@ -12330,11 +10658,7 @@ struct hwrm_port_ts_query_output {\n \tuint16_t\tseq_id;\n \t/* The length of the response data in number of bytes. */\n \tuint16_t\tresp_len;\n-\t/* Timestamp value of PTP message captured. */\n-\tuint64_t\tptp_msg_ts;\n-\t/* Sequence ID of the PTP message captured. */\n-\tuint16_t\tptp_msg_seqid;\n-\tuint8_t\tunused_0[5];\n+\tuint8_t\tunused_0[7];\n \t/*\n \t * This field is used in Output records to indicate that the output\n \t * is completely written to RAM.  This field should be read as '1'\n@@ -12593,172 +10917,6 @@ struct hwrm_port_phy_qcaps_output {\n \t#define HWRM_PORT_PHY_QCAPS_OUTPUT_VALID_SFT             24\n } __attribute__((packed));\n \n-/***************************\n- * hwrm_port_phy_i2c_write *\n- ***************************/\n-\n-\n-/* hwrm_port_phy_i2c_write_input (size:832b/104B) */\n-struct hwrm_port_phy_i2c_write_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\tuint32_t\tflags;\n-\tuint32_t\tenables;\n-\t/*\n-\t * This bit must be '1' for the page_offset field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_PORT_PHY_I2C_WRITE_INPUT_ENABLES_PAGE_OFFSET \\\n-\t\tUINT32_C(0x1)\n-\t/* Port ID of port. */\n-\tuint16_t\tport_id;\n-\t/* 8-bit I2C slave address. */\n-\tuint8_t\ti2c_slave_addr;\n-\tuint8_t\tunused_0;\n-\t/* The page number that is being accessed over I2C. */\n-\tuint16_t\tpage_number;\n-\t/* Offset within the page that is being accessed over I2C. */\n-\tuint16_t\tpage_offset;\n-\t/*\n-\t * Length of data to write, in bytes starting at the offset\n-\t * specified above. If the offset is not specified, then\n-\t * the data shall be written from the beginning of the page.\n-\t */\n-\tuint8_t\tdata_length;\n-\tuint8_t\tunused_1[7];\n-\t/* Up to 64B of data. */\n-\tuint32_t\tdata[16];\n-} __attribute__((packed));\n-\n-/* hwrm_port_phy_i2c_write_output (size:128b/16B) */\n-struct hwrm_port_phy_i2c_write_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\tuint8_t\tunused_0[7];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/**************************\n- * hwrm_port_phy_i2c_read *\n- **************************/\n-\n-\n-/* hwrm_port_phy_i2c_read_input (size:320b/40B) */\n-struct hwrm_port_phy_i2c_read_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\tuint32_t\tflags;\n-\tuint32_t\tenables;\n-\t/*\n-\t * This bit must be '1' for the page_offset field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_PORT_PHY_I2C_READ_INPUT_ENABLES_PAGE_OFFSET \\\n-\t\tUINT32_C(0x1)\n-\t/* Port ID of port. */\n-\tuint16_t\tport_id;\n-\t/* 8-bit I2C slave address. */\n-\tuint8_t\ti2c_slave_addr;\n-\tuint8_t\tunused_0;\n-\t/* The page number that is being accessed over I2C. */\n-\tuint16_t\tpage_number;\n-\t/* Offset within the page that is being accessed over I2C. */\n-\tuint16_t\tpage_offset;\n-\t/*\n-\t * Length of data to read, in bytes starting at the offset\n-\t * specified above. If the offset is not specified, then\n-\t * the data shall be read from the beginning of the page.\n-\t */\n-\tuint8_t\tdata_length;\n-\tuint8_t\tunused_1[7];\n-} __attribute__((packed));\n-\n-/* hwrm_port_phy_i2c_read_output (size:640b/80B) */\n-struct hwrm_port_phy_i2c_read_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\t/* Up to 64B of data. */\n-\tuint32_t\tdata[16];\n-\tuint8_t\tunused_0[7];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n /*********************\n  * hwrm_port_led_cfg *\n  *********************/\n@@ -17077,4572 +15235,37 @@ struct hwrm_queue_cos2bw_cfg_input {\n \t\t(UINT32_C(0x7) << 29)\n \t#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_LAST \\\n \t\tHWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_INVALID\n-\t/* Transmission Selection Algorithm (TSA) for CoS Queue. */\n-\tuint8_t\tqueue_id7_tsa_assign;\n-\t/* Strict Priority */\n-\t#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_TSA_ASSIGN_SP \\\n-\t\tUINT32_C(0x0)\n-\t/* Enhanced Transmission Selection */\n-\t#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_TSA_ASSIGN_ETS \\\n-\t\tUINT32_C(0x1)\n-\t/* reserved. */\n-\t#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_TSA_ASSIGN_RESERVED_FIRST \\\n-\t\tUINT32_C(0x2)\n-\t/* reserved. */\n-\t#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_TSA_ASSIGN_RESERVED_LAST \\\n-\t\tUINT32_C(0xff)\n-\t/*\n-\t * Priority level for strict priority. Valid only when the\n-\t * tsa_assign is 0 - Strict Priority (SP)\n-\t * 0..7 - Valid values.\n-\t * 8..255 - Reserved.\n-\t */\n-\tuint8_t\tqueue_id7_pri_lvl;\n-\t/*\n-\t * Weight used to allocate remaining BW for this COS after\n-\t * servicing guaranteed bandwidths for all COS.\n-\t */\n-\tuint8_t\tqueue_id7_bw_weight;\n-\tuint8_t\tunused_1[5];\n-} __attribute__((packed));\n-\n-/* hwrm_queue_cos2bw_cfg_output (size:128b/16B) */\n-struct hwrm_queue_cos2bw_cfg_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\tuint8_t\tunused_0[7];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/*************************\n- * hwrm_queue_dscp_qcaps *\n- *************************/\n-\n-\n-/* hwrm_queue_dscp_qcaps_input (size:192b/24B) */\n-struct hwrm_queue_dscp_qcaps_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\t/*\n-\t * Port ID of port for which the table is being configured.\n-\t * The HWRM needs to check whether this function is allowed\n-\t * to configure pri2cos mapping on this port.\n-\t */\n-\tuint8_t\tport_id;\n-\tuint8_t\tunused_0[7];\n-} __attribute__((packed));\n-\n-/* hwrm_queue_dscp_qcaps_output (size:128b/16B) */\n-struct hwrm_queue_dscp_qcaps_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\t/* The number of bits provided by the hardware for the DSCP value. */\n-\tuint8_t\tnum_dscp_bits;\n-\tuint8_t\tunused_0;\n-\t/* Max number of DSCP-MASK-PRI entries supported. */\n-\tuint16_t\tmax_entries;\n-\tuint8_t\tunused_1[3];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/****************************\n- * hwrm_queue_dscp2pri_qcfg *\n- ****************************/\n-\n-\n-/* hwrm_queue_dscp2pri_qcfg_input (size:256b/32B) */\n-struct hwrm_queue_dscp2pri_qcfg_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\t/*\n-\t * This is the host address where the 24-bits DSCP-MASK-PRI\n-\t * tuple(s) will be copied to.\n-\t */\n-\tuint64_t\tdest_data_addr;\n-\t/*\n-\t * Port ID of port for which the table is being configured.\n-\t * The HWRM needs to check whether this function is allowed\n-\t * to configure pri2cos mapping on this port.\n-\t */\n-\tuint8_t\tport_id;\n-\tuint8_t\tunused_0;\n-\t/* Size of the buffer pointed to by dest_data_addr. */\n-\tuint16_t\tdest_data_buffer_size;\n-\tuint8_t\tunused_1[4];\n-} __attribute__((packed));\n-\n-/* hwrm_queue_dscp2pri_qcfg_output (size:128b/16B) */\n-struct hwrm_queue_dscp2pri_qcfg_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\t/*\n-\t * A count of the number of DSCP-MASK-PRI tuple(s) pointed to\n-\t * by the dest_data_addr.\n-\t */\n-\tuint16_t\tentry_cnt;\n-\t/*\n-\t * This is the default PRI which un-initialized DSCP values are\n-\t * mapped to.\n-\t */\n-\tuint8_t\tdefault_pri;\n-\tuint8_t\tunused_0[4];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/***************************\n- * hwrm_queue_dscp2pri_cfg *\n- ***************************/\n-\n-\n-/* hwrm_queue_dscp2pri_cfg_input (size:320b/40B) */\n-struct hwrm_queue_dscp2pri_cfg_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\t/*\n-\t * This is the host address where the 24-bits DSCP-MASK-PRI tuple\n-\t * will be copied from.\n-\t */\n-\tuint64_t\tsrc_data_addr;\n-\tuint32_t\tflags;\n-\t/* use_hw_default_pri is 1 b */\n-\t#define HWRM_QUEUE_DSCP2PRI_CFG_INPUT_FLAGS_USE_HW_DEFAULT_PRI \\\n-\t\tUINT32_C(0x1)\n-\tuint32_t\tenables;\n-\t/*\n-\t * This bit must be '1' for the default_pri field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_QUEUE_DSCP2PRI_CFG_INPUT_ENABLES_DEFAULT_PRI \\\n-\t\tUINT32_C(0x1)\n-\t/*\n-\t * Port ID of port for which the table is being configured.\n-\t * The HWRM needs to check whether this function is allowed\n-\t * to configure pri2cos mapping on this port.\n-\t */\n-\tuint8_t\tport_id;\n-\t/*\n-\t * This is the default PRI which un-initialized DSCP values will be\n-\t * mapped to.\n-\t */\n-\tuint8_t\tdefault_pri;\n-\t/*\n-\t * A count of the number of DSCP-MASK-PRI tuple(s) in the data pointed\n-\t * to by src_data_addr.\n-\t */\n-\tuint16_t\tentry_cnt;\n-\tuint8_t\tunused_0[4];\n-} __attribute__((packed));\n-\n-/* hwrm_queue_dscp2pri_cfg_output (size:128b/16B) */\n-struct hwrm_queue_dscp2pri_cfg_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\tuint8_t\tunused_0[7];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/*******************\n- * hwrm_vnic_alloc *\n- *******************/\n-\n-\n-/* hwrm_vnic_alloc_input (size:192b/24B) */\n-struct hwrm_vnic_alloc_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\tuint32_t\tflags;\n-\t/*\n-\t * When this bit is '1', this VNIC is requested to\n-\t * be the default VNIC for this function.\n-\t */\n-\t#define HWRM_VNIC_ALLOC_INPUT_FLAGS_DEFAULT     UINT32_C(0x1)\n-\tuint8_t\tunused_0[4];\n-} __attribute__((packed));\n-\n-/* hwrm_vnic_alloc_output (size:128b/16B) */\n-struct hwrm_vnic_alloc_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\t/* Logical vnic ID */\n-\tuint32_t\tvnic_id;\n-\tuint8_t\tunused_0[3];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/******************\n- * hwrm_vnic_free *\n- ******************/\n-\n-\n-/* hwrm_vnic_free_input (size:192b/24B) */\n-struct hwrm_vnic_free_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\t/* Logical vnic ID */\n-\tuint32_t\tvnic_id;\n-\tuint8_t\tunused_0[4];\n-} __attribute__((packed));\n-\n-/* hwrm_vnic_free_output (size:128b/16B) */\n-struct hwrm_vnic_free_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\tuint8_t\tunused_0[7];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/*****************\n- * hwrm_vnic_cfg *\n- *****************/\n-\n-\n-/* hwrm_vnic_cfg_input (size:320b/40B) */\n-struct hwrm_vnic_cfg_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\tuint32_t\tflags;\n-\t/*\n-\t * When this bit is '1', the VNIC is requested to\n-\t * be the default VNIC for the function.\n-\t */\n-\t#define HWRM_VNIC_CFG_INPUT_FLAGS_DEFAULT \\\n-\t\tUINT32_C(0x1)\n-\t/*\n-\t * When this bit is '1', the VNIC is being configured to\n-\t * strip VLAN in the RX path.\n-\t * If set to '0', then VLAN stripping is disabled on\n-\t * this VNIC.\n-\t */\n-\t#define HWRM_VNIC_CFG_INPUT_FLAGS_VLAN_STRIP_MODE \\\n-\t\tUINT32_C(0x2)\n-\t/*\n-\t * When this bit is '1', the VNIC is being configured to\n-\t * buffer receive packets in the hardware until the host\n-\t * posts new receive buffers.\n-\t * If set to '0', then bd_stall is being configured to be\n-\t * disabled on this VNIC.\n-\t */\n-\t#define HWRM_VNIC_CFG_INPUT_FLAGS_BD_STALL_MODE \\\n-\t\tUINT32_C(0x4)\n-\t/*\n-\t * When this bit is '1', the VNIC is being configured to\n-\t * receive both RoCE and non-RoCE traffic.\n-\t * If set to '0', then this VNIC is not configured to be\n-\t * operating in dual VNIC mode.\n-\t */\n-\t#define HWRM_VNIC_CFG_INPUT_FLAGS_ROCE_DUAL_VNIC_MODE \\\n-\t\tUINT32_C(0x8)\n-\t/*\n-\t * When this flag is set to '1', the VNIC is requested to\n-\t * be configured to receive only RoCE traffic.\n-\t * If this flag is set to '0', then this flag shall be\n-\t * ignored by the HWRM.\n-\t * If roce_dual_vnic_mode flag is set to '1'\n-\t * or roce_mirroring_capable_vnic_mode flag to 1,\n-\t * then the HWRM client shall not set this flag to '1'.\n-\t */\n-\t#define HWRM_VNIC_CFG_INPUT_FLAGS_ROCE_ONLY_VNIC_MODE \\\n-\t\tUINT32_C(0x10)\n-\t/*\n-\t * When a VNIC uses one destination ring group for certain\n-\t * application (e.g. Receive Flow Steering) where\n-\t * exact match is used to direct packets to a VNIC with one\n-\t * destination ring group only, there is no need to configure\n-\t * RSS indirection table for that VNIC as only one destination\n-\t * ring group is used.\n-\t *\n-\t * This flag is used to enable a mode where\n-\t * RSS is enabled in the VNIC using a RSS context\n-\t * for computing RSS hash but the RSS indirection table is\n-\t * not configured using hwrm_vnic_rss_cfg.\n-\t *\n-\t * If this mode is enabled, then the driver should not program\n-\t * RSS indirection table for the RSS context that is used for\n-\t * computing RSS hash only.\n-\t */\n-\t#define HWRM_VNIC_CFG_INPUT_FLAGS_RSS_DFLT_CR_MODE \\\n-\t\tUINT32_C(0x20)\n-\t/*\n-\t * When this bit is '1', the VNIC is being configured to\n-\t * receive both RoCE and non-RoCE traffic, but forward only the\n-\t * RoCE traffic further. Also, RoCE traffic can be mirrored to\n-\t * L2 driver.\n-\t */\n-\t#define HWRM_VNIC_CFG_INPUT_FLAGS_ROCE_MIRRORING_CAPABLE_VNIC_MODE \\\n-\t\tUINT32_C(0x40)\n-\tuint32_t\tenables;\n-\t/*\n-\t * This bit must be '1' for the dflt_ring_grp field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_VNIC_CFG_INPUT_ENABLES_DFLT_RING_GRP \\\n-\t\tUINT32_C(0x1)\n-\t/*\n-\t * This bit must be '1' for the rss_rule field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_VNIC_CFG_INPUT_ENABLES_RSS_RULE \\\n-\t\tUINT32_C(0x2)\n-\t/*\n-\t * This bit must be '1' for the cos_rule field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_VNIC_CFG_INPUT_ENABLES_COS_RULE \\\n-\t\tUINT32_C(0x4)\n-\t/*\n-\t * This bit must be '1' for the lb_rule field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_VNIC_CFG_INPUT_ENABLES_LB_RULE \\\n-\t\tUINT32_C(0x8)\n-\t/*\n-\t * This bit must be '1' for the mru field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_VNIC_CFG_INPUT_ENABLES_MRU \\\n-\t\tUINT32_C(0x10)\n-\t/*\n-\t * This bit must be '1' for the default_rx_ring_id field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_VNIC_CFG_INPUT_ENABLES_DEFAULT_RX_RING_ID \\\n-\t\tUINT32_C(0x20)\n-\t/*\n-\t * This bit must be '1' for the default_cmpl_ring_id field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_VNIC_CFG_INPUT_ENABLES_DEFAULT_CMPL_RING_ID \\\n-\t\tUINT32_C(0x40)\n-\t/* Logical vnic ID */\n-\tuint16_t\tvnic_id;\n-\t/*\n-\t * Default Completion ring for the VNIC.  This ring will\n-\t * be chosen if packet does not match any RSS rules and if\n-\t * there is no COS rule.\n-\t */\n-\tuint16_t\tdflt_ring_grp;\n-\t/*\n-\t * RSS ID for RSS rule/table structure.  0xFF... (All Fs) if\n-\t * there is no RSS rule.\n-\t */\n-\tuint16_t\trss_rule;\n-\t/*\n-\t * RSS ID for COS rule/table structure.  0xFF... (All Fs) if\n-\t * there is no COS rule.\n-\t */\n-\tuint16_t\tcos_rule;\n-\t/*\n-\t * RSS ID for load balancing rule/table structure.\n-\t * 0xFF... (All Fs) if there is no LB rule.\n-\t */\n-\tuint16_t\tlb_rule;\n-\t/*\n-\t * The maximum receive unit of the vnic.\n-\t * Each vnic is associated with a function.\n-\t * The vnic mru value overwrites the mru setting of the\n-\t * associated function.\n-\t * The HWRM shall make sure that vnic mru does not exceed\n-\t * the mru of the port the function is associated with.\n-\t */\n-\tuint16_t\tmru;\n-\t/*\n-\t * Default Rx ring for the VNIC.  This ring will\n-\t * be chosen if packet does not match any RSS rules.\n-\t * The aggregation ring associated with the Rx ring is\n-\t * implied based on the Rx ring specified when the\n-\t * aggregation ring was allocated.\n-\t */\n-\tuint16_t\tdefault_rx_ring_id;\n-\t/*\n-\t * Default completion ring for the VNIC.  This ring will\n-\t * be chosen if packet does not match any RSS rules.\n-\t */\n-\tuint16_t\tdefault_cmpl_ring_id;\n-} __attribute__((packed));\n-\n-/* hwrm_vnic_cfg_output (size:128b/16B) */\n-struct hwrm_vnic_cfg_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\tuint8_t\tunused_0[7];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/******************\n- * hwrm_vnic_qcfg *\n- ******************/\n-\n-\n-/* hwrm_vnic_qcfg_input (size:256b/32B) */\n-struct hwrm_vnic_qcfg_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\tuint32_t\tenables;\n-\t/*\n-\t * This bit must be '1' for the vf_id_valid field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_VNIC_QCFG_INPUT_ENABLES_VF_ID_VALID     UINT32_C(0x1)\n-\t/* Logical vnic ID */\n-\tuint32_t\tvnic_id;\n-\t/* ID of Virtual Function whose VNIC resource is being queried. */\n-\tuint16_t\tvf_id;\n-\tuint8_t\tunused_0[6];\n-} __attribute__((packed));\n-\n-/* hwrm_vnic_qcfg_output (size:256b/32B) */\n-struct hwrm_vnic_qcfg_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\t/* Default Completion ring for the VNIC. */\n-\tuint16_t\tdflt_ring_grp;\n-\t/*\n-\t * RSS ID for RSS rule/table structure.  0xFF... (All Fs) if\n-\t * there is no RSS rule.\n-\t */\n-\tuint16_t\trss_rule;\n-\t/*\n-\t * RSS ID for COS rule/table structure.  0xFF... (All Fs) if\n-\t * there is no COS rule.\n-\t */\n-\tuint16_t\tcos_rule;\n-\t/*\n-\t * RSS ID for load balancing rule/table structure.\n-\t * 0xFF... (All Fs) if there is no LB rule.\n-\t */\n-\tuint16_t\tlb_rule;\n-\t/* The maximum receive unit of the vnic. */\n-\tuint16_t\tmru;\n-\tuint8_t\tunused_0[2];\n-\tuint32_t\tflags;\n-\t/*\n-\t * When this bit is '1', the VNIC is the default VNIC for\n-\t * the function.\n-\t */\n-\t#define HWRM_VNIC_QCFG_OUTPUT_FLAGS_DEFAULT \\\n-\t\tUINT32_C(0x1)\n-\t/*\n-\t * When this bit is '1', the VNIC is configured to\n-\t * strip VLAN in the RX path.\n-\t * If set to '0', then VLAN stripping is disabled on\n-\t * this VNIC.\n-\t */\n-\t#define HWRM_VNIC_QCFG_OUTPUT_FLAGS_VLAN_STRIP_MODE \\\n-\t\tUINT32_C(0x2)\n-\t/*\n-\t * When this bit is '1', the VNIC is configured to\n-\t * buffer receive packets in the hardware until the host\n-\t * posts new receive buffers.\n-\t * If set to '0', then bd_stall is disabled on\n-\t * this VNIC.\n-\t */\n-\t#define HWRM_VNIC_QCFG_OUTPUT_FLAGS_BD_STALL_MODE \\\n-\t\tUINT32_C(0x4)\n-\t/*\n-\t * When this bit is '1', the VNIC is configured to\n-\t * receive both RoCE and non-RoCE traffic.\n-\t * If set to '0', then this VNIC is not configured to\n-\t * operate in dual VNIC mode.\n-\t */\n-\t#define HWRM_VNIC_QCFG_OUTPUT_FLAGS_ROCE_DUAL_VNIC_MODE \\\n-\t\tUINT32_C(0x8)\n-\t/*\n-\t * When this flag is set to '1', the VNIC is configured to\n-\t * receive only RoCE traffic.\n-\t * When this flag is set to '0', the VNIC is not configured\n-\t * to receive only RoCE traffic.\n-\t * If roce_dual_vnic_mode flag and this flag both are set\n-\t * to '1', then it is an invalid configuration of the\n-\t * VNIC. The HWRM should not allow that type of\n-\t * mis-configuration by HWRM clients.\n-\t */\n-\t#define HWRM_VNIC_QCFG_OUTPUT_FLAGS_ROCE_ONLY_VNIC_MODE \\\n-\t\tUINT32_C(0x10)\n-\t/*\n-\t * When a VNIC uses one destination ring group for certain\n-\t * application (e.g. Receive Flow Steering) where\n-\t * exact match is used to direct packets to a VNIC with one\n-\t * destination ring group only, there is no need to configure\n-\t * RSS indirection table for that VNIC as only one destination\n-\t * ring group is used.\n-\t *\n-\t * When this bit is set to '1', then the VNIC is enabled in a\n-\t * mode where RSS is enabled in the VNIC using a RSS context\n-\t * for computing RSS hash but the RSS indirection table is\n-\t * not configured.\n-\t */\n-\t#define HWRM_VNIC_QCFG_OUTPUT_FLAGS_RSS_DFLT_CR_MODE \\\n-\t\tUINT32_C(0x20)\n-\t/*\n-\t * When this bit is '1', the VNIC is configured to\n-\t * receive both RoCE and non-RoCE traffic, but forward only\n-\t * RoCE traffic further. Also RoCE traffic can be mirrored to\n-\t * L2 driver.\n-\t */\n-\t#define HWRM_VNIC_QCFG_OUTPUT_FLAGS_ROCE_MIRRORING_CAPABLE_VNIC_MODE \\\n-\t\tUINT32_C(0x40)\n-\tuint8_t\tunused_1[7];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/*******************\n- * hwrm_vnic_qcaps *\n- *******************/\n-\n-\n-/* hwrm_vnic_qcaps_input (size:192b/24B) */\n-struct hwrm_vnic_qcaps_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\tuint32_t\tenables;\n-\tuint8_t\tunused_0[4];\n-} __attribute__((packed));\n-\n-/* hwrm_vnic_qcaps_output (size:192b/24B) */\n-struct hwrm_vnic_qcaps_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\t/* The maximum receive unit that is settable on a vnic. */\n-\tuint16_t\tmru;\n-\tuint8_t\tunused_0[2];\n-\tuint32_t\tflags;\n-\t/* Unused. */\n-\t#define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_UNUSED \\\n-\t\tUINT32_C(0x1)\n-\t/*\n-\t * When this bit is '1', the capability of stripping VLAN in\n-\t * the RX path is supported on VNIC(s).\n-\t * If set to '0', then VLAN stripping capability is\n-\t * not supported on VNIC(s).\n-\t */\n-\t#define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_VLAN_STRIP_CAP \\\n-\t\tUINT32_C(0x2)\n-\t/*\n-\t * When this bit is '1', the capability to buffer receive\n-\t * packets in the hardware until the host posts new receive buffers\n-\t * is supported on VNIC(s).\n-\t * If set to '0', then bd_stall capability is not supported\n-\t * on VNIC(s).\n-\t */\n-\t#define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_BD_STALL_CAP \\\n-\t\tUINT32_C(0x4)\n-\t/*\n-\t * When this bit is '1', the capability to\n-\t * receive both RoCE and non-RoCE traffic on VNIC(s) is\n-\t * supported.\n-\t * If set to '0', then the capability to receive\n-\t * both RoCE and non-RoCE traffic on VNIC(s) is\n-\t * not supported.\n-\t */\n-\t#define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_ROCE_DUAL_VNIC_CAP \\\n-\t\tUINT32_C(0x8)\n-\t/*\n-\t * When this bit is set to '1', the capability to configure\n-\t * a VNIC to receive only RoCE traffic is supported.\n-\t * When this flag is set to '0', the VNIC capability to\n-\t * configure to receive only RoCE traffic is not supported.\n-\t */\n-\t#define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_ROCE_ONLY_VNIC_CAP \\\n-\t\tUINT32_C(0x10)\n-\t/*\n-\t * When this bit is set to '1', then the capability to enable\n-\t * a VNIC in a mode where RSS context without configuring\n-\t * RSS indirection table is supported (for RSS hash computation).\n-\t * When this bit is set to '0', then a VNIC can not be configured\n-\t * with a mode to enable RSS context without configuring RSS\n-\t * indirection table.\n-\t */\n-\t#define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_RSS_DFLT_CR_CAP \\\n-\t\tUINT32_C(0x20)\n-\t/*\n-\t * When this bit is '1', the capability to\n-\t * mirror the the RoCE traffic is supported.\n-\t * If set to '0', then the capability to mirror the\n-\t * RoCE traffic is not supported.\n-\t */\n-\t#define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_ROCE_MIRRORING_CAPABLE_VNIC_CAP \\\n-\t\tUINT32_C(0x40)\n-\t/*\n-\t * When this bit is '1', the outermost RSS hashing capability\n-\t * is supported. If set to '0', then the outermost RSS hashing\n-\t * capability is not supported.\n-\t */\n-\t#define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_OUTERMOST_RSS_CAP \\\n-\t\tUINT32_C(0x80)\n-\tuint8_t\tunused_1[7];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/*********************\n- * hwrm_vnic_tpa_cfg *\n- *********************/\n-\n-\n-/* hwrm_vnic_tpa_cfg_input (size:320b/40B) */\n-struct hwrm_vnic_tpa_cfg_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\tuint32_t\tflags;\n-\t/*\n-\t * When this bit is '1', the VNIC shall be configured to\n-\t * perform transparent packet aggregation (TPA) of\n-\t * non-tunneled TCP packets.\n-\t */\n-\t#define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_TPA \\\n-\t\tUINT32_C(0x1)\n-\t/*\n-\t * When this bit is '1', the VNIC shall be configured to\n-\t * perform transparent packet aggregation (TPA) of\n-\t * tunneled TCP packets.\n-\t */\n-\t#define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_ENCAP_TPA \\\n-\t\tUINT32_C(0x2)\n-\t/*\n-\t * When this bit is '1', the VNIC shall be configured to\n-\t * perform transparent packet aggregation (TPA) according\n-\t * to Windows Receive Segment Coalescing (RSC) rules.\n-\t */\n-\t#define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_RSC_WND_UPDATE \\\n-\t\tUINT32_C(0x4)\n-\t/*\n-\t * When this bit is '1', the VNIC shall be configured to\n-\t * perform transparent packet aggregation (TPA) according\n-\t * to Linux Generic Receive Offload (GRO) rules.\n-\t */\n-\t#define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_GRO \\\n-\t\tUINT32_C(0x8)\n-\t/*\n-\t * When this bit is '1', the VNIC shall be configured to\n-\t * perform transparent packet aggregation (TPA) for TCP\n-\t * packets with IP ECN set to non-zero.\n-\t */\n-\t#define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_AGG_WITH_ECN \\\n-\t\tUINT32_C(0x10)\n-\t/*\n-\t * When this bit is '1', the VNIC shall be configured to\n-\t * perform transparent packet aggregation (TPA) for\n-\t * GRE tunneled TCP packets only if all packets have the\n-\t * same GRE sequence.\n-\t */\n-\t#define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_AGG_WITH_SAME_GRE_SEQ \\\n-\t\tUINT32_C(0x20)\n-\t/*\n-\t * When this bit is '1' and the GRO mode is enabled,\n-\t * the VNIC shall be configured to\n-\t * perform transparent packet aggregation (TPA) for\n-\t * TCP/IPv4 packets with consecutively increasing IPIDs.\n-\t * In other words, the last packet that is being\n-\t * aggregated to an already existing aggregation context\n-\t * shall have IPID 1 more than the IPID of the last packet\n-\t * that was aggregated in that aggregation context.\n-\t */\n-\t#define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_GRO_IPID_CHECK \\\n-\t\tUINT32_C(0x40)\n-\t/*\n-\t * When this bit is '1' and the GRO mode is enabled,\n-\t * the VNIC shall be configured to\n-\t * perform transparent packet aggregation (TPA) for\n-\t * TCP packets with the same TTL (IPv4) or Hop limit (IPv6)\n-\t * value.\n-\t */\n-\t#define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_GRO_TTL_CHECK \\\n-\t\tUINT32_C(0x80)\n-\tuint32_t\tenables;\n-\t/*\n-\t * This bit must be '1' for the max_agg_segs field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_VNIC_TPA_CFG_INPUT_ENABLES_MAX_AGG_SEGS      UINT32_C(0x1)\n-\t/*\n-\t * This bit must be '1' for the max_aggs field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_VNIC_TPA_CFG_INPUT_ENABLES_MAX_AGGS          UINT32_C(0x2)\n-\t/*\n-\t * This bit must be '1' for the max_agg_timer field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_VNIC_TPA_CFG_INPUT_ENABLES_MAX_AGG_TIMER     UINT32_C(0x4)\n-\t/*\n-\t * This bit must be '1' for the min_agg_len field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_VNIC_TPA_CFG_INPUT_ENABLES_MIN_AGG_LEN       UINT32_C(0x8)\n-\t/* Logical vnic ID */\n-\tuint16_t\tvnic_id;\n-\t/*\n-\t * This is the maximum number of TCP segments that can\n-\t * be aggregated (unit is Log2). Max value is 31.\n-\t */\n-\tuint16_t\tmax_agg_segs;\n-\t/* 1 segment */\n-\t#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_1   UINT32_C(0x0)\n-\t/* 2 segments */\n-\t#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_2   UINT32_C(0x1)\n-\t/* 4 segments */\n-\t#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_4   UINT32_C(0x2)\n-\t/* 8 segments */\n-\t#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_8   UINT32_C(0x3)\n-\t/* Any segment size larger than this is not valid */\n-\t#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_MAX UINT32_C(0x1f)\n-\t#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_LAST \\\n-\t\tHWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_MAX\n-\t/*\n-\t * This is the maximum number of aggregations this VNIC is\n-\t * allowed (unit is Log2). Max value is 7\n-\t */\n-\tuint16_t\tmax_aggs;\n-\t/* 1 aggregation */\n-\t#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_1   UINT32_C(0x0)\n-\t/* 2 aggregations */\n-\t#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_2   UINT32_C(0x1)\n-\t/* 4 aggregations */\n-\t#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_4   UINT32_C(0x2)\n-\t/* 8 aggregations */\n-\t#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_8   UINT32_C(0x3)\n-\t/* 16 aggregations */\n-\t#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_16  UINT32_C(0x4)\n-\t/* Any aggregation size larger than this is not valid */\n-\t#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_MAX UINT32_C(0x7)\n-\t#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_LAST \\\n-\t\tHWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_MAX\n-\tuint8_t\tunused_0[2];\n-\t/*\n-\t * This is the maximum amount of time allowed for\n-\t * an aggregation context to complete after it was initiated.\n-\t */\n-\tuint32_t\tmax_agg_timer;\n-\t/*\n-\t * This is the minimum amount of payload length required to\n-\t * start an aggregation context.\n-\t */\n-\tuint32_t\tmin_agg_len;\n-} __attribute__((packed));\n-\n-/* hwrm_vnic_tpa_cfg_output (size:128b/16B) */\n-struct hwrm_vnic_tpa_cfg_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\tuint8_t\tunused_0[7];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/**********************\n- * hwrm_vnic_tpa_qcfg *\n- **********************/\n-\n-\n-/* hwrm_vnic_tpa_qcfg_input (size:192b/24B) */\n-struct hwrm_vnic_tpa_qcfg_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\t/* Logical vnic ID */\n-\tuint16_t\tvnic_id;\n-\tuint8_t\tunused_0[6];\n-} __attribute__((packed));\n-\n-/* hwrm_vnic_tpa_qcfg_output (size:256b/32B) */\n-struct hwrm_vnic_tpa_qcfg_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\tuint32_t\tflags;\n-\t/*\n-\t * When this bit is '1', the VNIC is configured to\n-\t * perform transparent packet aggregation (TPA) of\n-\t * non-tunneled TCP packets.\n-\t */\n-\t#define HWRM_VNIC_TPA_QCFG_OUTPUT_FLAGS_TPA \\\n-\t\tUINT32_C(0x1)\n-\t/*\n-\t * When this bit is '1', the VNIC is configured to\n-\t * perform transparent packet aggregation (TPA) of\n-\t * tunneled TCP packets.\n-\t */\n-\t#define HWRM_VNIC_TPA_QCFG_OUTPUT_FLAGS_ENCAP_TPA \\\n-\t\tUINT32_C(0x2)\n-\t/*\n-\t * When this bit is '1', the VNIC is configured to\n-\t * perform transparent packet aggregation (TPA) according\n-\t * to Windows Receive Segment Coalescing (RSC) rules.\n-\t */\n-\t#define HWRM_VNIC_TPA_QCFG_OUTPUT_FLAGS_RSC_WND_UPDATE \\\n-\t\tUINT32_C(0x4)\n-\t/*\n-\t * When this bit is '1', the VNIC is configured to\n-\t * perform transparent packet aggregation (TPA) according\n-\t * to Linux Generic Receive Offload (GRO) rules.\n-\t */\n-\t#define HWRM_VNIC_TPA_QCFG_OUTPUT_FLAGS_GRO \\\n-\t\tUINT32_C(0x8)\n-\t/*\n-\t * When this bit is '1', the VNIC is configured to\n-\t * perform transparent packet aggregation (TPA) for TCP\n-\t * packets with IP ECN set to non-zero.\n-\t */\n-\t#define HWRM_VNIC_TPA_QCFG_OUTPUT_FLAGS_AGG_WITH_ECN \\\n-\t\tUINT32_C(0x10)\n-\t/*\n-\t * When this bit is '1', the VNIC is configured to\n-\t * perform transparent packet aggregation (TPA) for\n-\t * GRE tunneled TCP packets only if all packets have the\n-\t * same GRE sequence.\n-\t */\n-\t#define HWRM_VNIC_TPA_QCFG_OUTPUT_FLAGS_AGG_WITH_SAME_GRE_SEQ \\\n-\t\tUINT32_C(0x20)\n-\t/*\n-\t * When this bit is '1' and the GRO mode is enabled,\n-\t * the VNIC is configured to\n-\t * perform transparent packet aggregation (TPA) for\n-\t * TCP/IPv4 packets with consecutively increasing IPIDs.\n-\t * In other words, the last packet that is being\n-\t * aggregated to an already existing aggregation context\n-\t * shall have IPID 1 more than the IPID of the last packet\n-\t * that was aggregated in that aggregation context.\n-\t */\n-\t#define HWRM_VNIC_TPA_QCFG_OUTPUT_FLAGS_GRO_IPID_CHECK \\\n-\t\tUINT32_C(0x40)\n-\t/*\n-\t * When this bit is '1' and the GRO mode is enabled,\n-\t * the VNIC is configured to\n-\t * perform transparent packet aggregation (TPA) for\n-\t * TCP packets with the same TTL (IPv4) or Hop limit (IPv6)\n-\t * value.\n-\t */\n-\t#define HWRM_VNIC_TPA_QCFG_OUTPUT_FLAGS_GRO_TTL_CHECK \\\n-\t\tUINT32_C(0x80)\n-\t/*\n-\t * This is the maximum number of TCP segments that can\n-\t * be aggregated (unit is Log2). Max value is 31.\n-\t */\n-\tuint16_t\tmax_agg_segs;\n-\t/* 1 segment */\n-\t#define HWRM_VNIC_TPA_QCFG_OUTPUT_MAX_AGG_SEGS_1   UINT32_C(0x0)\n-\t/* 2 segments */\n-\t#define HWRM_VNIC_TPA_QCFG_OUTPUT_MAX_AGG_SEGS_2   UINT32_C(0x1)\n-\t/* 4 segments */\n-\t#define HWRM_VNIC_TPA_QCFG_OUTPUT_MAX_AGG_SEGS_4   UINT32_C(0x2)\n-\t/* 8 segments */\n-\t#define HWRM_VNIC_TPA_QCFG_OUTPUT_MAX_AGG_SEGS_8   UINT32_C(0x3)\n-\t/* Any segment size larger than this is not valid */\n-\t#define HWRM_VNIC_TPA_QCFG_OUTPUT_MAX_AGG_SEGS_MAX UINT32_C(0x1f)\n-\t#define HWRM_VNIC_TPA_QCFG_OUTPUT_MAX_AGG_SEGS_LAST \\\n-\t\tHWRM_VNIC_TPA_QCFG_OUTPUT_MAX_AGG_SEGS_MAX\n-\t/*\n-\t * This is the maximum number of aggregations this VNIC is\n-\t * allowed (unit is Log2). Max value is 7\n-\t */\n-\tuint16_t\tmax_aggs;\n-\t/* 1 aggregation */\n-\t#define HWRM_VNIC_TPA_QCFG_OUTPUT_MAX_AGGS_1   UINT32_C(0x0)\n-\t/* 2 aggregations */\n-\t#define HWRM_VNIC_TPA_QCFG_OUTPUT_MAX_AGGS_2   UINT32_C(0x1)\n-\t/* 4 aggregations */\n-\t#define HWRM_VNIC_TPA_QCFG_OUTPUT_MAX_AGGS_4   UINT32_C(0x2)\n-\t/* 8 aggregations */\n-\t#define HWRM_VNIC_TPA_QCFG_OUTPUT_MAX_AGGS_8   UINT32_C(0x3)\n-\t/* 16 aggregations */\n-\t#define HWRM_VNIC_TPA_QCFG_OUTPUT_MAX_AGGS_16  UINT32_C(0x4)\n-\t/* Any aggregation size larger than this is not valid */\n-\t#define HWRM_VNIC_TPA_QCFG_OUTPUT_MAX_AGGS_MAX UINT32_C(0x7)\n-\t#define HWRM_VNIC_TPA_QCFG_OUTPUT_MAX_AGGS_LAST \\\n-\t\tHWRM_VNIC_TPA_QCFG_OUTPUT_MAX_AGGS_MAX\n-\t/*\n-\t * This is the maximum amount of time allowed for\n-\t * an aggregation context to complete after it was initiated.\n-\t */\n-\tuint32_t\tmax_agg_timer;\n-\t/*\n-\t * This is the minimum amount of payload length required to\n-\t * start an aggregation context.\n-\t */\n-\tuint32_t\tmin_agg_len;\n-\tuint8_t\tunused_0[7];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/*********************\n- * hwrm_vnic_rss_cfg *\n- *********************/\n-\n-\n-/* hwrm_vnic_rss_cfg_input (size:384b/48B) */\n-struct hwrm_vnic_rss_cfg_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\tuint32_t\thash_type;\n-\t/*\n-\t * When this bit is '1', the RSS hash shall be computed\n-\t * over source and destination IPv4 addresses of IPv4\n-\t * packets.\n-\t */\n-\t#define HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_IPV4         UINT32_C(0x1)\n-\t/*\n-\t * When this bit is '1', the RSS hash shall be computed\n-\t * over source/destination IPv4 addresses and\n-\t * source/destination ports of TCP/IPv4 packets.\n-\t */\n-\t#define HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_TCP_IPV4     UINT32_C(0x2)\n-\t/*\n-\t * When this bit is '1', the RSS hash shall be computed\n-\t * over source/destination IPv4 addresses and\n-\t * source/destination ports of UDP/IPv4 packets.\n-\t */\n-\t#define HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_UDP_IPV4     UINT32_C(0x4)\n-\t/*\n-\t * When this bit is '1', the RSS hash shall be computed\n-\t * over source and destination IPv4 addresses of IPv6\n-\t * packets.\n-\t */\n-\t#define HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_IPV6         UINT32_C(0x8)\n-\t/*\n-\t * When this bit is '1', the RSS hash shall be computed\n-\t * over source/destination IPv6 addresses and\n-\t * source/destination ports of TCP/IPv6 packets.\n-\t */\n-\t#define HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_TCP_IPV6     UINT32_C(0x10)\n-\t/*\n-\t * When this bit is '1', the RSS hash shall be computed\n-\t * over source/destination IPv6 addresses and\n-\t * source/destination ports of UDP/IPv6 packets.\n-\t */\n-\t#define HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_UDP_IPV6     UINT32_C(0x20)\n-\t/* VNIC ID of VNIC associated with RSS table being configured. */\n-\tuint16_t\tvnic_id;\n-\t/*\n-\t * Specifies which VNIC ring table pair to configure.\n-\t * Valid values range from 0 to 7.\n-\t */\n-\tuint8_t\tring_table_pair_index;\n-\t/* Flags to specify different RSS hash modes. */\n-\tuint8_t\thash_mode_flags;\n-\t/*\n-\t * When this bit is '1', it indicates using current RSS\n-\t * hash mode setting configured in the device.\n-\t */\n-\t#define HWRM_VNIC_RSS_CFG_INPUT_HASH_MODE_FLAGS_DEFAULT \\\n-\t\tUINT32_C(0x1)\n-\t/*\n-\t * When this bit is '1', it indicates requesting support of\n-\t * RSS hashing over innermost 4 tuples {l3.src, l3.dest,\n-\t * l4.src, l4.dest} for tunnel packets. For none-tunnel\n-\t * packets, the RSS hash is computed over the normal\n-\t * src/dest l3 and src/dest l4 headers.\n-\t */\n-\t#define HWRM_VNIC_RSS_CFG_INPUT_HASH_MODE_FLAGS_INNERMOST_4 \\\n-\t\tUINT32_C(0x2)\n-\t/*\n-\t * When this bit is '1', it indicates requesting support of\n-\t * RSS hashing over innermost 2 tuples {l3.src, l3.dest} for\n-\t * tunnel packets. For none-tunnel packets, the RSS hash is\n-\t * computed over the normal src/dest l3 headers.\n-\t */\n-\t#define HWRM_VNIC_RSS_CFG_INPUT_HASH_MODE_FLAGS_INNERMOST_2 \\\n-\t\tUINT32_C(0x4)\n-\t/*\n-\t * When this bit is '1', it indicates requesting support of\n-\t * RSS hashing over outermost 4 tuples {t_l3.src, t_l3.dest,\n-\t * t_l4.src, t_l4.dest} for tunnel packets. For none-tunnel\n-\t * packets, the RSS hash is computed over the normal\n-\t * src/dest l3 and src/dest l4 headers.\n-\t */\n-\t#define HWRM_VNIC_RSS_CFG_INPUT_HASH_MODE_FLAGS_OUTERMOST_4 \\\n-\t\tUINT32_C(0x8)\n-\t/*\n-\t * When this bit is '1', it indicates requesting support of\n-\t * RSS hashing over outermost 2 tuples {t_l3.src, t_l3.dest} for\n-\t * tunnel packets. For none-tunnel packets, the RSS hash is\n-\t * computed over the normal src/dest l3 headers.\n-\t */\n-\t#define HWRM_VNIC_RSS_CFG_INPUT_HASH_MODE_FLAGS_OUTERMOST_2 \\\n-\t\tUINT32_C(0x10)\n-\t/* This is the address for rss ring group table */\n-\tuint64_t\tring_grp_tbl_addr;\n-\t/* This is the address for rss hash key table */\n-\tuint64_t\thash_key_tbl_addr;\n-\t/* Index to the rss indirection table. */\n-\tuint16_t\trss_ctx_idx;\n-\tuint8_t\tunused_1[6];\n-} __attribute__((packed));\n-\n-/* hwrm_vnic_rss_cfg_output (size:128b/16B) */\n-struct hwrm_vnic_rss_cfg_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\tuint8_t\tunused_0[7];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/**********************\n- * hwrm_vnic_rss_qcfg *\n- **********************/\n-\n-\n-/* hwrm_vnic_rss_qcfg_input (size:192b/24B) */\n-struct hwrm_vnic_rss_qcfg_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\t/* Index to the rss indirection table. */\n-\tuint16_t\trss_ctx_idx;\n-\tuint8_t\tunused_0[6];\n-} __attribute__((packed));\n-\n-/* hwrm_vnic_rss_qcfg_output (size:512b/64B) */\n-struct hwrm_vnic_rss_qcfg_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\tuint32_t\thash_type;\n-\t/*\n-\t * When this bit is '1', the RSS hash shall be computed\n-\t * over source and destination IPv4 addresses of IPv4\n-\t * packets.\n-\t */\n-\t#define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_TYPE_IPV4         UINT32_C(0x1)\n-\t/*\n-\t * When this bit is '1', the RSS hash shall be computed\n-\t * over source/destination IPv4 addresses and\n-\t * source/destination ports of TCP/IPv4 packets.\n-\t */\n-\t#define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_TYPE_TCP_IPV4     UINT32_C(0x2)\n-\t/*\n-\t * When this bit is '1', the RSS hash shall be computed\n-\t * over source/destination IPv4 addresses and\n-\t * source/destination ports of UDP/IPv4 packets.\n-\t */\n-\t#define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_TYPE_UDP_IPV4     UINT32_C(0x4)\n-\t/*\n-\t * When this bit is '1', the RSS hash shall be computed\n-\t * over source and destination IPv4 addresses of IPv6\n-\t * packets.\n-\t */\n-\t#define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_TYPE_IPV6         UINT32_C(0x8)\n-\t/*\n-\t * When this bit is '1', the RSS hash shall be computed\n-\t * over source/destination IPv6 addresses and\n-\t * source/destination ports of TCP/IPv6 packets.\n-\t */\n-\t#define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_TYPE_TCP_IPV6     UINT32_C(0x10)\n-\t/*\n-\t * When this bit is '1', the RSS hash shall be computed\n-\t * over source/destination IPv6 addresses and\n-\t * source/destination ports of UDP/IPv6 packets.\n-\t */\n-\t#define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_TYPE_UDP_IPV6     UINT32_C(0x20)\n-\tuint8_t\tunused_0[4];\n-\t/* This is the value of rss hash key */\n-\tuint32_t\thash_key[10];\n-\t/* Flags to specify different RSS hash modes. */\n-\tuint8_t\thash_mode_flags;\n-\t/*\n-\t * When this bit is '1', it indicates using current RSS\n-\t * hash mode setting configured in the device.\n-\t */\n-\t#define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_MODE_FLAGS_DEFAULT \\\n-\t\tUINT32_C(0x1)\n-\t/*\n-\t * When this bit is '1', it indicates requesting support of\n-\t * RSS hashing over innermost 4 tuples {l3.src, l3.dest,\n-\t * l4.src, l4.dest} for tunnel packets. For none-tunnel\n-\t * packets, the RSS hash is computed over the normal\n-\t * src/dest l3 and src/dest l4 headers.\n-\t */\n-\t#define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_MODE_FLAGS_INNERMOST_4 \\\n-\t\tUINT32_C(0x2)\n-\t/*\n-\t * When this bit is '1', it indicates requesting support of\n-\t * RSS hashing over innermost 2 tuples {l3.src, l3.dest} for\n-\t * tunnel packets. For none-tunnel packets, the RSS hash is\n-\t * computed over the normal src/dest l3 headers.\n-\t */\n-\t#define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_MODE_FLAGS_INNERMOST_2 \\\n-\t\tUINT32_C(0x4)\n-\t/*\n-\t * When this bit is '1', it indicates requesting support of\n-\t * RSS hashing over outermost 4 tuples {t_l3.src, t_l3.dest,\n-\t * t_l4.src, t_l4.dest} for tunnel packets. For none-tunnel\n-\t * packets, the RSS hash is computed over the normal\n-\t * src/dest l3 and src/dest l4 headers.\n-\t */\n-\t#define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_MODE_FLAGS_OUTERMOST_4 \\\n-\t\tUINT32_C(0x8)\n-\t/*\n-\t * When this bit is '1', it indicates requesting support of\n-\t * RSS hashing over outermost 2 tuples {t_l3.src, t_l3.dest} for\n-\t * tunnel packets. For none-tunnel packets, the RSS hash is\n-\t * computed over the normal src/dest l3 headers.\n-\t */\n-\t#define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_MODE_FLAGS_OUTERMOST_2 \\\n-\t\tUINT32_C(0x10)\n-\tuint8_t\tunused_1[6];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/**************************\n- * hwrm_vnic_plcmodes_cfg *\n- **************************/\n-\n-\n-/* hwrm_vnic_plcmodes_cfg_input (size:320b/40B) */\n-struct hwrm_vnic_plcmodes_cfg_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\tuint32_t\tflags;\n-\t/*\n-\t * When this bit is '1', the VNIC shall be configured to\n-\t * use regular placement algorithm.\n-\t * By default, the regular placement algorithm shall be\n-\t * enabled on the VNIC.\n-\t */\n-\t#define HWRM_VNIC_PLCMODES_CFG_INPUT_FLAGS_REGULAR_PLACEMENT \\\n-\t\tUINT32_C(0x1)\n-\t/*\n-\t * When this bit is '1', the VNIC shall be configured\n-\t * use the jumbo placement algorithm.\n-\t */\n-\t#define HWRM_VNIC_PLCMODES_CFG_INPUT_FLAGS_JUMBO_PLACEMENT \\\n-\t\tUINT32_C(0x2)\n-\t/*\n-\t * When this bit is '1', the VNIC shall be configured\n-\t * to enable Header-Data split for IPv4 packets according\n-\t * to the following rules:\n-\t * # If the packet is identified as TCP/IPv4, then the\n-\t * packet is split at the beginning of the TCP payload.\n-\t * # If the packet is identified as UDP/IPv4, then the\n-\t * packet is split at the beginning of UDP payload.\n-\t * # If the packet is identified as non-TCP and non-UDP\n-\t * IPv4 packet, then the packet is split at the beginning\n-\t * of the upper layer protocol header carried in the IPv4\n-\t * packet.\n-\t */\n-\t#define HWRM_VNIC_PLCMODES_CFG_INPUT_FLAGS_HDS_IPV4 \\\n-\t\tUINT32_C(0x4)\n-\t/*\n-\t * When this bit is '1', the VNIC shall be configured\n-\t * to enable Header-Data split for IPv6 packets according\n-\t * to the following rules:\n-\t * # If the packet is identified as TCP/IPv6, then the\n-\t * packet is split at the beginning of the TCP payload.\n-\t * # If the packet is identified as UDP/IPv6, then the\n-\t * packet is split at the beginning of UDP payload.\n-\t * # If the packet is identified as non-TCP and non-UDP\n-\t * IPv6 packet, then the packet is split at the beginning\n-\t * of the upper layer protocol header carried in the IPv6\n-\t * packet.\n-\t */\n-\t#define HWRM_VNIC_PLCMODES_CFG_INPUT_FLAGS_HDS_IPV6 \\\n-\t\tUINT32_C(0x8)\n-\t/*\n-\t * When this bit is '1', the VNIC shall be configured\n-\t * to enable Header-Data split for FCoE packets at the\n-\t * beginning of FC payload.\n-\t */\n-\t#define HWRM_VNIC_PLCMODES_CFG_INPUT_FLAGS_HDS_FCOE \\\n-\t\tUINT32_C(0x10)\n-\t/*\n-\t * When this bit is '1', the VNIC shall be configured\n-\t * to enable Header-Data split for RoCE packets at the\n-\t * beginning of RoCE payload (after BTH/GRH headers).\n-\t */\n-\t#define HWRM_VNIC_PLCMODES_CFG_INPUT_FLAGS_HDS_ROCE \\\n-\t\tUINT32_C(0x20)\n-\tuint32_t\tenables;\n-\t/*\n-\t * This bit must be '1' for the jumbo_thresh_valid field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_VNIC_PLCMODES_CFG_INPUT_ENABLES_JUMBO_THRESH_VALID \\\n-\t\tUINT32_C(0x1)\n-\t/*\n-\t * This bit must be '1' for the hds_offset_valid field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_VNIC_PLCMODES_CFG_INPUT_ENABLES_HDS_OFFSET_VALID \\\n-\t\tUINT32_C(0x2)\n-\t/*\n-\t * This bit must be '1' for the hds_threshold_valid field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_VNIC_PLCMODES_CFG_INPUT_ENABLES_HDS_THRESHOLD_VALID \\\n-\t\tUINT32_C(0x4)\n-\t/* Logical vnic ID */\n-\tuint32_t\tvnic_id;\n-\t/*\n-\t * When jumbo placement algorithm is enabled, this value\n-\t * is used to determine the threshold for jumbo placement.\n-\t * Packets with length larger than this value will be\n-\t * placed according to the jumbo placement algorithm.\n-\t */\n-\tuint16_t\tjumbo_thresh;\n-\t/*\n-\t * This value is used to determine the offset into\n-\t * packet buffer where the split data (payload) will be\n-\t * placed according to one of of HDS placement algorithm.\n-\t *\n-\t * The lengths of packet buffers provided for split data\n-\t * shall be larger than this value.\n-\t */\n-\tuint16_t\thds_offset;\n-\t/*\n-\t * When one of the HDS placement algorithm is enabled, this\n-\t * value is used to determine the threshold for HDS\n-\t * placement.\n-\t * Packets with length larger than this value will be\n-\t * placed according to the HDS placement algorithm.\n-\t * This value shall be in multiple of 4 bytes.\n-\t */\n-\tuint16_t\thds_threshold;\n-\tuint8_t\tunused_0[6];\n-} __attribute__((packed));\n-\n-/* hwrm_vnic_plcmodes_cfg_output (size:128b/16B) */\n-struct hwrm_vnic_plcmodes_cfg_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\tuint8_t\tunused_0[7];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/***************************\n- * hwrm_vnic_plcmodes_qcfg *\n- ***************************/\n-\n-\n-/* hwrm_vnic_plcmodes_qcfg_input (size:192b/24B) */\n-struct hwrm_vnic_plcmodes_qcfg_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\t/* Logical vnic ID */\n-\tuint32_t\tvnic_id;\n-\tuint8_t\tunused_0[4];\n-} __attribute__((packed));\n-\n-/* hwrm_vnic_plcmodes_qcfg_output (size:192b/24B) */\n-struct hwrm_vnic_plcmodes_qcfg_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\tuint32_t\tflags;\n-\t/*\n-\t * When this bit is '1', the VNIC is configured to\n-\t * use regular placement algorithm.\n-\t */\n-\t#define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_REGULAR_PLACEMENT \\\n-\t\tUINT32_C(0x1)\n-\t/*\n-\t * When this bit is '1', the VNIC is configured to\n-\t * use the jumbo placement algorithm.\n-\t */\n-\t#define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_JUMBO_PLACEMENT \\\n-\t\tUINT32_C(0x2)\n-\t/*\n-\t * When this bit is '1', the VNIC is configured\n-\t * to enable Header-Data split for IPv4 packets.\n-\t */\n-\t#define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_HDS_IPV4 \\\n-\t\tUINT32_C(0x4)\n-\t/*\n-\t * When this bit is '1', the VNIC is configured\n-\t * to enable Header-Data split for IPv6 packets.\n-\t */\n-\t#define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_HDS_IPV6 \\\n-\t\tUINT32_C(0x8)\n-\t/*\n-\t * When this bit is '1', the VNIC is configured\n-\t * to enable Header-Data split for FCoE packets.\n-\t */\n-\t#define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_HDS_FCOE \\\n-\t\tUINT32_C(0x10)\n-\t/*\n-\t * When this bit is '1', the VNIC is configured\n-\t * to enable Header-Data split for RoCE packets.\n-\t */\n-\t#define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_HDS_ROCE \\\n-\t\tUINT32_C(0x20)\n-\t/*\n-\t * When this bit is '1', the VNIC is configured\n-\t * to be the default VNIC of the requesting function.\n-\t */\n-\t#define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_DFLT_VNIC \\\n-\t\tUINT32_C(0x40)\n-\t/*\n-\t * When jumbo placement algorithm is enabled, this value\n-\t * is used to determine the threshold for jumbo placement.\n-\t * Packets with length larger than this value will be\n-\t * placed according to the jumbo placement algorithm.\n-\t */\n-\tuint16_t\tjumbo_thresh;\n-\t/*\n-\t * This value is used to determine the offset into\n-\t * packet buffer where the split data (payload) will be\n-\t * placed according to one of of HDS placement algorithm.\n-\t *\n-\t * The lengths of packet buffers provided for split data\n-\t * shall be larger than this value.\n-\t */\n-\tuint16_t\thds_offset;\n-\t/*\n-\t * When one of the HDS placement algorithm is enabled, this\n-\t * value is used to determine the threshold for HDS\n-\t * placement.\n-\t * Packets with length larger than this value will be\n-\t * placed according to the HDS placement algorithm.\n-\t * This value shall be in multiple of 4 bytes.\n-\t */\n-\tuint16_t\thds_threshold;\n-\tuint8_t\tunused_0[5];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/**********************************\n- * hwrm_vnic_rss_cos_lb_ctx_alloc *\n- **********************************/\n-\n-\n-/* hwrm_vnic_rss_cos_lb_ctx_alloc_input (size:128b/16B) */\n-struct hwrm_vnic_rss_cos_lb_ctx_alloc_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-} __attribute__((packed));\n-\n-/* hwrm_vnic_rss_cos_lb_ctx_alloc_output (size:128b/16B) */\n-struct hwrm_vnic_rss_cos_lb_ctx_alloc_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\t/* rss_cos_lb_ctx_id is 16 b */\n-\tuint16_t\trss_cos_lb_ctx_id;\n-\tuint8_t\tunused_0[5];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/*********************************\n- * hwrm_vnic_rss_cos_lb_ctx_free *\n- *********************************/\n-\n-\n-/* hwrm_vnic_rss_cos_lb_ctx_free_input (size:192b/24B) */\n-struct hwrm_vnic_rss_cos_lb_ctx_free_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\t/* rss_cos_lb_ctx_id is 16 b */\n-\tuint16_t\trss_cos_lb_ctx_id;\n-\tuint8_t\tunused_0[6];\n-} __attribute__((packed));\n-\n-/* hwrm_vnic_rss_cos_lb_ctx_free_output (size:128b/16B) */\n-struct hwrm_vnic_rss_cos_lb_ctx_free_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\tuint8_t\tunused_0[7];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/*******************\n- * hwrm_ring_alloc *\n- *******************/\n-\n-\n-/* hwrm_ring_alloc_input (size:640b/80B) */\n-struct hwrm_ring_alloc_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\tuint32_t\tenables;\n-\t/*\n-\t * This bit must be '1' for the ring_arb_cfg field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_RING_ALLOC_INPUT_ENABLES_RING_ARB_CFG \\\n-\t\tUINT32_C(0x2)\n-\t/*\n-\t * This bit must be '1' for the stat_ctx_id_valid field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_RING_ALLOC_INPUT_ENABLES_STAT_CTX_ID_VALID \\\n-\t\tUINT32_C(0x8)\n-\t/*\n-\t * This bit must be '1' for the max_bw_valid field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_RING_ALLOC_INPUT_ENABLES_MAX_BW_VALID \\\n-\t\tUINT32_C(0x20)\n-\t/*\n-\t * This bit must be '1' for the rx_ring_id field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_RING_ALLOC_INPUT_ENABLES_RX_RING_ID_VALID \\\n-\t\tUINT32_C(0x40)\n-\t/*\n-\t * This bit must be '1' for the nq_ring_id field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_RING_ALLOC_INPUT_ENABLES_NQ_RING_ID_VALID \\\n-\t\tUINT32_C(0x80)\n-\t/*\n-\t * This bit must be '1' for the rx_buf_size field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_RING_ALLOC_INPUT_ENABLES_RX_BUF_SIZE_VALID \\\n-\t\tUINT32_C(0x100)\n-\t/* Ring Type. */\n-\tuint8_t\tring_type;\n-\t/* L2 Completion Ring (CR) */\n-\t#define HWRM_RING_ALLOC_INPUT_RING_TYPE_L2_CMPL   UINT32_C(0x0)\n-\t/* TX Ring (TR) */\n-\t#define HWRM_RING_ALLOC_INPUT_RING_TYPE_TX        UINT32_C(0x1)\n-\t/* RX Ring (RR) */\n-\t#define HWRM_RING_ALLOC_INPUT_RING_TYPE_RX        UINT32_C(0x2)\n-\t/* RoCE Notification Completion Ring (ROCE_CR) */\n-\t#define HWRM_RING_ALLOC_INPUT_RING_TYPE_ROCE_CMPL UINT32_C(0x3)\n-\t/* RX Aggregation Ring */\n-\t#define HWRM_RING_ALLOC_INPUT_RING_TYPE_RX_AGG    UINT32_C(0x4)\n-\t/* Notification Queue */\n-\t#define HWRM_RING_ALLOC_INPUT_RING_TYPE_NQ        UINT32_C(0x5)\n-\t#define HWRM_RING_ALLOC_INPUT_RING_TYPE_LAST \\\n-\t\tHWRM_RING_ALLOC_INPUT_RING_TYPE_NQ\n-\tuint8_t\tunused_0[3];\n-\t/*\n-\t * This value is a pointer to the page table for the\n-\t * Ring.\n-\t */\n-\tuint64_t\tpage_tbl_addr;\n-\t/* First Byte Offset of the first entry in the first page. */\n-\tuint32_t\tfbo;\n-\t/*\n-\t * Actual page size in 2^page_size. The supported range is increments\n-\t * in powers of 2 from 16 bytes to 1GB.\n-\t * - 4 = 16 B\n-\t *     Page size is 16 B.\n-\t * - 12 = 4 KB\n-\t *     Page size is 4 KB.\n-\t * - 13 = 8 KB\n-\t *     Page size is 8 KB.\n-\t * - 16 = 64 KB\n-\t *     Page size is 64 KB.\n-\t * - 21 = 2 MB\n-\t *     Page size is 2 MB.\n-\t * - 22 = 4 MB\n-\t *     Page size is 4 MB.\n-\t * - 30 = 1 GB\n-\t *     Page size is 1 GB.\n-\t */\n-\tuint8_t\tpage_size;\n-\t/*\n-\t * This value indicates the depth of page table.\n-\t * For this version of the specification, value other than 0 or\n-\t * 1 shall be considered as an invalid value.\n-\t * When the page_tbl_depth = 0, then it is treated as a\n-\t * special case with the following.\n-\t * 1. FBO and page size fields are not valid.\n-\t * 2. page_tbl_addr is the physical address of the first\n-\t *    element of the ring.\n-\t */\n-\tuint8_t\tpage_tbl_depth;\n-\tuint8_t\tunused_1[2];\n-\t/*\n-\t * Number of 16B units in the ring.  Minimum size for\n-\t * a ring is 16 16B entries.\n-\t */\n-\tuint32_t\tlength;\n-\t/*\n-\t * Logical ring number for the ring to be allocated.\n-\t * This value determines the position in the doorbell\n-\t * area where the update to the ring will be made.\n-\t *\n-\t * For completion rings, this value is also the MSI-X\n-\t * vector number for the function the completion ring is\n-\t * associated with.\n-\t */\n-\tuint16_t\tlogical_id;\n-\t/*\n-\t * This field is used only when ring_type is a TX ring.\n-\t * This value indicates what completion ring the TX ring\n-\t * is associated with.\n-\t */\n-\tuint16_t\tcmpl_ring_id;\n-\t/*\n-\t * This field is used only when ring_type is a TX ring.\n-\t * This value indicates what CoS queue the TX ring\n-\t * is associated with.\n-\t */\n-\tuint16_t\tqueue_id;\n-\t/*\n-\t * When allocating a Rx ring or Rx aggregation ring, this field\n-\t * specifies the size of the buffer descriptors posted to the ring.\n-\t */\n-\tuint16_t\trx_buf_size;\n-\t/*\n-\t * When allocating an Rx aggregation ring, this field\n-\t * specifies the associated Rx ring ID.\n-\t */\n-\tuint16_t\trx_ring_id;\n-\t/*\n-\t * When allocating a completion ring, this field\n-\t * specifies the associated NQ ring ID.\n-\t */\n-\tuint16_t\tnq_ring_id;\n-\t/*\n-\t * This field is used only when ring_type is a TX ring.\n-\t * This field is used to configure arbitration related\n-\t * parameters for a TX ring.\n-\t */\n-\tuint16_t\tring_arb_cfg;\n-\t/* Arbitration policy used for the ring. */\n-\t#define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_MASK \\\n-\t\tUINT32_C(0xf)\n-\t#define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_SFT       0\n-\t/*\n-\t * Use strict priority for the TX ring.\n-\t * Priority value is specified in arb_policy_param\n-\t */\n-\t#define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_SP \\\n-\t\tUINT32_C(0x1)\n-\t/*\n-\t * Use weighted fair queue arbitration for the TX ring.\n-\t * Weight is specified in arb_policy_param\n-\t */\n-\t#define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_WFQ \\\n-\t\tUINT32_C(0x2)\n-\t#define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_LAST \\\n-\t\tHWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_WFQ\n-\t/* Reserved field. */\n-\t#define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_RSVD_MASK \\\n-\t\tUINT32_C(0xf0)\n-\t#define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_RSVD_SFT             4\n-\t/*\n-\t * Arbitration policy specific parameter.\n-\t * # For strict priority arbitration policy, this field\n-\t * represents a priority value. If set to 0, then the priority\n-\t * is not specified and the HWRM is allowed to select\n-\t * any priority for this TX ring.\n-\t * # For weighted fair queue arbitration policy, this field\n-\t * represents a weight value. If set to 0, then the weight\n-\t * is not specified and the HWRM is allowed to select\n-\t * any weight for this TX ring.\n-\t */\n-\t#define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_PARAM_MASK \\\n-\t\tUINT32_C(0xff00)\n-\t#define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_PARAM_SFT 8\n-\tuint16_t\tunused_3;\n-\t/*\n-\t * This field is reserved for the future use.\n-\t * It shall be set to 0.\n-\t */\n-\tuint32_t\treserved3;\n-\t/*\n-\t * This field is used only when ring_type is a TX ring.\n-\t * This input indicates what statistics context this ring\n-\t * should be associated with.\n-\t */\n-\tuint32_t\tstat_ctx_id;\n-\t/*\n-\t * This field is reserved for the future use.\n-\t * It shall be set to 0.\n-\t */\n-\tuint32_t\treserved4;\n-\t/*\n-\t * This field is used only when ring_type is a TX ring\n-\t * to specify maximum BW allocated to the TX ring.\n-\t * The HWRM will translate this value into byte counter and\n-\t * time interval used for this ring inside the device.\n-\t */\n-\tuint32_t\tmax_bw;\n-\t/* The bandwidth value. */\n-\t#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_MASK \\\n-\t\tUINT32_C(0xfffffff)\n-\t#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_SFT              0\n-\t/* The granularity of the value (bits or bytes). */\n-\t#define HWRM_RING_ALLOC_INPUT_MAX_BW_SCALE \\\n-\t\tUINT32_C(0x10000000)\n-\t/* Value is in bits. */\n-\t#define HWRM_RING_ALLOC_INPUT_MAX_BW_SCALE_BITS \\\n-\t\t(UINT32_C(0x0) << 28)\n-\t/* Value is in bytes. */\n-\t#define HWRM_RING_ALLOC_INPUT_MAX_BW_SCALE_BYTES \\\n-\t\t(UINT32_C(0x1) << 28)\n-\t#define HWRM_RING_ALLOC_INPUT_MAX_BW_SCALE_LAST \\\n-\t\tHWRM_RING_ALLOC_INPUT_MAX_BW_SCALE_BYTES\n-\t/* bw_value_unit is 3 b */\n-\t#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_MASK \\\n-\t\tUINT32_C(0xe0000000)\n-\t#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_SFT         29\n-\t/* Value is in Mb or MB (base 10). */\n-\t#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_MEGA \\\n-\t\t(UINT32_C(0x0) << 29)\n-\t/* Value is in Kb or KB (base 10). */\n-\t#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_KILO \\\n-\t\t(UINT32_C(0x2) << 29)\n-\t/* Value is in bits or bytes. */\n-\t#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_BASE \\\n-\t\t(UINT32_C(0x4) << 29)\n-\t/* Value is in Gb or GB (base 10). */\n-\t#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_GIGA \\\n-\t\t(UINT32_C(0x6) << 29)\n-\t/* Value is in 1/100th of a percentage of total bandwidth. */\n-\t#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \\\n-\t\t(UINT32_C(0x1) << 29)\n-\t/* Invalid unit */\n-\t#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_INVALID \\\n-\t\t(UINT32_C(0x7) << 29)\n-\t#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_LAST \\\n-\t\tHWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_INVALID\n-\t/*\n-\t * This field is used only when ring_type is a Completion ring.\n-\t * This value indicates what interrupt mode should be used\n-\t * on this completion ring.\n-\t * Note: In the legacy interrupt mode, no more than 16\n-\t * completion rings are allowed.\n-\t */\n-\tuint8_t\tint_mode;\n-\t/* Legacy INTA */\n-\t#define HWRM_RING_ALLOC_INPUT_INT_MODE_LEGACY UINT32_C(0x0)\n-\t/* Reserved */\n-\t#define HWRM_RING_ALLOC_INPUT_INT_MODE_RSVD   UINT32_C(0x1)\n-\t/* MSI-X */\n-\t#define HWRM_RING_ALLOC_INPUT_INT_MODE_MSIX   UINT32_C(0x2)\n-\t/* No Interrupt - Polled mode */\n-\t#define HWRM_RING_ALLOC_INPUT_INT_MODE_POLL   UINT32_C(0x3)\n-\t#define HWRM_RING_ALLOC_INPUT_INT_MODE_LAST \\\n-\t\tHWRM_RING_ALLOC_INPUT_INT_MODE_POLL\n-\tuint8_t\tunused_4[3];\n-} __attribute__((packed));\n-\n-/* hwrm_ring_alloc_output (size:128b/16B) */\n-struct hwrm_ring_alloc_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\t/*\n-\t * Physical number of ring allocated.\n-\t * This value shall be unique for a ring type.\n-\t */\n-\tuint16_t\tring_id;\n-\t/* Logical number of ring allocated. */\n-\tuint16_t\tlogical_ring_id;\n-\tuint8_t\tunused_0[3];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/******************\n- * hwrm_ring_free *\n- ******************/\n-\n-\n-/* hwrm_ring_free_input (size:192b/24B) */\n-struct hwrm_ring_free_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\t/* Ring Type. */\n-\tuint8_t\tring_type;\n-\t/* L2 Completion Ring (CR) */\n-\t#define HWRM_RING_FREE_INPUT_RING_TYPE_L2_CMPL   UINT32_C(0x0)\n-\t/* TX Ring (TR) */\n-\t#define HWRM_RING_FREE_INPUT_RING_TYPE_TX        UINT32_C(0x1)\n-\t/* RX Ring (RR) */\n-\t#define HWRM_RING_FREE_INPUT_RING_TYPE_RX        UINT32_C(0x2)\n-\t/* RoCE Notification Completion Ring (ROCE_CR) */\n-\t#define HWRM_RING_FREE_INPUT_RING_TYPE_ROCE_CMPL UINT32_C(0x3)\n-\t/* RX Aggregation Ring */\n-\t#define HWRM_RING_FREE_INPUT_RING_TYPE_RX_AGG    UINT32_C(0x4)\n-\t/* Notification Queue */\n-\t#define HWRM_RING_FREE_INPUT_RING_TYPE_NQ        UINT32_C(0x5)\n-\t#define HWRM_RING_FREE_INPUT_RING_TYPE_LAST \\\n-\t\tHWRM_RING_FREE_INPUT_RING_TYPE_NQ\n-\tuint8_t\tunused_0;\n-\t/* Physical number of ring allocated. */\n-\tuint16_t\tring_id;\n-\tuint8_t\tunused_1[4];\n-} __attribute__((packed));\n-\n-/* hwrm_ring_free_output (size:128b/16B) */\n-struct hwrm_ring_free_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\tuint8_t\tunused_0[7];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/**************************************\n- * hwrm_ring_cmpl_ring_qaggint_params *\n- **************************************/\n-\n-\n-/* hwrm_ring_cmpl_ring_qaggint_params_input (size:192b/24B) */\n-struct hwrm_ring_cmpl_ring_qaggint_params_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\t/* Physical number of completion ring. */\n-\tuint16_t\tring_id;\n-\tuint8_t\tunused_0[6];\n-} __attribute__((packed));\n-\n-/* hwrm_ring_cmpl_ring_qaggint_params_output (size:256b/32B) */\n-struct hwrm_ring_cmpl_ring_qaggint_params_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\tuint16_t\tflags;\n-\t/*\n-\t * When this bit is set to '1', interrupt max\n-\t * timer is reset whenever a completion is received.\n-\t */\n-\t#define HWRM_RING_CMPL_RING_QAGGINT_PARAMS_OUTPUT_FLAGS_TIMER_RESET \\\n-\t\tUINT32_C(0x1)\n-\t/*\n-\t * When this bit is set to '1', ring idle mode\n-\t * aggregation will be enabled.\n-\t */\n-\t#define HWRM_RING_CMPL_RING_QAGGINT_PARAMS_OUTPUT_FLAGS_RING_IDLE \\\n-\t\tUINT32_C(0x2)\n-\t/*\n-\t * Number of completions to aggregate before DMA\n-\t * during the normal mode.\n-\t */\n-\tuint16_t\tnum_cmpl_dma_aggr;\n-\t/*\n-\t * Number of completions to aggregate before DMA\n-\t * during the interrupt mode.\n-\t */\n-\tuint16_t\tnum_cmpl_dma_aggr_during_int;\n-\t/*\n-\t * Timer in unit of 80-nsec used to aggregate completions before\n-\t * DMA during the normal mode (not in interrupt mode).\n-\t */\n-\tuint16_t\tcmpl_aggr_dma_tmr;\n-\t/*\n-\t * Timer in unit of 80-nsec used to aggregate completions before\n-\t * DMA during the interrupt mode.\n-\t */\n-\tuint16_t\tcmpl_aggr_dma_tmr_during_int;\n-\t/* Minimum time (in unit of 80-nsec) between two interrupts. */\n-\tuint16_t\tint_lat_tmr_min;\n-\t/*\n-\t * Maximum wait time (in unit of 80-nsec) spent aggregating\n-\t * completions before signaling the interrupt after the\n-\t * interrupt is enabled.\n-\t */\n-\tuint16_t\tint_lat_tmr_max;\n-\t/*\n-\t * Minimum number of completions aggregated before signaling\n-\t * an interrupt.\n-\t */\n-\tuint16_t\tnum_cmpl_aggr_int;\n-\tuint8_t\tunused_0[7];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/*****************************************\n- * hwrm_ring_cmpl_ring_cfg_aggint_params *\n- *****************************************/\n-\n-\n-/* hwrm_ring_cmpl_ring_cfg_aggint_params_input (size:320b/40B) */\n-struct hwrm_ring_cmpl_ring_cfg_aggint_params_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\t/* Physical number of completion ring. */\n-\tuint16_t\tring_id;\n-\tuint16_t\tflags;\n-\t/*\n-\t * When this bit is set to '1', interrupt latency max\n-\t * timer is reset whenever a completion is received.\n-\t */\n-\t#define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_FLAGS_TIMER_RESET \\\n-\t\tUINT32_C(0x1)\n-\t/*\n-\t * When this bit is set to '1', ring idle mode\n-\t * aggregation will be enabled.\n-\t */\n-\t#define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_FLAGS_RING_IDLE \\\n-\t\tUINT32_C(0x2)\n-\t/*\n-\t * Set this flag to 1 when configuring parameters on a\n-\t * notification queue. Set this flag to 0 when configuring\n-\t * parameters on a completion queue.\n-\t */\n-\t#define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_FLAGS_IS_NQ \\\n-\t\tUINT32_C(0x4)\n-\t/*\n-\t * Number of completions to aggregate before DMA\n-\t * during the normal mode.\n-\t */\n-\tuint16_t\tnum_cmpl_dma_aggr;\n-\t/*\n-\t * Number of completions to aggregate before DMA\n-\t * during the interrupt mode.\n-\t */\n-\tuint16_t\tnum_cmpl_dma_aggr_during_int;\n-\t/*\n-\t * Timer in unit of 80-nsec used to aggregate completions before\n-\t * DMA during the normal mode (not in interrupt mode).\n-\t */\n-\tuint16_t\tcmpl_aggr_dma_tmr;\n-\t/*\n-\t * Timer in unit of 80-nsec used to aggregate completions before\n-\t * DMA during the interrupt mode.\n-\t */\n-\tuint16_t\tcmpl_aggr_dma_tmr_during_int;\n-\t/* Minimum time (in unit of 80-nsec) between two interrupts. */\n-\tuint16_t\tint_lat_tmr_min;\n-\t/*\n-\t * Maximum wait time (in unit of 80-nsec) spent aggregating\n-\t * cmpls before signaling the interrupt after the\n-\t * interrupt is enabled.\n-\t */\n-\tuint16_t\tint_lat_tmr_max;\n-\t/*\n-\t * Minimum number of completions aggregated before signaling\n-\t * an interrupt.\n-\t */\n-\tuint16_t\tnum_cmpl_aggr_int;\n-\t/*\n-\t * Bitfield that indicates which parameters are to be applied. Only\n-\t * required when configuring devices with notification queues, and\n-\t * used in that case to set certain parameters on completion queues\n-\t * and others on notification queues.\n-\t */\n-\tuint16_t\tenables;\n-\t/*\n-\t * This bit must be '1' for the num_cmpl_dma_aggr field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_ENABLES_NUM_CMPL_DMA_AGGR \\\n-\t\tUINT32_C(0x1)\n-\t/*\n-\t * This bit must be '1' for the num_cmpl_dma_aggr_during_int field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_ENABLES_NUM_CMPL_DMA_AGGR_DURING_INT \\\n-\t\tUINT32_C(0x2)\n-\t/*\n-\t * This bit must be '1' for the cmpl_aggr_dma_tmr field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_ENABLES_CMPL_AGGR_DMA_TMR \\\n-\t\tUINT32_C(0x4)\n-\t/*\n-\t * This bit must be '1' for the int_lat_tmr_min field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_ENABLES_INT_LAT_TMR_MIN \\\n-\t\tUINT32_C(0x8)\n-\t/*\n-\t * This bit must be '1' for the int_lat_tmr_max field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_ENABLES_INT_LAT_TMR_MAX \\\n-\t\tUINT32_C(0x10)\n-\t/*\n-\t * This bit must be '1' for the num_cmpl_aggr_int field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_ENABLES_NUM_CMPL_AGGR_INT \\\n-\t\tUINT32_C(0x20)\n-\tuint8_t\tunused_0[4];\n-} __attribute__((packed));\n-\n-/* hwrm_ring_cmpl_ring_cfg_aggint_params_output (size:128b/16B) */\n-struct hwrm_ring_cmpl_ring_cfg_aggint_params_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\tuint8_t\tunused_0[7];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/*******************\n- * hwrm_ring_reset *\n- *******************/\n-\n-\n-/* hwrm_ring_reset_input (size:192b/24B) */\n-struct hwrm_ring_reset_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\t/* Ring Type. */\n-\tuint8_t\tring_type;\n-\t/* L2 Completion Ring (CR) */\n-\t#define HWRM_RING_RESET_INPUT_RING_TYPE_L2_CMPL   UINT32_C(0x0)\n-\t/* TX Ring (TR) */\n-\t#define HWRM_RING_RESET_INPUT_RING_TYPE_TX        UINT32_C(0x1)\n-\t/* RX Ring (RR) */\n-\t#define HWRM_RING_RESET_INPUT_RING_TYPE_RX        UINT32_C(0x2)\n-\t/* RoCE Notification Completion Ring (ROCE_CR) */\n-\t#define HWRM_RING_RESET_INPUT_RING_TYPE_ROCE_CMPL UINT32_C(0x3)\n-\t#define HWRM_RING_RESET_INPUT_RING_TYPE_LAST \\\n-\t\tHWRM_RING_RESET_INPUT_RING_TYPE_ROCE_CMPL\n-\tuint8_t\tunused_0;\n-\t/* Physical number of the ring. */\n-\tuint16_t\tring_id;\n-\tuint8_t\tunused_1[4];\n-} __attribute__((packed));\n-\n-/* hwrm_ring_reset_output (size:128b/16B) */\n-struct hwrm_ring_reset_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\tuint8_t\tunused_0[7];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/***********************\n- * hwrm_ring_grp_alloc *\n- ***********************/\n-\n-\n-/* hwrm_ring_grp_alloc_input (size:192b/24B) */\n-struct hwrm_ring_grp_alloc_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\t/*\n-\t * This value identifies the CR associated with the ring\n-\t * group.\n-\t */\n-\tuint16_t\tcr;\n-\t/*\n-\t * This value identifies the main RR associated with the ring\n-\t * group.\n-\t */\n-\tuint16_t\trr;\n-\t/*\n-\t * This value identifies the aggregation RR associated with\n-\t * the ring group.  If this value is 0xFF... (All Fs), then no\n-\t * Aggregation ring will be set.\n-\t */\n-\tuint16_t\tar;\n-\t/*\n-\t * This value identifies the statistics context associated\n-\t * with the ring group.\n-\t */\n-\tuint16_t\tsc;\n-} __attribute__((packed));\n-\n-/* hwrm_ring_grp_alloc_output (size:128b/16B) */\n-struct hwrm_ring_grp_alloc_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\t/*\n-\t * This is the ring group ID value.  Use this value to program\n-\t * the default ring group for the VNIC or as table entries\n-\t * in an RSS/COS context.\n-\t */\n-\tuint32_t\tring_group_id;\n-\tuint8_t\tunused_0[3];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/**********************\n- * hwrm_ring_grp_free *\n- **********************/\n-\n-\n-/* hwrm_ring_grp_free_input (size:192b/24B) */\n-struct hwrm_ring_grp_free_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\t/* This is the ring group ID value. */\n-\tuint32_t\tring_group_id;\n-\tuint8_t\tunused_0[4];\n-} __attribute__((packed));\n-\n-/* hwrm_ring_grp_free_output (size:128b/16B) */\n-struct hwrm_ring_grp_free_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\tuint8_t\tunused_0[7];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/****************************\n- * hwrm_cfa_l2_filter_alloc *\n- ****************************/\n-\n-\n-/* hwrm_cfa_l2_filter_alloc_input (size:768b/96B) */\n-struct hwrm_cfa_l2_filter_alloc_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\tuint32_t\tflags;\n-\t/*\n-\t * Enumeration denoting the RX, TX type of the resource.\n-\t * This enumeration is used for resources that are similar for both\n-\t * TX and RX paths of the chip.\n-\t */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_PATH \\\n-\t\tUINT32_C(0x1)\n-\t/* tx path */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_PATH_TX \\\n-\t\tUINT32_C(0x0)\n-\t/* rx path */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_PATH_RX \\\n-\t\tUINT32_C(0x1)\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_PATH_LAST \\\n-\t\tHWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_PATH_RX\n-\t/* Setting of this flag indicates the applicability to the loopback path. */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_LOOPBACK \\\n-\t\tUINT32_C(0x2)\n-\t/*\n-\t * Setting of this flag indicates drop action. If this flag is not set,\n-\t * then it should be considered accept action.\n-\t */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_DROP \\\n-\t\tUINT32_C(0x4)\n-\t/*\n-\t * If this flag is set, all t_l2_* fields are invalid\n-\t * and they should not be specified.\n-\t * If this flag is set, then l2_* fields refer to\n-\t * fields of outermost L2 header.\n-\t */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_OUTERMOST \\\n-\t\tUINT32_C(0x8)\n-\tuint32_t\tenables;\n-\t/*\n-\t * This bit must be '1' for the l2_addr field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_ADDR \\\n-\t\tUINT32_C(0x1)\n-\t/*\n-\t * This bit must be '1' for the l2_addr_mask field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_ADDR_MASK \\\n-\t\tUINT32_C(0x2)\n-\t/*\n-\t * This bit must be '1' for the l2_ovlan field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_OVLAN \\\n-\t\tUINT32_C(0x4)\n-\t/*\n-\t * This bit must be '1' for the l2_ovlan_mask field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_OVLAN_MASK \\\n-\t\tUINT32_C(0x8)\n-\t/*\n-\t * This bit must be '1' for the l2_ivlan field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_IVLAN \\\n-\t\tUINT32_C(0x10)\n-\t/*\n-\t * This bit must be '1' for the l2_ivlan_mask field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_IVLAN_MASK \\\n-\t\tUINT32_C(0x20)\n-\t/*\n-\t * This bit must be '1' for the t_l2_addr field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_T_L2_ADDR \\\n-\t\tUINT32_C(0x40)\n-\t/*\n-\t * This bit must be '1' for the t_l2_addr_mask field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_T_L2_ADDR_MASK \\\n-\t\tUINT32_C(0x80)\n-\t/*\n-\t * This bit must be '1' for the t_l2_ovlan field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_T_L2_OVLAN \\\n-\t\tUINT32_C(0x100)\n-\t/*\n-\t * This bit must be '1' for the t_l2_ovlan_mask field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_T_L2_OVLAN_MASK \\\n-\t\tUINT32_C(0x200)\n-\t/*\n-\t * This bit must be '1' for the t_l2_ivlan field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_T_L2_IVLAN \\\n-\t\tUINT32_C(0x400)\n-\t/*\n-\t * This bit must be '1' for the t_l2_ivlan_mask field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_T_L2_IVLAN_MASK \\\n-\t\tUINT32_C(0x800)\n-\t/*\n-\t * This bit must be '1' for the src_type field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_SRC_TYPE \\\n-\t\tUINT32_C(0x1000)\n-\t/*\n-\t * This bit must be '1' for the src_id field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_SRC_ID \\\n-\t\tUINT32_C(0x2000)\n-\t/*\n-\t * This bit must be '1' for the tunnel_type field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_TUNNEL_TYPE \\\n-\t\tUINT32_C(0x4000)\n-\t/*\n-\t * This bit must be '1' for the dst_id field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_DST_ID \\\n-\t\tUINT32_C(0x8000)\n-\t/*\n-\t * This bit must be '1' for the mirror_vnic_id field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_MIRROR_VNIC_ID \\\n-\t\tUINT32_C(0x10000)\n-\t/*\n-\t * This value sets the match value for the L2 MAC address.\n-\t * Destination MAC address for RX path.\n-\t * Source MAC address for TX path.\n-\t */\n-\tuint8_t\tl2_addr[6];\n-\tuint8_t\tunused_0[2];\n-\t/*\n-\t * This value sets the mask value for the L2 address.\n-\t * A value of 0 will mask the corresponding bit from\n-\t * compare.\n-\t */\n-\tuint8_t\tl2_addr_mask[6];\n-\t/* This value sets VLAN ID value for outer VLAN. */\n-\tuint16_t\tl2_ovlan;\n-\t/*\n-\t * This value sets the mask value for the ovlan id.\n-\t * A value of 0 will mask the corresponding bit from\n-\t * compare.\n-\t */\n-\tuint16_t\tl2_ovlan_mask;\n-\t/* This value sets VLAN ID value for inner VLAN. */\n-\tuint16_t\tl2_ivlan;\n-\t/*\n-\t * This value sets the mask value for the ivlan id.\n-\t * A value of 0 will mask the corresponding bit from\n-\t * compare.\n-\t */\n-\tuint16_t\tl2_ivlan_mask;\n-\tuint8_t\tunused_1[2];\n-\t/*\n-\t * This value sets the match value for the tunnel\n-\t * L2 MAC address.\n-\t * Destination MAC address for RX path.\n-\t * Source MAC address for TX path.\n-\t */\n-\tuint8_t\tt_l2_addr[6];\n-\tuint8_t\tunused_2[2];\n-\t/*\n-\t * This value sets the mask value for the tunnel L2\n-\t * address.\n-\t * A value of 0 will mask the corresponding bit from\n-\t * compare.\n-\t */\n-\tuint8_t\tt_l2_addr_mask[6];\n-\t/* This value sets VLAN ID value for tunnel outer VLAN. */\n-\tuint16_t\tt_l2_ovlan;\n-\t/*\n-\t * This value sets the mask value for the tunnel ovlan id.\n-\t * A value of 0 will mask the corresponding bit from\n-\t * compare.\n-\t */\n-\tuint16_t\tt_l2_ovlan_mask;\n-\t/* This value sets VLAN ID value for tunnel inner VLAN. */\n-\tuint16_t\tt_l2_ivlan;\n-\t/*\n-\t * This value sets the mask value for the tunnel ivlan id.\n-\t * A value of 0 will mask the corresponding bit from\n-\t * compare.\n-\t */\n-\tuint16_t\tt_l2_ivlan_mask;\n-\t/* This value identifies the type of source of the packet. */\n-\tuint8_t\tsrc_type;\n-\t/* Network port */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_NPORT UINT32_C(0x0)\n-\t/* Physical function */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_PF    UINT32_C(0x1)\n-\t/* Virtual function */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_VF    UINT32_C(0x2)\n-\t/* Virtual NIC of a function */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_VNIC  UINT32_C(0x3)\n-\t/* Embedded processor for CFA management */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_KONG  UINT32_C(0x4)\n-\t/* Embedded processor for OOB management */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_APE   UINT32_C(0x5)\n-\t/* Embedded processor for RoCE */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_BONO  UINT32_C(0x6)\n-\t/* Embedded processor for network proxy functions */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_TANG  UINT32_C(0x7)\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_LAST \\\n-\t\tHWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_TANG\n-\tuint8_t\tunused_3;\n-\t/*\n-\t * This value is the id of the source.\n-\t * For a network port, it represents port_id.\n-\t * For a physical function, it represents fid.\n-\t * For a virtual function, it represents vf_id.\n-\t * For a vnic, it represents vnic_id.\n-\t * For embedded processors, this id is not valid.\n-\t *\n-\t * Notes:\n-\t * 1. The function ID is implied if it src_id is\n-\t *    not provided for a src_type that is either\n-\t */\n-\tuint32_t\tsrc_id;\n-\t/* Tunnel Type. */\n-\tuint8_t\ttunnel_type;\n-\t/* Non-tunnel */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NONTUNNEL \\\n-\t\tUINT32_C(0x0)\n-\t/* Virtual eXtensible Local Area Network (VXLAN) */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN \\\n-\t\tUINT32_C(0x1)\n-\t/* Network Virtualization Generic Routing Encapsulation (NVGRE) */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NVGRE \\\n-\t\tUINT32_C(0x2)\n-\t/* Generic Routing Encapsulation (GRE) inside Ethernet payload */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_L2GRE \\\n-\t\tUINT32_C(0x3)\n-\t/* IP in IP */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPIP \\\n-\t\tUINT32_C(0x4)\n-\t/* Generic Network Virtualization Encapsulation (Geneve) */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_GENEVE \\\n-\t\tUINT32_C(0x5)\n-\t/* Multi-Protocol Lable Switching (MPLS) */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_MPLS \\\n-\t\tUINT32_C(0x6)\n-\t/* Stateless Transport Tunnel (STT) */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_STT \\\n-\t\tUINT32_C(0x7)\n-\t/* Generic Routing Encapsulation (GRE) inside IP datagram payload */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPGRE \\\n-\t\tUINT32_C(0x8)\n-\t/* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_V4 \\\n-\t\tUINT32_C(0x9)\n-\t/* Any tunneled traffic */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL \\\n-\t\tUINT32_C(0xff)\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_LAST \\\n-\t\tHWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL\n-\tuint8_t\tunused_4;\n-\t/*\n-\t * If set, this value shall represent the\n-\t * Logical VNIC ID of the destination VNIC for the RX\n-\t * path and network port id of the destination port for\n-\t * the TX path.\n-\t */\n-\tuint16_t\tdst_id;\n-\t/*\n-\t * Logical VNIC ID of the VNIC where traffic is\n-\t * mirrored.\n-\t */\n-\tuint16_t\tmirror_vnic_id;\n-\t/*\n-\t * This hint is provided to help in placing\n-\t * the filter in the filter table.\n-\t */\n-\tuint8_t\tpri_hint;\n-\t/* No preference */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_NO_PREFER \\\n-\t\tUINT32_C(0x0)\n-\t/* Above the given filter */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_ABOVE_FILTER \\\n-\t\tUINT32_C(0x1)\n-\t/* Below the given filter */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_BELOW_FILTER \\\n-\t\tUINT32_C(0x2)\n-\t/* As high as possible */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_MAX \\\n-\t\tUINT32_C(0x3)\n-\t/* As low as possible */\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_MIN \\\n-\t\tUINT32_C(0x4)\n-\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_LAST \\\n-\t\tHWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_MIN\n-\tuint8_t\tunused_5;\n-\tuint32_t\tunused_6;\n-\t/*\n-\t * This is the ID of the filter that goes along with\n-\t * the pri_hint.\n-\t *\n-\t * This field is valid only for the following values.\n-\t * 1 - Above the given filter\n-\t * 2 - Below the given filter\n-\t */\n-\tuint64_t\tl2_filter_id_hint;\n-} __attribute__((packed));\n-\n-/* hwrm_cfa_l2_filter_alloc_output (size:192b/24B) */\n-struct hwrm_cfa_l2_filter_alloc_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\t/*\n-\t * This value identifies a set of CFA data structures used for an L2\n-\t * context.\n-\t */\n-\tuint64_t\tl2_filter_id;\n-\t/*\n-\t * This is the ID of the flow associated with this\n-\t * filter.\n-\t * This value shall be used to match and associate the\n-\t * flow identifier returned in completion records.\n-\t * A value of 0xFFFFFFFF shall indicate no flow id.\n-\t */\n-\tuint32_t\tflow_id;\n-\tuint8_t\tunused_0[3];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/***************************\n- * hwrm_cfa_l2_filter_free *\n- ***************************/\n-\n-\n-/* hwrm_cfa_l2_filter_free_input (size:192b/24B) */\n-struct hwrm_cfa_l2_filter_free_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\t/*\n-\t * This value identifies a set of CFA data structures used for an L2\n-\t * context.\n-\t */\n-\tuint64_t\tl2_filter_id;\n-} __attribute__((packed));\n-\n-/* hwrm_cfa_l2_filter_free_output (size:128b/16B) */\n-struct hwrm_cfa_l2_filter_free_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\tuint8_t\tunused_0[7];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/**************************\n- * hwrm_cfa_l2_filter_cfg *\n- **************************/\n-\n-\n-/* hwrm_cfa_l2_filter_cfg_input (size:320b/40B) */\n-struct hwrm_cfa_l2_filter_cfg_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\tuint32_t\tflags;\n-\t/*\n-\t * Enumeration denoting the RX, TX type of the resource.\n-\t * This enumeration is used for resources that are similar for both\n-\t * TX and RX paths of the chip.\n-\t */\n-\t#define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_PATH     UINT32_C(0x1)\n-\t/* tx path */\n-\t#define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_PATH_TX    UINT32_C(0x0)\n-\t/* rx path */\n-\t#define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_PATH_RX    UINT32_C(0x1)\n-\t#define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_PATH_LAST \\\n-\t\tHWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_PATH_RX\n-\t/*\n-\t * Setting of this flag indicates drop action. If this flag is not set,\n-\t * then it should be considered accept action.\n-\t */\n-\t#define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_DROP     UINT32_C(0x2)\n-\tuint32_t\tenables;\n-\t/*\n-\t * This bit must be '1' for the dst_id field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_L2_FILTER_CFG_INPUT_ENABLES_DST_ID \\\n-\t\tUINT32_C(0x1)\n-\t/*\n-\t * This bit must be '1' for the new_mirror_vnic_id field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_L2_FILTER_CFG_INPUT_ENABLES_NEW_MIRROR_VNIC_ID \\\n-\t\tUINT32_C(0x2)\n-\t/*\n-\t * This value identifies a set of CFA data structures used for an L2\n-\t * context.\n-\t */\n-\tuint64_t\tl2_filter_id;\n-\t/*\n-\t * If set, this value shall represent the\n-\t * Logical VNIC ID of the destination VNIC for the RX\n-\t * path and network port id of the destination port for\n-\t * the TX path.\n-\t */\n-\tuint32_t\tdst_id;\n-\t/*\n-\t * New Logical VNIC ID of the VNIC where traffic is\n-\t * mirrored.\n-\t */\n-\tuint32_t\tnew_mirror_vnic_id;\n-} __attribute__((packed));\n-\n-/* hwrm_cfa_l2_filter_cfg_output (size:128b/16B) */\n-struct hwrm_cfa_l2_filter_cfg_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\tuint8_t\tunused_0[7];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/***************************\n- * hwrm_cfa_l2_set_rx_mask *\n- ***************************/\n-\n-\n-/* hwrm_cfa_l2_set_rx_mask_input (size:448b/56B) */\n-struct hwrm_cfa_l2_set_rx_mask_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\t/* VNIC ID */\n-\tuint32_t\tvnic_id;\n-\tuint32_t\tmask;\n-\t/*\n-\t * When this bit is '1', the function is requested to accept\n-\t * multi-cast packets specified by the multicast addr table.\n-\t */\n-\t#define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_MCAST \\\n-\t\tUINT32_C(0x2)\n-\t/*\n-\t * When this bit is '1', the function is requested to accept\n-\t * all multi-cast packets.\n-\t */\n-\t#define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_ALL_MCAST \\\n-\t\tUINT32_C(0x4)\n-\t/*\n-\t * When this bit is '1', the function is requested to accept\n-\t * broadcast packets.\n-\t */\n-\t#define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_BCAST \\\n-\t\tUINT32_C(0x8)\n-\t/*\n-\t * When this bit is '1', the function is requested to be\n-\t * put in the promiscuous mode.\n-\t *\n-\t * The HWRM should accept any function to set up\n-\t * promiscuous mode.\n-\t *\n-\t * The HWRM shall follow the semantics below for the\n-\t * promiscuous mode support.\n-\t * # When partitioning is not enabled on a port\n-\t * (i.e. single PF on the port), then the PF shall\n-\t * be allowed to be in the promiscuous mode. When the\n-\t * PF is in the promiscuous mode, then it shall\n-\t * receive all host bound traffic on that port.\n-\t * # When partitioning is enabled on a port\n-\t * (i.e. multiple PFs per port) and a PF on that\n-\t * port is in the promiscuous mode, then the PF\n-\t * receives all traffic within that partition as\n-\t * identified by a unique identifier for the\n-\t * PF (e.g. S-Tag). If a unique outer VLAN\n-\t * for the PF is specified, then the setting of\n-\t * promiscuous mode on that PF shall result in the\n-\t * PF receiving all host bound traffic with matching\n-\t * outer VLAN.\n-\t * # A VF shall can be set in the promiscuous mode.\n-\t * In the promiscuous mode, the VF does not receive any\n-\t * traffic unless a unique outer VLAN for the\n-\t * VF is specified. If a unique outer VLAN\n-\t * for the VF is specified, then the setting of\n-\t * promiscuous mode on that VF shall result in the\n-\t * VF receiving all host bound traffic with the\n-\t * matching outer VLAN.\n-\t * # The HWRM shall allow the setting of promiscuous\n-\t * mode on a function independently from the\n-\t * promiscuous mode settings on other functions.\n-\t */\n-\t#define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_PROMISCUOUS \\\n-\t\tUINT32_C(0x10)\n-\t/*\n-\t * If this flag is set, the corresponding RX\n-\t * filters shall be set up to cover multicast/broadcast\n-\t * filters for the outermost Layer 2 destination MAC\n-\t * address field.\n-\t */\n-\t#define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_OUTERMOST \\\n-\t\tUINT32_C(0x20)\n-\t/*\n-\t * If this flag is set, the corresponding RX\n-\t * filters shall be set up to cover multicast/broadcast\n-\t * filters for the VLAN-tagged packets that match the\n-\t * TPID and VID fields of VLAN tags in the VLAN tag\n-\t * table specified in this command.\n-\t */\n-\t#define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_VLANONLY \\\n-\t\tUINT32_C(0x40)\n-\t/*\n-\t * If this flag is set, the corresponding RX\n-\t * filters shall be set up to cover multicast/broadcast\n-\t * filters for non-VLAN tagged packets and VLAN-tagged\n-\t * packets that match the TPID and VID fields of VLAN\n-\t * tags in the VLAN tag table specified in this command.\n-\t */\n-\t#define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_VLAN_NONVLAN \\\n-\t\tUINT32_C(0x80)\n-\t/*\n-\t * If this flag is set, the corresponding RX\n-\t * filters shall be set up to cover multicast/broadcast\n-\t * filters for non-VLAN tagged packets and VLAN-tagged\n-\t * packets matching any VLAN tag.\n-\t *\n-\t * If this flag is set, then the HWRM shall ignore\n-\t * VLAN tags specified in vlan_tag_tbl.\n-\t *\n-\t * If none of vlanonly, vlan_nonvlan, and anyvlan_nonvlan\n-\t * flags is set, then the HWRM shall ignore\n-\t * VLAN tags specified in vlan_tag_tbl.\n-\t *\n-\t * The HWRM client shall set at most one flag out of\n-\t * vlanonly, vlan_nonvlan, and anyvlan_nonvlan.\n-\t */\n-\t#define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_ANYVLAN_NONVLAN \\\n-\t\tUINT32_C(0x100)\n-\t/* This is the address for mcast address tbl. */\n-\tuint64_t\tmc_tbl_addr;\n-\t/*\n-\t * This value indicates how many entries in mc_tbl are valid.\n-\t * Each entry is 6 bytes.\n-\t */\n-\tuint32_t\tnum_mc_entries;\n-\tuint8_t\tunused_0[4];\n-\t/*\n-\t * This is the address for VLAN tag table.\n-\t * Each VLAN entry in the table is 4 bytes of a VLAN tag\n-\t * including TPID, PCP, DEI, and VID fields in network byte\n-\t * order.\n-\t */\n-\tuint64_t\tvlan_tag_tbl_addr;\n-\t/*\n-\t * This value indicates how many entries in vlan_tag_tbl are\n-\t * valid. Each entry is 4 bytes.\n-\t */\n-\tuint32_t\tnum_vlan_tags;\n-\tuint8_t\tunused_1[4];\n-} __attribute__((packed));\n-\n-/* hwrm_cfa_l2_set_rx_mask_output (size:128b/16B) */\n-struct hwrm_cfa_l2_set_rx_mask_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\tuint8_t\tunused_0[7];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/* hwrm_cfa_l2_set_rx_mask_cmd_err (size:64b/8B) */\n-struct hwrm_cfa_l2_set_rx_mask_cmd_err {\n-\t/*\n-\t * command specific error codes that goes to\n-\t * the cmd_err field in Common HWRM Error Response.\n-\t */\n-\tuint8_t\tcode;\n-\t/* Unknown error */\n-\t#define HWRM_CFA_L2_SET_RX_MASK_CMD_ERR_CODE_UNKNOWN \\\n-\t\tUINT32_C(0x0)\n-\t/* Unable to complete operation due to conflict with Ntuple Filter */\n-\t#define HWRM_CFA_L2_SET_RX_MASK_CMD_ERR_CODE_NTUPLE_FILTER_CONFLICT_ERR \\\n-\t\tUINT32_C(0x1)\n-\t#define HWRM_CFA_L2_SET_RX_MASK_CMD_ERR_CODE_LAST \\\n-\t\tHWRM_CFA_L2_SET_RX_MASK_CMD_ERR_CODE_NTUPLE_FILTER_CONFLICT_ERR\n-\tuint8_t\tunused_0[7];\n-} __attribute__((packed));\n-\n-/*******************************\n- * hwrm_cfa_vlan_antispoof_cfg *\n- *******************************/\n-\n-\n-/* hwrm_cfa_vlan_antispoof_cfg_input (size:256b/32B) */\n-struct hwrm_cfa_vlan_antispoof_cfg_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\t/*\n-\t * Function ID of the function that is being configured.\n-\t * Only valid for a VF FID configured by the PF.\n-\t */\n-\tuint16_t\tfid;\n-\tuint8_t\tunused_0[2];\n-\t/* Number of VLAN entries in the vlan_tag_mask_tbl. */\n-\tuint32_t\tnum_vlan_entries;\n-\t/*\n-\t * The vlan_tag_mask_tbl_addr is the DMA address of the VLAN\n-\t * antispoof table. Each table entry contains the 16-bit TPID\n-\t * (0x8100 or 0x88a8 only), 16-bit VLAN ID, and a 16-bit mask,\n-\t * all in network order to match hwrm_cfa_l2_set_rx_mask.\n-\t * For an individual VLAN entry, the mask value should be 0xfff\n-\t * for the 12-bit VLAN ID.\n-\t */\n-\tuint64_t\tvlan_tag_mask_tbl_addr;\n-} __attribute__((packed));\n-\n-/* hwrm_cfa_vlan_antispoof_cfg_output (size:128b/16B) */\n-struct hwrm_cfa_vlan_antispoof_cfg_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\tuint8_t\tunused_0[7];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/********************************\n- * hwrm_cfa_vlan_antispoof_qcfg *\n- ********************************/\n-\n-\n-/* hwrm_cfa_vlan_antispoof_qcfg_input (size:256b/32B) */\n-struct hwrm_cfa_vlan_antispoof_qcfg_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\t/*\n-\t * Function ID of the function that is being queried.\n-\t * Only valid for a VF FID queried by the PF.\n-\t */\n-\tuint16_t\tfid;\n-\tuint8_t\tunused_0[2];\n-\t/*\n-\t * Maximum number of VLAN entries the firmware is allowed to DMA\n-\t * to vlan_tag_mask_tbl.\n-\t */\n-\tuint32_t\tmax_vlan_entries;\n-\t/*\n-\t * The vlan_tag_mask_tbl_addr is the DMA address of the VLAN\n-\t * antispoof table to which firmware will DMA to. Each table\n-\t * entry will contain the 16-bit TPID (0x8100 or 0x88a8 only),\n-\t * 16-bit VLAN ID, and a 16-bit mask, all in network order to\n-\t * match hwrm_cfa_l2_set_rx_mask. For an individual VLAN entry,\n-\t * the mask value should be 0xfff for the 12-bit VLAN ID.\n-\t */\n-\tuint64_t\tvlan_tag_mask_tbl_addr;\n-} __attribute__((packed));\n-\n-/* hwrm_cfa_vlan_antispoof_qcfg_output (size:128b/16B) */\n-struct hwrm_cfa_vlan_antispoof_qcfg_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\t/* Number of valid entries DMAd by firmware to vlan_tag_mask_tbl. */\n-\tuint32_t\tnum_vlan_entries;\n-\tuint8_t\tunused_0[3];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/********************************\n- * hwrm_cfa_tunnel_filter_alloc *\n- ********************************/\n-\n-\n-/* hwrm_cfa_tunnel_filter_alloc_input (size:704b/88B) */\n-struct hwrm_cfa_tunnel_filter_alloc_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\tuint32_t\tflags;\n-\t/* Setting of this flag indicates the applicability to the loopback path. */\n-\t#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_FLAGS_LOOPBACK \\\n-\t\tUINT32_C(0x1)\n-\tuint32_t\tenables;\n-\t/*\n-\t * This bit must be '1' for the l2_filter_id field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_L2_FILTER_ID \\\n-\t\tUINT32_C(0x1)\n-\t/*\n-\t * This bit must be '1' for the l2_addr field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_L2_ADDR \\\n-\t\tUINT32_C(0x2)\n-\t/*\n-\t * This bit must be '1' for the l2_ivlan field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_L2_IVLAN \\\n-\t\tUINT32_C(0x4)\n-\t/*\n-\t * This bit must be '1' for the l3_addr field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_L3_ADDR \\\n-\t\tUINT32_C(0x8)\n-\t/*\n-\t * This bit must be '1' for the l3_addr_type field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_L3_ADDR_TYPE \\\n-\t\tUINT32_C(0x10)\n-\t/*\n-\t * This bit must be '1' for the t_l3_addr_type field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_T_L3_ADDR_TYPE \\\n-\t\tUINT32_C(0x20)\n-\t/*\n-\t * This bit must be '1' for the t_l3_addr field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_T_L3_ADDR \\\n-\t\tUINT32_C(0x40)\n-\t/*\n-\t * This bit must be '1' for the tunnel_type field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_TUNNEL_TYPE \\\n-\t\tUINT32_C(0x80)\n-\t/*\n-\t * This bit must be '1' for the vni field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_VNI \\\n-\t\tUINT32_C(0x100)\n-\t/*\n-\t * This bit must be '1' for the dst_vnic_id field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_DST_VNIC_ID \\\n-\t\tUINT32_C(0x200)\n-\t/*\n-\t * This bit must be '1' for the mirror_vnic_id field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_MIRROR_VNIC_ID \\\n-\t\tUINT32_C(0x400)\n-\t/*\n-\t * This value identifies a set of CFA data structures used for an L2\n-\t * context.\n-\t */\n-\tuint64_t\tl2_filter_id;\n-\t/*\n-\t * This value sets the match value for the inner L2\n-\t * MAC address.\n-\t * Destination MAC address for RX path.\n-\t * Source MAC address for TX path.\n-\t */\n-\tuint8_t\tl2_addr[6];\n-\t/*\n-\t * This value sets VLAN ID value for inner VLAN.\n-\t * Only 12-bits of VLAN ID are used in setting the filter.\n-\t */\n-\tuint16_t\tl2_ivlan;\n-\t/*\n-\t * The value of inner destination IP address to be used in filtering.\n-\t * For IPv4, first four bytes represent the IP address.\n-\t */\n-\tuint32_t\tl3_addr[4];\n-\t/*\n-\t * The value of tunnel destination IP address to be used in filtering.\n-\t * For IPv4, first four bytes represent the IP address.\n-\t */\n-\tuint32_t\tt_l3_addr[4];\n-\t/*\n-\t * This value indicates the type of inner IP address.\n-\t * 4 - IPv4\n-\t * 6 - IPv6\n-\t * All others are invalid.\n-\t */\n-\tuint8_t\tl3_addr_type;\n-\t/*\n-\t * This value indicates the type of tunnel IP address.\n-\t * 4 - IPv4\n-\t * 6 - IPv6\n-\t * All others are invalid.\n-\t */\n-\tuint8_t\tt_l3_addr_type;\n-\t/* Tunnel Type. */\n-\tuint8_t\ttunnel_type;\n-\t/* Non-tunnel */\n-\t#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NONTUNNEL \\\n-\t\tUINT32_C(0x0)\n-\t/* Virtual eXtensible Local Area Network (VXLAN) */\n-\t#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN \\\n-\t\tUINT32_C(0x1)\n-\t/* Network Virtualization Generic Routing Encapsulation (NVGRE) */\n-\t#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NVGRE \\\n-\t\tUINT32_C(0x2)\n-\t/* Generic Routing Encapsulation (GRE) inside Ethernet payload */\n-\t#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_L2GRE \\\n-\t\tUINT32_C(0x3)\n-\t/* IP in IP */\n-\t#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPIP \\\n-\t\tUINT32_C(0x4)\n-\t/* Generic Network Virtualization Encapsulation (Geneve) */\n-\t#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_GENEVE \\\n-\t\tUINT32_C(0x5)\n-\t/* Multi-Protocol Lable Switching (MPLS) */\n-\t#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_MPLS \\\n-\t\tUINT32_C(0x6)\n-\t/* Stateless Transport Tunnel (STT) */\n-\t#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_STT \\\n-\t\tUINT32_C(0x7)\n-\t/* Generic Routing Encapsulation (GRE) inside IP datagram payload */\n-\t#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPGRE \\\n-\t\tUINT32_C(0x8)\n-\t/* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */\n-\t#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_V4 \\\n-\t\tUINT32_C(0x9)\n-\t/* Any tunneled traffic */\n-\t#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL \\\n-\t\tUINT32_C(0xff)\n-\t#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_LAST \\\n-\t\tHWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL\n-\t/*\n-\t * tunnel_flags allows the user to indicate the tunnel tag detection\n-\t * for the tunnel type specified in tunnel_type.\n-\t */\n-\tuint8_t\ttunnel_flags;\n-\t/*\n-\t * If the tunnel_type is geneve, then this bit indicates if we\n-\t * need to match the geneve OAM packet.\n-\t * If the tunnel_type is nvgre or gre, then this bit indicates if\n-\t * we need to detect checksum present bit in geneve header.\n-\t * If the tunnel_type is mpls, then this bit indicates if we need\n-\t * to match mpls packet with explicit IPV4/IPV6 null header.\n-\t */\n-\t#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_FLAGS_TUN_FLAGS_OAM_CHECKSUM_EXPLHDR \\\n-\t\tUINT32_C(0x1)\n-\t/*\n-\t * If the tunnel_type is geneve, then this bit indicates if we\n-\t * need to detect the critical option bit set in the oam packet.\n-\t * If the tunnel_type is nvgre or gre, then this bit indicates\n-\t * if we need to match nvgre packets with key present bit set in\n-\t * gre header.\n-\t * If the tunnel_type is mpls, then this bit indicates if we\n-\t * need to match mpls packet with S bit from inner/second label.\n-\t */\n-\t#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_FLAGS_TUN_FLAGS_CRITICAL_OPT_S1 \\\n-\t\tUINT32_C(0x2)\n-\t/*\n-\t * If the tunnel_type is geneve, then this bit indicates if we\n-\t * need to match geneve packet with extended header bit set in\n-\t * geneve header.\n-\t * If the tunnel_type is nvgre or gre, then this bit indicates\n-\t * if we need to match nvgre packets with sequence number\n-\t * present bit set in gre header.\n-\t * If the tunnel_type is mpls, then this bit indicates if we\n-\t * need to match mpls packet with S bit from out/first label.\n-\t */\n-\t#define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_FLAGS_TUN_FLAGS_EXTHDR_SEQNUM_S0 \\\n-\t\tUINT32_C(0x4)\n-\t/*\n-\t * Virtual Network Identifier (VNI). Only valid with\n-\t * tunnel_types VXLAN, NVGRE, and Geneve.\n-\t * Only lower 24-bits of VNI field are used\n-\t * in setting up the filter.\n-\t */\n-\tuint32_t\tvni;\n-\t/* Logical VNIC ID of the destination VNIC. */\n-\tuint32_t\tdst_vnic_id;\n-\t/*\n-\t * Logical VNIC ID of the VNIC where traffic is\n-\t * mirrored.\n-\t */\n-\tuint32_t\tmirror_vnic_id;\n-} __attribute__((packed));\n-\n-/* hwrm_cfa_tunnel_filter_alloc_output (size:192b/24B) */\n-struct hwrm_cfa_tunnel_filter_alloc_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\t/* This value is an opaque id into CFA data structures. */\n-\tuint64_t\ttunnel_filter_id;\n-\t/*\n-\t * This is the ID of the flow associated with this\n-\t * filter.\n-\t * This value shall be used to match and associate the\n-\t * flow identifier returned in completion records.\n-\t * A value of 0xFFFFFFFF shall indicate no flow id.\n-\t */\n-\tuint32_t\tflow_id;\n-\tuint8_t\tunused_0[3];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/*******************************\n- * hwrm_cfa_tunnel_filter_free *\n- *******************************/\n-\n-\n-/* hwrm_cfa_tunnel_filter_free_input (size:192b/24B) */\n-struct hwrm_cfa_tunnel_filter_free_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\t/* This value is an opaque id into CFA data structures. */\n-\tuint64_t\ttunnel_filter_id;\n-} __attribute__((packed));\n-\n-/* hwrm_cfa_tunnel_filter_free_output (size:128b/16B) */\n-struct hwrm_cfa_tunnel_filter_free_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\tuint8_t\tunused_0[7];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/***************************************\n- * hwrm_cfa_redirect_tunnel_type_alloc *\n- ***************************************/\n-\n-\n-/* hwrm_cfa_redirect_tunnel_type_alloc_input (size:192b/24B) */\n-struct hwrm_cfa_redirect_tunnel_type_alloc_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\t/* The destination function id, to whom the traffic is redirected. */\n-\tuint16_t\tdest_fid;\n-\t/* Tunnel Type. */\n-\tuint8_t\ttunnel_type;\n-\t/* Non-tunnel */\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_NONTUNNEL \\\n-\t\tUINT32_C(0x0)\n-\t/* Virtual eXtensible Local Area Network (VXLAN) */\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_VXLAN \\\n-\t\tUINT32_C(0x1)\n-\t/* Network Virtualization Generic Routing Encapsulation (NVGRE) */\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_NVGRE \\\n-\t\tUINT32_C(0x2)\n-\t/* Generic Routing Encapsulation (GRE) inside Ethernet payload */\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_L2GRE \\\n-\t\tUINT32_C(0x3)\n-\t/* IP in IP */\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_IPIP \\\n-\t\tUINT32_C(0x4)\n-\t/* Generic Network Virtualization Encapsulation (Geneve) */\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_GENEVE \\\n-\t\tUINT32_C(0x5)\n-\t/* Multi-Protocol Lable Switching (MPLS) */\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_MPLS \\\n-\t\tUINT32_C(0x6)\n-\t/* Stateless Transport Tunnel (STT) */\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_STT \\\n-\t\tUINT32_C(0x7)\n-\t/* Generic Routing Encapsulation (GRE) inside IP datagram payload */\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_IPGRE \\\n-\t\tUINT32_C(0x8)\n-\t/* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_V4 \\\n-\t\tUINT32_C(0x9)\n-\t/* Enhance Generic Routing Encapsulation (GRE version 1) inside IP datagram payload */\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_IPGRE_V1 \\\n-\t\tUINT32_C(0xa)\n-\t/* Any tunneled traffic */\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL \\\n-\t\tUINT32_C(0xff)\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_LAST \\\n-\t\tHWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL\n-\t/* Tunnel alloc flags. */\n-\tuint8_t\tflags;\n-\t/* Setting of this flag indicates modify existing redirect tunnel to new destination function ID. */\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_FLAGS_MODIFY_DST \\\n-\t\tUINT32_C(0x1)\n-\tuint8_t\tunused_0[4];\n-} __attribute__((packed));\n-\n-/* hwrm_cfa_redirect_tunnel_type_alloc_output (size:128b/16B) */\n-struct hwrm_cfa_redirect_tunnel_type_alloc_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\tuint8_t\tunused_0[7];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/**************************************\n- * hwrm_cfa_redirect_tunnel_type_free *\n- **************************************/\n-\n-\n-/* hwrm_cfa_redirect_tunnel_type_free_input (size:192b/24B) */\n-struct hwrm_cfa_redirect_tunnel_type_free_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\t/* The destination function id, to whom the traffic is redirected. */\n-\tuint16_t\tdest_fid;\n-\t/* Tunnel Type. */\n-\tuint8_t\ttunnel_type;\n-\t/* Non-tunnel */\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_NONTUNNEL \\\n-\t\tUINT32_C(0x0)\n-\t/* Virtual eXtensible Local Area Network (VXLAN) */\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_VXLAN \\\n-\t\tUINT32_C(0x1)\n-\t/* Network Virtualization Generic Routing Encapsulation (NVGRE) */\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_NVGRE \\\n-\t\tUINT32_C(0x2)\n-\t/* Generic Routing Encapsulation (GRE) inside Ethernet payload */\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_L2GRE \\\n-\t\tUINT32_C(0x3)\n-\t/* IP in IP */\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_IPIP \\\n-\t\tUINT32_C(0x4)\n-\t/* Generic Network Virtualization Encapsulation (Geneve) */\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_GENEVE \\\n-\t\tUINT32_C(0x5)\n-\t/* Multi-Protocol Lable Switching (MPLS) */\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_MPLS \\\n-\t\tUINT32_C(0x6)\n-\t/* Stateless Transport Tunnel (STT) */\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_STT \\\n-\t\tUINT32_C(0x7)\n-\t/* Generic Routing Encapsulation (GRE) inside IP datagram payload */\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_IPGRE \\\n-\t\tUINT32_C(0x8)\n-\t/* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_VXLAN_V4 \\\n-\t\tUINT32_C(0x9)\n-\t/* Enhance Generic Routing Encapsulation (GRE version 1) inside IP datagram payload */\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_IPGRE_V1 \\\n-\t\tUINT32_C(0xa)\n-\t/* Any tunneled traffic */\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_ANYTUNNEL \\\n-\t\tUINT32_C(0xff)\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_LAST \\\n-\t\tHWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_ANYTUNNEL\n-\tuint8_t\tunused_0[5];\n-} __attribute__((packed));\n-\n-/* hwrm_cfa_redirect_tunnel_type_free_output (size:128b/16B) */\n-struct hwrm_cfa_redirect_tunnel_type_free_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\tuint8_t\tunused_0[7];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/**************************************\n- * hwrm_cfa_redirect_tunnel_type_info *\n- **************************************/\n-\n-\n-/* hwrm_cfa_redirect_tunnel_type_info_input (size:192b/24B) */\n-struct hwrm_cfa_redirect_tunnel_type_info_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\t/* The source function id. */\n-\tuint16_t\tsrc_fid;\n-\t/* Tunnel Type. */\n-\tuint8_t\ttunnel_type;\n-\t/* Non-tunnel */\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_NONTUNNEL \\\n+\t/* Transmission Selection Algorithm (TSA) for CoS Queue. */\n+\tuint8_t\tqueue_id7_tsa_assign;\n+\t/* Strict Priority */\n+\t#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_TSA_ASSIGN_SP \\\n \t\tUINT32_C(0x0)\n-\t/* Virtual eXtensible Local Area Network (VXLAN) */\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_VXLAN \\\n+\t/* Enhanced Transmission Selection */\n+\t#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_TSA_ASSIGN_ETS \\\n \t\tUINT32_C(0x1)\n-\t/* Network Virtualization Generic Routing Encapsulation (NVGRE) */\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_NVGRE \\\n-\t\tUINT32_C(0x2)\n-\t/* Generic Routing Encapsulation (GRE) inside Ethernet payload */\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_L2GRE \\\n-\t\tUINT32_C(0x3)\n-\t/* IP in IP */\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_IPIP \\\n-\t\tUINT32_C(0x4)\n-\t/* Generic Network Virtualization Encapsulation (Geneve) */\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_GENEVE \\\n-\t\tUINT32_C(0x5)\n-\t/* Multi-Protocol Lable Switching (MPLS) */\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_MPLS \\\n-\t\tUINT32_C(0x6)\n-\t/* Stateless Transport Tunnel (STT) */\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_STT \\\n-\t\tUINT32_C(0x7)\n-\t/* Generic Routing Encapsulation (GRE) inside IP datagram payload */\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_IPGRE \\\n-\t\tUINT32_C(0x8)\n-\t/* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_VXLAN_V4 \\\n-\t\tUINT32_C(0x9)\n-\t/* Enhance Generic Routing Encapsulation (GRE version 1) inside IP datagram payload */\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_IPGRE_V1 \\\n-\t\tUINT32_C(0xa)\n-\t/* Any tunneled traffic */\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_ANYTUNNEL \\\n-\t\tUINT32_C(0xff)\n-\t#define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_LAST \\\n-\t\tHWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_ANYTUNNEL\n-\tuint8_t\tunused_0[5];\n-} __attribute__((packed));\n-\n-/* hwrm_cfa_redirect_tunnel_type_info_output (size:128b/16B) */\n-struct hwrm_cfa_redirect_tunnel_type_info_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\t/* The destination function id, to whom the traffic is redirected. */\n-\tuint16_t\tdest_fid;\n-\tuint8_t\tunused_0[5];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/* hwrm_vxlan_ipv4_hdr (size:128b/16B) */\n-struct hwrm_vxlan_ipv4_hdr {\n-\t/* IPv4 version and header length. */\n-\tuint8_t\tver_hlen;\n-\t/* IPv4 header length */\n-\t#define HWRM_VXLAN_IPV4_HDR_VER_HLEN_HEADER_LENGTH_MASK UINT32_C(0xf)\n-\t#define HWRM_VXLAN_IPV4_HDR_VER_HLEN_HEADER_LENGTH_SFT 0\n-\t/* Version */\n-\t#define HWRM_VXLAN_IPV4_HDR_VER_HLEN_VERSION_MASK      UINT32_C(0xf0)\n-\t#define HWRM_VXLAN_IPV4_HDR_VER_HLEN_VERSION_SFT       4\n-\t/* IPv4 type of service. */\n-\tuint8_t\ttos;\n-\t/* IPv4 identification. */\n-\tuint16_t\tip_id;\n-\t/* IPv4 flags and offset. */\n-\tuint16_t\tflags_frag_offset;\n-\t/* IPv4 TTL. */\n-\tuint8_t\tttl;\n-\t/* IPv4 protocol. */\n-\tuint8_t\tprotocol;\n-\t/* IPv4 source address. */\n-\tuint32_t\tsrc_ip_addr;\n-\t/* IPv4 destination address. */\n-\tuint32_t\tdest_ip_addr;\n-} __attribute__((packed));\n-\n-/* hwrm_vxlan_ipv6_hdr (size:320b/40B) */\n-struct hwrm_vxlan_ipv6_hdr {\n-\t/* IPv6 version, traffic class and flow label. */\n-\tuint32_t\tver_tc_flow_label;\n-\t/* IPv6 version shift */\n-\t#define HWRM_VXLAN_IPV6_HDR_VER_TC_FLOW_LABEL_VER_SFT \\\n-\t\tUINT32_C(0x1c)\n-\t/* IPv6 version mask */\n-\t#define HWRM_VXLAN_IPV6_HDR_VER_TC_FLOW_LABEL_VER_MASK \\\n-\t\tUINT32_C(0xf0000000)\n-\t/* IPv6 TC shift */\n-\t#define HWRM_VXLAN_IPV6_HDR_VER_TC_FLOW_LABEL_TC_SFT \\\n-\t\tUINT32_C(0x14)\n-\t/* IPv6 TC mask */\n-\t#define HWRM_VXLAN_IPV6_HDR_VER_TC_FLOW_LABEL_TC_MASK \\\n-\t\tUINT32_C(0xff00000)\n-\t/* IPv6 flow label shift */\n-\t#define HWRM_VXLAN_IPV6_HDR_VER_TC_FLOW_LABEL_FLOW_LABEL_SFT \\\n-\t\tUINT32_C(0x0)\n-\t/* IPv6 flow label mask */\n-\t#define HWRM_VXLAN_IPV6_HDR_VER_TC_FLOW_LABEL_FLOW_LABEL_MASK \\\n-\t\tUINT32_C(0xfffff)\n-\t#define HWRM_VXLAN_IPV6_HDR_VER_TC_FLOW_LABEL_LAST \\\n-\t\tHWRM_VXLAN_IPV6_HDR_VER_TC_FLOW_LABEL_FLOW_LABEL_MASK\n-\t/* IPv6 payload length. */\n-\tuint16_t\tpayload_len;\n-\t/* IPv6 next header. */\n-\tuint8_t\tnext_hdr;\n-\t/* IPv6 TTL. */\n-\tuint8_t\tttl;\n-\t/* IPv6 source address. */\n-\tuint32_t\tsrc_ip_addr[4];\n-\t/* IPv6 destination address. */\n-\tuint32_t\tdest_ip_addr[4];\n-} __attribute__((packed));\n-\n-/* hwrm_cfa_encap_data_vxlan (size:576b/72B) */\n-struct hwrm_cfa_encap_data_vxlan {\n-\t/* Source MAC address. */\n-\tuint8_t\tsrc_mac_addr[6];\n \t/* reserved. */\n-\tuint16_t\tunused_0;\n-\t/* Destination MAC address. */\n-\tuint8_t\tdst_mac_addr[6];\n-\t/* Number of VLAN tags. */\n-\tuint8_t\tnum_vlan_tags;\n+\t#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_TSA_ASSIGN_RESERVED_FIRST \\\n+\t\tUINT32_C(0x2)\n \t/* reserved. */\n-\tuint8_t\tunused_1;\n-\t/* Outer VLAN TPID. */\n-\tuint16_t\tovlan_tpid;\n-\t/* Outer VLAN TCI. */\n-\tuint16_t\tovlan_tci;\n-\t/* Inner VLAN TPID. */\n-\tuint16_t\tivlan_tpid;\n-\t/* Inner VLAN TCI. */\n-\tuint16_t\tivlan_tci;\n-\t/* L3 header fields. */\n-\tuint32_t\tl3[10];\n-\t/* IP version mask. */\n-\t#define HWRM_CFA_ENCAP_DATA_VXLAN_L3_VER_MASK UINT32_C(0xf)\n-\t/* IP version 4. */\n-\t#define HWRM_CFA_ENCAP_DATA_VXLAN_L3_VER_IPV4 UINT32_C(0x4)\n-\t/* IP version 6. */\n-\t#define HWRM_CFA_ENCAP_DATA_VXLAN_L3_VER_IPV6 UINT32_C(0x6)\n-\t#define HWRM_CFA_ENCAP_DATA_VXLAN_L3_LAST \\\n-\t\tHWRM_CFA_ENCAP_DATA_VXLAN_L3_VER_IPV6\n-\t/* UDP source port. */\n-\tuint16_t\tsrc_port;\n-\t/* UDP destination port. */\n-\tuint16_t\tdst_port;\n-\t/* VXLAN Network Identifier. */\n-\tuint32_t\tvni;\n-} __attribute__((packed));\n-\n-/*******************************\n- * hwrm_cfa_encap_record_alloc *\n- *******************************/\n-\n-\n-/* hwrm_cfa_encap_record_alloc_input (size:832b/104B) */\n-struct hwrm_cfa_encap_record_alloc_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n+\t#define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_TSA_ASSIGN_RESERVED_LAST \\\n+\t\tUINT32_C(0xff)\n \t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n+\t * Priority level for strict priority. Valid only when the\n+\t * tsa_assign is 0 - Strict Priority (SP)\n+\t * 0..7 - Valid values.\n+\t * 8..255 - Reserved.\n \t */\n-\tuint16_t\ttarget_id;\n+\tuint8_t\tqueue_id7_pri_lvl;\n \t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n+\t * Weight used to allocate remaining BW for this COS after\n+\t * servicing guaranteed bandwidths for all COS.\n \t */\n-\tuint64_t\tresp_addr;\n-\tuint32_t\tflags;\n-\t/* Setting of this flag indicates the applicability to the loopback path. */\n-\t#define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_FLAGS_LOOPBACK \\\n-\t\tUINT32_C(0x1)\n-\t/* Encapsulation Type. */\n-\tuint8_t\tencap_type;\n-\t/* Virtual eXtensible Local Area Network (VXLAN) */\n-\t#define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_VXLAN \\\n-\t\tUINT32_C(0x1)\n-\t/* Network Virtualization Generic Routing Encapsulation (NVGRE) */\n-\t#define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_NVGRE \\\n-\t\tUINT32_C(0x2)\n-\t/* Generic Routing Encapsulation (GRE) after inside Ethernet payload */\n-\t#define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_L2GRE \\\n-\t\tUINT32_C(0x3)\n-\t/* IP in IP */\n-\t#define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_IPIP \\\n-\t\tUINT32_C(0x4)\n-\t/* Generic Network Virtualization Encapsulation (Geneve) */\n-\t#define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_GENEVE \\\n-\t\tUINT32_C(0x5)\n-\t/* Multi-Protocol Lable Switching (MPLS) */\n-\t#define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_MPLS \\\n-\t\tUINT32_C(0x6)\n-\t/* VLAN */\n-\t#define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_VLAN \\\n-\t\tUINT32_C(0x7)\n-\t/* Generic Routing Encapsulation (GRE) inside IP datagram payload */\n-\t#define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_IPGRE \\\n-\t\tUINT32_C(0x8)\n-\t#define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_LAST \\\n-\t\tHWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_IPGRE\n-\tuint8_t\tunused_0[3];\n-\t/* This value is encap data used for the given encap type. */\n-\tuint32_t\tencap_data[20];\n+\tuint8_t\tqueue_id7_bw_weight;\n+\tuint8_t\tunused_1[5];\n } __attribute__((packed));\n \n-/* hwrm_cfa_encap_record_alloc_output (size:128b/16B) */\n-struct hwrm_cfa_encap_record_alloc_output {\n+/* hwrm_queue_cos2bw_cfg_output (size:128b/16B) */\n+struct hwrm_queue_cos2bw_cfg_output {\n \t/* The specific error status for the command. */\n \tuint16_t\terror_code;\n \t/* The HWRM command request type. */\n@@ -21651,9 +15274,7 @@ struct hwrm_cfa_encap_record_alloc_output {\n \tuint16_t\tseq_id;\n \t/* The length of the response data in number of bytes. */\n \tuint16_t\tresp_len;\n-\t/* This value is an opaque id into CFA data structures. */\n-\tuint32_t\tencap_record_id;\n-\tuint8_t\tunused_0[3];\n+\tuint8_t\tunused_0[7];\n \t/*\n \t * This field is used in Output records to indicate that the output\n \t * is completely written to RAM.  This field should be read as '1'\n@@ -21664,13 +15285,13 @@ struct hwrm_cfa_encap_record_alloc_output {\n \tuint8_t\tvalid;\n } __attribute__((packed));\n \n-/******************************\n- * hwrm_cfa_encap_record_free *\n- ******************************/\n+/*******************\n+ * hwrm_vnic_alloc *\n+ *******************/\n \n \n-/* hwrm_cfa_encap_record_free_input (size:192b/24B) */\n-struct hwrm_cfa_encap_record_free_input {\n+/* hwrm_vnic_alloc_input (size:192b/24B) */\n+struct hwrm_vnic_alloc_input {\n \t/* The HWRM command request type. */\n \tuint16_t\treq_type;\n \t/*\n@@ -21698,13 +15319,17 @@ struct hwrm_cfa_encap_record_free_input {\n \t * point to a physically contiguous block of memory.\n \t */\n \tuint64_t\tresp_addr;\n-\t/* This value is an opaque id into CFA data structures. */\n-\tuint32_t\tencap_record_id;\n+\tuint32_t\tflags;\n+\t/*\n+\t * When this bit is '1', this VNIC is requested to\n+\t * be the default VNIC for this function.\n+\t */\n+\t#define HWRM_VNIC_ALLOC_INPUT_FLAGS_DEFAULT     UINT32_C(0x1)\n \tuint8_t\tunused_0[4];\n } __attribute__((packed));\n \n-/* hwrm_cfa_encap_record_free_output (size:128b/16B) */\n-struct hwrm_cfa_encap_record_free_output {\n+/* hwrm_vnic_alloc_output (size:128b/16B) */\n+struct hwrm_vnic_alloc_output {\n \t/* The specific error status for the command. */\n \tuint16_t\terror_code;\n \t/* The HWRM command request type. */\n@@ -21713,7 +15338,9 @@ struct hwrm_cfa_encap_record_free_output {\n \tuint16_t\tseq_id;\n \t/* The length of the response data in number of bytes. */\n \tuint16_t\tresp_len;\n-\tuint8_t\tunused_0[7];\n+\t/* Logical vnic ID */\n+\tuint32_t\tvnic_id;\n+\tuint8_t\tunused_0[3];\n \t/*\n \t * This field is used in Output records to indicate that the output\n \t * is completely written to RAM.  This field should be read as '1'\n@@ -21724,350 +15351,262 @@ struct hwrm_cfa_encap_record_free_output {\n \tuint8_t\tvalid;\n } __attribute__((packed));\n \n-/********************************\n- * hwrm_cfa_ntuple_filter_alloc *\n- ********************************/\n-\n-\n-/* hwrm_cfa_ntuple_filter_alloc_input (size:1024b/128B) */\n-struct hwrm_cfa_ntuple_filter_alloc_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\tuint32_t\tflags;\n-\t/* Setting of this flag indicates the applicability to the loopback path. */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_FLAGS_LOOPBACK \\\n-\t\tUINT32_C(0x1)\n-\t/*\n-\t * Setting of this flag indicates drop action. If this flag is not set,\n-\t * then it should be considered accept action.\n-\t */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_FLAGS_DROP \\\n-\t\tUINT32_C(0x2)\n-\t/*\n-\t * Setting of this flag indicates that a meter is expected to be attached\n-\t * to this flow. This hint can be used when choosing the action record\n-\t * format required for the flow.\n-\t */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_FLAGS_METER \\\n-\t\tUINT32_C(0x4)\n-\tuint32_t\tenables;\n-\t/*\n-\t * This bit must be '1' for the l2_filter_id field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_L2_FILTER_ID \\\n-\t\tUINT32_C(0x1)\n-\t/*\n-\t * This bit must be '1' for the ethertype field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_ETHERTYPE \\\n-\t\tUINT32_C(0x2)\n-\t/*\n-\t * This bit must be '1' for the tunnel_type field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_TUNNEL_TYPE \\\n-\t\tUINT32_C(0x4)\n-\t/*\n-\t * This bit must be '1' for the src_macaddr field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_SRC_MACADDR \\\n-\t\tUINT32_C(0x8)\n-\t/*\n-\t * This bit must be '1' for the ipaddr_type field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_IPADDR_TYPE \\\n-\t\tUINT32_C(0x10)\n-\t/*\n-\t * This bit must be '1' for the src_ipaddr field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_SRC_IPADDR \\\n-\t\tUINT32_C(0x20)\n-\t/*\n-\t * This bit must be '1' for the src_ipaddr_mask field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_SRC_IPADDR_MASK \\\n-\t\tUINT32_C(0x40)\n-\t/*\n-\t * This bit must be '1' for the dst_ipaddr field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_IPADDR \\\n-\t\tUINT32_C(0x80)\n-\t/*\n-\t * This bit must be '1' for the dst_ipaddr_mask field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_IPADDR_MASK \\\n-\t\tUINT32_C(0x100)\n-\t/*\n-\t * This bit must be '1' for the ip_protocol field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_IP_PROTOCOL \\\n-\t\tUINT32_C(0x200)\n+/******************\n+ * hwrm_vnic_free *\n+ ******************/\n+\n+\n+/* hwrm_vnic_free_input (size:192b/24B) */\n+struct hwrm_vnic_free_input {\n+\t/* The HWRM command request type. */\n+\tuint16_t\treq_type;\n \t/*\n-\t * This bit must be '1' for the src_port field to be\n-\t * configured.\n+\t * The completion ring to send the completion event on. This should\n+\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n \t */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_SRC_PORT \\\n-\t\tUINT32_C(0x400)\n+\tuint16_t\tcmpl_ring;\n \t/*\n-\t * This bit must be '1' for the src_port_mask field to be\n-\t * configured.\n+\t * The sequence ID is used by the driver for tracking multiple\n+\t * commands. This ID is treated as opaque data by the firmware and\n+\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n \t */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_SRC_PORT_MASK \\\n-\t\tUINT32_C(0x800)\n+\tuint16_t\tseq_id;\n \t/*\n-\t * This bit must be '1' for the dst_port field to be\n-\t * configured.\n+\t * The target ID of the command:\n+\t * * 0x0-0xFFF8 - The function ID\n+\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n+\t * * 0xFFFF - HWRM\n \t */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_PORT \\\n-\t\tUINT32_C(0x1000)\n+\tuint16_t\ttarget_id;\n \t/*\n-\t * This bit must be '1' for the dst_port_mask field to be\n-\t * configured.\n+\t * A physical address pointer pointing to a host buffer that the\n+\t * command's response data will be written. This can be either a host\n+\t * physical address (HPA) or a guest physical address (GPA) and must\n+\t * point to a physically contiguous block of memory.\n \t */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_PORT_MASK \\\n-\t\tUINT32_C(0x2000)\n+\tuint64_t\tresp_addr;\n+\t/* Logical vnic ID */\n+\tuint32_t\tvnic_id;\n+\tuint8_t\tunused_0[4];\n+} __attribute__((packed));\n+\n+/* hwrm_vnic_free_output (size:128b/16B) */\n+struct hwrm_vnic_free_output {\n+\t/* The specific error status for the command. */\n+\tuint16_t\terror_code;\n+\t/* The HWRM command request type. */\n+\tuint16_t\treq_type;\n+\t/* The sequence ID from the original command. */\n+\tuint16_t\tseq_id;\n+\t/* The length of the response data in number of bytes. */\n+\tuint16_t\tresp_len;\n+\tuint8_t\tunused_0[7];\n \t/*\n-\t * This bit must be '1' for the pri_hint field to be\n-\t * configured.\n+\t * This field is used in Output records to indicate that the output\n+\t * is completely written to RAM.  This field should be read as '1'\n+\t * to indicate that the output has been completely written.\n+\t * When writing a command completion or response to an internal processor,\n+\t * the order of writes has to be such that this field is written last.\n \t */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_PRI_HINT \\\n-\t\tUINT32_C(0x4000)\n+\tuint8_t\tvalid;\n+} __attribute__((packed));\n+\n+/*****************\n+ * hwrm_vnic_cfg *\n+ *****************/\n+\n+\n+/* hwrm_vnic_cfg_input (size:320b/40B) */\n+struct hwrm_vnic_cfg_input {\n+\t/* The HWRM command request type. */\n+\tuint16_t\treq_type;\n \t/*\n-\t * This bit must be '1' for the ntuple_filter_id field to be\n-\t * configured.\n+\t * The completion ring to send the completion event on. This should\n+\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n \t */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_NTUPLE_FILTER_ID \\\n-\t\tUINT32_C(0x8000)\n+\tuint16_t\tcmpl_ring;\n \t/*\n-\t * This bit must be '1' for the dst_id field to be\n-\t * configured.\n+\t * The sequence ID is used by the driver for tracking multiple\n+\t * commands. This ID is treated as opaque data by the firmware and\n+\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n \t */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_ID \\\n-\t\tUINT32_C(0x10000)\n+\tuint16_t\tseq_id;\n \t/*\n-\t * This bit must be '1' for the mirror_vnic_id field to be\n-\t * configured.\n+\t * The target ID of the command:\n+\t * * 0x0-0xFFF8 - The function ID\n+\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n+\t * * 0xFFFF - HWRM\n \t */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_MIRROR_VNIC_ID \\\n-\t\tUINT32_C(0x20000)\n+\tuint16_t\ttarget_id;\n \t/*\n-\t * This bit must be '1' for the dst_macaddr field to be\n-\t * configured.\n+\t * A physical address pointer pointing to a host buffer that the\n+\t * command's response data will be written. This can be either a host\n+\t * physical address (HPA) or a guest physical address (GPA) and must\n+\t * point to a physically contiguous block of memory.\n \t */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_MACADDR \\\n-\t\tUINT32_C(0x40000)\n+\tuint64_t\tresp_addr;\n+\tuint32_t\tflags;\n \t/*\n-\t * This value identifies a set of CFA data structures used for an L2\n-\t * context.\n+\t * When this bit is '1', the VNIC is requested to\n+\t * be the default VNIC for the function.\n \t */\n-\tuint64_t\tl2_filter_id;\n+\t#define HWRM_VNIC_CFG_INPUT_FLAGS_DEFAULT \\\n+\t\tUINT32_C(0x1)\n \t/*\n-\t * This value indicates the source MAC address in\n-\t * the Ethernet header.\n+\t * When this bit is '1', the VNIC is being configured to\n+\t * strip VLAN in the RX path.\n+\t * If set to '0', then VLAN stripping is disabled on\n+\t * this VNIC.\n \t */\n-\tuint8_t\tsrc_macaddr[6];\n-\t/* This value indicates the ethertype in the Ethernet header. */\n-\tuint16_t\tethertype;\n+\t#define HWRM_VNIC_CFG_INPUT_FLAGS_VLAN_STRIP_MODE \\\n+\t\tUINT32_C(0x2)\n \t/*\n-\t * This value indicates the type of IP address.\n-\t * 4 - IPv4\n-\t * 6 - IPv6\n-\t * All others are invalid.\n+\t * When this bit is '1', the VNIC is being configured to\n+\t * buffer receive packets in the hardware until the host\n+\t * posts new receive buffers.\n+\t * If set to '0', then bd_stall is being configured to be\n+\t * disabled on this VNIC.\n \t */\n-\tuint8_t\tip_addr_type;\n-\t/* invalid */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_UNKNOWN \\\n-\t\tUINT32_C(0x0)\n-\t/* IPv4 */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_IPV4 \\\n+\t#define HWRM_VNIC_CFG_INPUT_FLAGS_BD_STALL_MODE \\\n \t\tUINT32_C(0x4)\n-\t/* IPv6 */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_IPV6 \\\n-\t\tUINT32_C(0x6)\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_LAST \\\n-\t\tHWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_IPV6\n \t/*\n-\t * The value of protocol filed in IP header.\n-\t * Applies to UDP and TCP traffic.\n-\t * 6 - TCP\n-\t * 17 - UDP\n+\t * When this bit is '1', the VNIC is being configured to\n+\t * receive both RoCE and non-RoCE traffic.\n+\t * If set to '0', then this VNIC is not configured to be\n+\t * operating in dual VNIC mode.\n \t */\n-\tuint8_t\tip_protocol;\n-\t/* invalid */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_PROTOCOL_UNKNOWN \\\n-\t\tUINT32_C(0x0)\n-\t/* TCP */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_PROTOCOL_TCP \\\n-\t\tUINT32_C(0x6)\n-\t/* UDP */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_PROTOCOL_UDP \\\n-\t\tUINT32_C(0x11)\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_PROTOCOL_LAST \\\n-\t\tHWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_PROTOCOL_UDP\n+\t#define HWRM_VNIC_CFG_INPUT_FLAGS_ROCE_DUAL_VNIC_MODE \\\n+\t\tUINT32_C(0x8)\n \t/*\n-\t * If set, this value shall represent the\n-\t * Logical VNIC ID of the destination VNIC for the RX\n-\t * path and network port id of the destination port for\n-\t * the TX path.\n+\t * When this flag is set to '1', the VNIC is requested to\n+\t * be configured to receive only RoCE traffic.\n+\t * If this flag is set to '0', then this flag shall be\n+\t * ignored by the HWRM.\n+\t * If roce_dual_vnic_mode flag is set to '1'\n+\t * or roce_mirroring_capable_vnic_mode flag to 1,\n+\t * then the HWRM client shall not set this flag to '1'.\n \t */\n-\tuint16_t\tdst_id;\n+\t#define HWRM_VNIC_CFG_INPUT_FLAGS_ROCE_ONLY_VNIC_MODE \\\n+\t\tUINT32_C(0x10)\n \t/*\n-\t * Logical VNIC ID of the VNIC where traffic is\n-\t * mirrored.\n+\t * When a VNIC uses one destination ring group for certain\n+\t * application (e.g. Receive Flow Steering) where\n+\t * exact match is used to direct packets to a VNIC with one\n+\t * destination ring group only, there is no need to configure\n+\t * RSS indirection table for that VNIC as only one destination\n+\t * ring group is used.\n+\t *\n+\t * This flag is used to enable a mode where\n+\t * RSS is enabled in the VNIC using a RSS context\n+\t * for computing RSS hash but the RSS indirection table is\n+\t * not configured using hwrm_vnic_rss_cfg.\n+\t *\n+\t * If this mode is enabled, then the driver should not program\n+\t * RSS indirection table for the RSS context that is used for\n+\t * computing RSS hash only.\n \t */\n-\tuint16_t\tmirror_vnic_id;\n+\t#define HWRM_VNIC_CFG_INPUT_FLAGS_RSS_DFLT_CR_MODE \\\n+\t\tUINT32_C(0x20)\n \t/*\n-\t * This value indicates the tunnel type for this filter.\n-\t * If this field is not specified, then the filter shall\n-\t * apply to both non-tunneled and tunneled packets.\n-\t * If this field conflicts with the tunnel_type specified\n-\t * in the l2_filter_id, then the HWRM shall return an\n-\t * error for this command.\n+\t * When this bit is '1', the VNIC is being configured to\n+\t * receive both RoCE and non-RoCE traffic, but forward only the\n+\t * RoCE traffic further. Also, RoCE traffic can be mirrored to\n+\t * L2 driver.\n \t */\n-\tuint8_t\ttunnel_type;\n-\t/* Non-tunnel */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NONTUNNEL \\\n-\t\tUINT32_C(0x0)\n-\t/* Virtual eXtensible Local Area Network (VXLAN) */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN \\\n-\t\tUINT32_C(0x1)\n-\t/* Network Virtualization Generic Routing Encapsulation (NVGRE) */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NVGRE \\\n-\t\tUINT32_C(0x2)\n-\t/* Generic Routing Encapsulation (GRE) inside Ethernet payload */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_L2GRE \\\n-\t\tUINT32_C(0x3)\n-\t/* IP in IP */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPIP \\\n-\t\tUINT32_C(0x4)\n-\t/* Generic Network Virtualization Encapsulation (Geneve) */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_GENEVE \\\n-\t\tUINT32_C(0x5)\n-\t/* Multi-Protocol Lable Switching (MPLS) */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_MPLS \\\n-\t\tUINT32_C(0x6)\n-\t/* Stateless Transport Tunnel (STT) */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_STT \\\n-\t\tUINT32_C(0x7)\n-\t/* Generic Routing Encapsulation (GRE) inside IP datagram payload */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPGRE \\\n-\t\tUINT32_C(0x8)\n-\t/* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_V4 \\\n-\t\tUINT32_C(0x9)\n-\t/* Any tunneled traffic */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL \\\n-\t\tUINT32_C(0xff)\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_LAST \\\n-\t\tHWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL\n+\t#define HWRM_VNIC_CFG_INPUT_FLAGS_ROCE_MIRRORING_CAPABLE_VNIC_MODE \\\n+\t\tUINT32_C(0x40)\n+\tuint32_t\tenables;\n \t/*\n-\t * This hint is provided to help in placing\n-\t * the filter in the filter table.\n+\t * This bit must be '1' for the dflt_ring_grp field to be\n+\t * configured.\n \t */\n-\tuint8_t\tpri_hint;\n-\t/* No preference */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_NO_PREFER \\\n-\t\tUINT32_C(0x0)\n-\t/* Above the given filter */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_ABOVE \\\n+\t#define HWRM_VNIC_CFG_INPUT_ENABLES_DFLT_RING_GRP \\\n \t\tUINT32_C(0x1)\n-\t/* Below the given filter */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_BELOW \\\n+\t/*\n+\t * This bit must be '1' for the rss_rule field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_VNIC_CFG_INPUT_ENABLES_RSS_RULE \\\n \t\tUINT32_C(0x2)\n-\t/* As high as possible */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_HIGHEST \\\n-\t\tUINT32_C(0x3)\n-\t/* As low as possible */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_LOWEST \\\n+\t/*\n+\t * This bit must be '1' for the cos_rule field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_VNIC_CFG_INPUT_ENABLES_COS_RULE \\\n \t\tUINT32_C(0x4)\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_LAST \\\n-\t\tHWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_LOWEST\n \t/*\n-\t * The value of source IP address to be used in filtering.\n-\t * For IPv4, first four bytes represent the IP address.\n+\t * This bit must be '1' for the lb_rule field to be\n+\t * configured.\n \t */\n-\tuint32_t\tsrc_ipaddr[4];\n+\t#define HWRM_VNIC_CFG_INPUT_ENABLES_LB_RULE \\\n+\t\tUINT32_C(0x8)\n \t/*\n-\t * The value of source IP address mask to be used in\n-\t * filtering.\n-\t * For IPv4, first four bytes represent the IP address mask.\n+\t * This bit must be '1' for the mru field to be\n+\t * configured.\n \t */\n-\tuint32_t\tsrc_ipaddr_mask[4];\n+\t#define HWRM_VNIC_CFG_INPUT_ENABLES_MRU \\\n+\t\tUINT32_C(0x10)\n \t/*\n-\t * The value of destination IP address to be used in filtering.\n-\t * For IPv4, first four bytes represent the IP address.\n+\t * This bit must be '1' for the default_rx_ring_id field to be\n+\t * configured.\n \t */\n-\tuint32_t\tdst_ipaddr[4];\n+\t#define HWRM_VNIC_CFG_INPUT_ENABLES_DEFAULT_RX_RING_ID \\\n+\t\tUINT32_C(0x20)\n \t/*\n-\t * The value of destination IP address mask to be used in\n-\t * filtering.\n-\t * For IPv4, first four bytes represent the IP address mask.\n+\t * This bit must be '1' for the default_cmpl_ring_id field to be\n+\t * configured.\n \t */\n-\tuint32_t\tdst_ipaddr_mask[4];\n+\t#define HWRM_VNIC_CFG_INPUT_ENABLES_DEFAULT_CMPL_RING_ID \\\n+\t\tUINT32_C(0x40)\n+\t/* Logical vnic ID */\n+\tuint16_t\tvnic_id;\n \t/*\n-\t * The value of source port to be used in filtering.\n-\t * Applies to UDP and TCP traffic.\n+\t * Default Completion ring for the VNIC.  This ring will\n+\t * be chosen if packet does not match any RSS rules and if\n+\t * there is no COS rule.\n \t */\n-\tuint16_t\tsrc_port;\n+\tuint16_t\tdflt_ring_grp;\n \t/*\n-\t * The value of source port mask to be used in filtering.\n-\t * Applies to UDP and TCP traffic.\n+\t * RSS ID for RSS rule/table structure.  0xFF... (All Fs) if\n+\t * there is no RSS rule.\n \t */\n-\tuint16_t\tsrc_port_mask;\n+\tuint16_t\trss_rule;\n \t/*\n-\t * The value of destination port to be used in filtering.\n-\t * Applies to UDP and TCP traffic.\n+\t * RSS ID for COS rule/table structure.  0xFF... (All Fs) if\n+\t * there is no COS rule.\n \t */\n-\tuint16_t\tdst_port;\n+\tuint16_t\tcos_rule;\n \t/*\n-\t * The value of destination port mask to be used in\n-\t * filtering.\n-\t * Applies to UDP and TCP traffic.\n+\t * RSS ID for load balancing rule/table structure.\n+\t * 0xFF... (All Fs) if there is no LB rule.\n \t */\n-\tuint16_t\tdst_port_mask;\n+\tuint16_t\tlb_rule;\n \t/*\n-\t * This is the ID of the filter that goes along with\n-\t * the pri_hint.\n+\t * The maximum receive unit of the vnic.\n+\t * Each vnic is associated with a function.\n+\t * The vnic mru value overwrites the mru setting of the\n+\t * associated function.\n+\t * The HWRM shall make sure that vnic mru does not exceed\n+\t * the mru of the port the function is associated with.\n \t */\n-\tuint64_t\tntuple_filter_id_hint;\n+\tuint16_t\tmru;\n+\t/*\n+\t * Default Rx ring for the VNIC.  This ring will\n+\t * be chosen if packet does not match any RSS rules.\n+\t * The aggregation ring associated with the Rx ring is\n+\t * implied based on the Rx ring specified when the\n+\t * aggregation ring was allocated.\n+\t */\n+\tuint16_t\tdefault_rx_ring_id;\n+\t/*\n+\t * Default completion ring for the VNIC.  This ring will\n+\t * be chosen if packet does not match any RSS rules.\n+\t */\n+\tuint16_t\tdefault_cmpl_ring_id;\n } __attribute__((packed));\n \n-/* hwrm_cfa_ntuple_filter_alloc_output (size:192b/24B) */\n-struct hwrm_cfa_ntuple_filter_alloc_output {\n+/* hwrm_vnic_cfg_output (size:128b/16B) */\n+struct hwrm_vnic_cfg_output {\n \t/* The specific error status for the command. */\n \tuint16_t\terror_code;\n \t/* The HWRM command request type. */\n@@ -22076,17 +15615,7 @@ struct hwrm_cfa_ntuple_filter_alloc_output {\n \tuint16_t\tseq_id;\n \t/* The length of the response data in number of bytes. */\n \tuint16_t\tresp_len;\n-\t/* This value is an opaque id into CFA data structures. */\n-\tuint64_t\tntuple_filter_id;\n-\t/*\n-\t * This is the ID of the flow associated with this\n-\t * filter.\n-\t * This value shall be used to match and associate the\n-\t * flow identifier returned in completion records.\n-\t * A value of 0xFFFFFFFF shall indicate no flow id.\n-\t */\n-\tuint32_t\tflow_id;\n-\tuint8_t\tunused_0[3];\n+\tuint8_t\tunused_0[7];\n \t/*\n \t * This field is used in Output records to indicate that the output\n \t * is completely written to RAM.  This field should be read as '1'\n@@ -22097,31 +15626,13 @@ struct hwrm_cfa_ntuple_filter_alloc_output {\n \tuint8_t\tvalid;\n } __attribute__((packed));\n \n-/* hwrm_cfa_ntuple_filter_alloc_cmd_err (size:64b/8B) */\n-struct hwrm_cfa_ntuple_filter_alloc_cmd_err {\n-\t/*\n-\t * command specific error codes that goes to\n-\t * the cmd_err field in Common HWRM Error Response.\n-\t */\n-\tuint8_t\tcode;\n-\t/* Unknown error */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_CMD_ERR_CODE_UNKNOWN \\\n-\t\tUINT32_C(0x0)\n-\t/* Unable to complete operation due to conflict with Rx Mask VLAN */\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_CMD_ERR_CODE_RX_MASK_VLAN_CONFLICT_ERR \\\n-\t\tUINT32_C(0x1)\n-\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_CMD_ERR_CODE_LAST \\\n-\t\tHWRM_CFA_NTUPLE_FILTER_ALLOC_CMD_ERR_CODE_RX_MASK_VLAN_CONFLICT_ERR\n-\tuint8_t\tunused_0[7];\n-} __attribute__((packed));\n-\n-/*******************************\n- * hwrm_cfa_ntuple_filter_free *\n- *******************************/\n+/******************\n+ * hwrm_vnic_qcfg *\n+ ******************/\n \n \n-/* hwrm_cfa_ntuple_filter_free_input (size:192b/24B) */\n-struct hwrm_cfa_ntuple_filter_free_input {\n+/* hwrm_vnic_qcfg_input (size:256b/32B) */\n+struct hwrm_vnic_qcfg_input {\n \t/* The HWRM command request type. */\n \tuint16_t\treq_type;\n \t/*\n@@ -22141,29 +15652,125 @@ struct hwrm_cfa_ntuple_filter_free_input {\n \t * * 0xFFF8-0xFFFE - Reserved for internal processors\n \t * * 0xFFFF - HWRM\n \t */\n-\tuint16_t\ttarget_id;\n+\tuint16_t\ttarget_id;\n+\t/*\n+\t * A physical address pointer pointing to a host buffer that the\n+\t * command's response data will be written. This can be either a host\n+\t * physical address (HPA) or a guest physical address (GPA) and must\n+\t * point to a physically contiguous block of memory.\n+\t */\n+\tuint64_t\tresp_addr;\n+\tuint32_t\tenables;\n+\t/*\n+\t * This bit must be '1' for the vf_id_valid field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_VNIC_QCFG_INPUT_ENABLES_VF_ID_VALID     UINT32_C(0x1)\n+\t/* Logical vnic ID */\n+\tuint32_t\tvnic_id;\n+\t/* ID of Virtual Function whose VNIC resource is being queried. */\n+\tuint16_t\tvf_id;\n+\tuint8_t\tunused_0[6];\n+} __attribute__((packed));\n+\n+/* hwrm_vnic_qcfg_output (size:256b/32B) */\n+struct hwrm_vnic_qcfg_output {\n+\t/* The specific error status for the command. */\n+\tuint16_t\terror_code;\n+\t/* The HWRM command request type. */\n+\tuint16_t\treq_type;\n+\t/* The sequence ID from the original command. */\n+\tuint16_t\tseq_id;\n+\t/* The length of the response data in number of bytes. */\n+\tuint16_t\tresp_len;\n+\t/* Default Completion ring for the VNIC. */\n+\tuint16_t\tdflt_ring_grp;\n+\t/*\n+\t * RSS ID for RSS rule/table structure.  0xFF... (All Fs) if\n+\t * there is no RSS rule.\n+\t */\n+\tuint16_t\trss_rule;\n+\t/*\n+\t * RSS ID for COS rule/table structure.  0xFF... (All Fs) if\n+\t * there is no COS rule.\n+\t */\n+\tuint16_t\tcos_rule;\n+\t/*\n+\t * RSS ID for load balancing rule/table structure.\n+\t * 0xFF... (All Fs) if there is no LB rule.\n+\t */\n+\tuint16_t\tlb_rule;\n+\t/* The maximum receive unit of the vnic. */\n+\tuint16_t\tmru;\n+\tuint8_t\tunused_0[2];\n+\tuint32_t\tflags;\n+\t/*\n+\t * When this bit is '1', the VNIC is the default VNIC for\n+\t * the function.\n+\t */\n+\t#define HWRM_VNIC_QCFG_OUTPUT_FLAGS_DEFAULT \\\n+\t\tUINT32_C(0x1)\n+\t/*\n+\t * When this bit is '1', the VNIC is configured to\n+\t * strip VLAN in the RX path.\n+\t * If set to '0', then VLAN stripping is disabled on\n+\t * this VNIC.\n+\t */\n+\t#define HWRM_VNIC_QCFG_OUTPUT_FLAGS_VLAN_STRIP_MODE \\\n+\t\tUINT32_C(0x2)\n+\t/*\n+\t * When this bit is '1', the VNIC is configured to\n+\t * buffer receive packets in the hardware until the host\n+\t * posts new receive buffers.\n+\t * If set to '0', then bd_stall is disabled on\n+\t * this VNIC.\n+\t */\n+\t#define HWRM_VNIC_QCFG_OUTPUT_FLAGS_BD_STALL_MODE \\\n+\t\tUINT32_C(0x4)\n+\t/*\n+\t * When this bit is '1', the VNIC is configured to\n+\t * receive both RoCE and non-RoCE traffic.\n+\t * If set to '0', then this VNIC is not configured to\n+\t * operate in dual VNIC mode.\n+\t */\n+\t#define HWRM_VNIC_QCFG_OUTPUT_FLAGS_ROCE_DUAL_VNIC_MODE \\\n+\t\tUINT32_C(0x8)\n+\t/*\n+\t * When this flag is set to '1', the VNIC is configured to\n+\t * receive only RoCE traffic.\n+\t * When this flag is set to '0', the VNIC is not configured\n+\t * to receive only RoCE traffic.\n+\t * If roce_dual_vnic_mode flag and this flag both are set\n+\t * to '1', then it is an invalid configuration of the\n+\t * VNIC. The HWRM should not allow that type of\n+\t * mis-configuration by HWRM clients.\n+\t */\n+\t#define HWRM_VNIC_QCFG_OUTPUT_FLAGS_ROCE_ONLY_VNIC_MODE \\\n+\t\tUINT32_C(0x10)\n+\t/*\n+\t * When a VNIC uses one destination ring group for certain\n+\t * application (e.g. Receive Flow Steering) where\n+\t * exact match is used to direct packets to a VNIC with one\n+\t * destination ring group only, there is no need to configure\n+\t * RSS indirection table for that VNIC as only one destination\n+\t * ring group is used.\n+\t *\n+\t * When this bit is set to '1', then the VNIC is enabled in a\n+\t * mode where RSS is enabled in the VNIC using a RSS context\n+\t * for computing RSS hash but the RSS indirection table is\n+\t * not configured.\n+\t */\n+\t#define HWRM_VNIC_QCFG_OUTPUT_FLAGS_RSS_DFLT_CR_MODE \\\n+\t\tUINT32_C(0x20)\n \t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n+\t * When this bit is '1', the VNIC is configured to\n+\t * receive both RoCE and non-RoCE traffic, but forward only\n+\t * RoCE traffic further. Also RoCE traffic can be mirrored to\n+\t * L2 driver.\n \t */\n-\tuint64_t\tresp_addr;\n-\t/* This value is an opaque id into CFA data structures. */\n-\tuint64_t\tntuple_filter_id;\n-} __attribute__((packed));\n-\n-/* hwrm_cfa_ntuple_filter_free_output (size:128b/16B) */\n-struct hwrm_cfa_ntuple_filter_free_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\tuint8_t\tunused_0[7];\n+\t#define HWRM_VNIC_QCFG_OUTPUT_FLAGS_ROCE_MIRRORING_CAPABLE_VNIC_MODE \\\n+\t\tUINT32_C(0x40)\n+\tuint8_t\tunused_1[7];\n \t/*\n \t * This field is used in Output records to indicate that the output\n \t * is completely written to RAM.  This field should be read as '1'\n@@ -22174,13 +15781,13 @@ struct hwrm_cfa_ntuple_filter_free_output {\n \tuint8_t\tvalid;\n } __attribute__((packed));\n \n-/******************************\n- * hwrm_cfa_ntuple_filter_cfg *\n- ******************************/\n+/*******************\n+ * hwrm_vnic_qcaps *\n+ *******************/\n \n \n-/* hwrm_cfa_ntuple_filter_cfg_input (size:384b/48B) */\n-struct hwrm_cfa_ntuple_filter_cfg_input {\n+/* hwrm_vnic_qcaps_input (size:192b/24B) */\n+struct hwrm_vnic_qcaps_input {\n \t/* The HWRM command request type. */\n \tuint16_t\treq_type;\n \t/*\n@@ -22209,67 +15816,87 @@ struct hwrm_cfa_ntuple_filter_cfg_input {\n \t */\n \tuint64_t\tresp_addr;\n \tuint32_t\tenables;\n-\t/*\n-\t * This bit must be '1' for the new_dst_id field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_ENABLES_NEW_DST_ID \\\n+\tuint8_t\tunused_0[4];\n+} __attribute__((packed));\n+\n+/* hwrm_vnic_qcaps_output (size:192b/24B) */\n+struct hwrm_vnic_qcaps_output {\n+\t/* The specific error status for the command. */\n+\tuint16_t\terror_code;\n+\t/* The HWRM command request type. */\n+\tuint16_t\treq_type;\n+\t/* The sequence ID from the original command. */\n+\tuint16_t\tseq_id;\n+\t/* The length of the response data in number of bytes. */\n+\tuint16_t\tresp_len;\n+\t/* The maximum receive unit that is settable on a vnic. */\n+\tuint16_t\tmru;\n+\tuint8_t\tunused_0[2];\n+\tuint32_t\tflags;\n+\t/* Unused. */\n+\t#define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_UNUSED \\\n \t\tUINT32_C(0x1)\n \t/*\n-\t * This bit must be '1' for the new_mirror_vnic_id field to be\n-\t * configured.\n+\t * When this bit is '1', the capability of stripping VLAN in\n+\t * the RX path is supported on VNIC(s).\n+\t * If set to '0', then VLAN stripping capability is\n+\t * not supported on VNIC(s).\n \t */\n-\t#define HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_ENABLES_NEW_MIRROR_VNIC_ID \\\n+\t#define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_VLAN_STRIP_CAP \\\n \t\tUINT32_C(0x2)\n \t/*\n-\t * This bit must be '1' for the new_meter_instance_id field to be\n-\t * configured.\n+\t * When this bit is '1', the capability to buffer receive\n+\t * packets in the hardware until the host posts new receive buffers\n+\t * is supported on VNIC(s).\n+\t * If set to '0', then bd_stall capability is not supported\n+\t * on VNIC(s).\n \t */\n-\t#define HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_ENABLES_NEW_METER_INSTANCE_ID \\\n+\t#define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_BD_STALL_CAP \\\n \t\tUINT32_C(0x4)\n-\tuint8_t\tunused_0[4];\n-\t/* This value is an opaque id into CFA data structures. */\n-\tuint64_t\tntuple_filter_id;\n \t/*\n-\t * If set, this value shall represent the new\n-\t * Logical VNIC ID of the destination VNIC for the RX\n-\t * path and new network port id of the destination port for\n-\t * the TX path.\n+\t * When this bit is '1', the capability to\n+\t * receive both RoCE and non-RoCE traffic on VNIC(s) is\n+\t * supported.\n+\t * If set to '0', then the capability to receive\n+\t * both RoCE and non-RoCE traffic on VNIC(s) is\n+\t * not supported.\n \t */\n-\tuint32_t\tnew_dst_id;\n+\t#define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_ROCE_DUAL_VNIC_CAP \\\n+\t\tUINT32_C(0x8)\n \t/*\n-\t * New Logical VNIC ID of the VNIC where traffic is\n-\t * mirrored.\n+\t * When this bit is set to '1', the capability to configure\n+\t * a VNIC to receive only RoCE traffic is supported.\n+\t * When this flag is set to '0', the VNIC capability to\n+\t * configure to receive only RoCE traffic is not supported.\n \t */\n-\tuint32_t\tnew_mirror_vnic_id;\n+\t#define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_ROCE_ONLY_VNIC_CAP \\\n+\t\tUINT32_C(0x10)\n \t/*\n-\t * New meter to attach to the flow. Specifying the\n-\t * invalid instance ID is used to remove any existing\n-\t * meter from the flow.\n+\t * When this bit is set to '1', then the capability to enable\n+\t * a VNIC in a mode where RSS context without configuring\n+\t * RSS indirection table is supported (for RSS hash computation).\n+\t * When this bit is set to '0', then a VNIC can not be configured\n+\t * with a mode to enable RSS context without configuring RSS\n+\t * indirection table.\n \t */\n-\tuint16_t\tnew_meter_instance_id;\n+\t#define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_RSS_DFLT_CR_CAP \\\n+\t\tUINT32_C(0x20)\n \t/*\n-\t * A value of 0xfff is considered invalid and implies the\n-\t * instance is not configured.\n+\t * When this bit is '1', the capability to\n+\t * mirror the the RoCE traffic is supported.\n+\t * If set to '0', then the capability to mirror the\n+\t * RoCE traffic is not supported.\n \t */\n-\t#define HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_NEW_METER_INSTANCE_ID_INVALID \\\n-\t\tUINT32_C(0xffff)\n-\t#define HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_NEW_METER_INSTANCE_ID_LAST \\\n-\t\tHWRM_CFA_NTUPLE_FILTER_CFG_INPUT_NEW_METER_INSTANCE_ID_INVALID\n-\tuint8_t\tunused_1[6];\n-} __attribute__((packed));\n-\n-/* hwrm_cfa_ntuple_filter_cfg_output (size:128b/16B) */\n-struct hwrm_cfa_ntuple_filter_cfg_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\tuint8_t\tunused_0[7];\n+\t#define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_ROCE_MIRRORING_CAPABLE_VNIC_CAP \\\n+\t\tUINT32_C(0x40)\n+\t/*\n+\t * When this bit is '1', the outermost RSS hashing capability\n+\t * is supported. If set to '0', then the outermost RSS hashing\n+\t * capability is not supported.\n+\t */\n+\t#define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_OUTERMOST_RSS_CAP \\\n+\t\tUINT32_C(0x80)\n+\tuint8_t\tunused_1[7];\n \t/*\n \t * This field is used in Output records to indicate that the output\n \t * is completely written to RAM.  This field should be read as '1'\n@@ -22280,13 +15907,13 @@ struct hwrm_cfa_ntuple_filter_cfg_output {\n \tuint8_t\tvalid;\n } __attribute__((packed));\n \n-/**************************\n- * hwrm_cfa_em_flow_alloc *\n- **************************/\n+/*********************\n+ * hwrm_vnic_tpa_cfg *\n+ *********************/\n \n \n-/* hwrm_cfa_em_flow_alloc_input (size:896b/112B) */\n-struct hwrm_cfa_em_flow_alloc_input {\n+/* hwrm_vnic_tpa_cfg_input (size:320b/40B) */\n+struct hwrm_vnic_tpa_cfg_input {\n \t/* The HWRM command request type. */\n \tuint16_t\treq_type;\n \t/*\n@@ -22316,305 +15943,293 @@ struct hwrm_cfa_em_flow_alloc_input {\n \tuint64_t\tresp_addr;\n \tuint32_t\tflags;\n \t/*\n-\t * Enumeration denoting the RX, TX type of the resource.\n-\t * This enumeration is used for resources that are similar for both\n-\t * TX and RX paths of the chip.\n-\t */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PATH         UINT32_C(0x1)\n-\t/* tx path */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PATH_TX        UINT32_C(0x0)\n-\t/* rx path */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PATH_RX        UINT32_C(0x1)\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PATH_LAST \\\n-\t\tHWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PATH_RX\n-\t/*\n-\t * Setting of this flag indicates enabling of a byte counter for a given\n-\t * flow.\n-\t */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_BYTE_CTR     UINT32_C(0x2)\n-\t/*\n-\t * Setting of this flag indicates enabling of a packet counter for a given\n-\t * flow.\n-\t */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PKT_CTR      UINT32_C(0x4)\n-\t/* Setting of this flag indicates de-capsulation action for the given flow. */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_DECAP        UINT32_C(0x8)\n-\t/* Setting of this flag indicates encapsulation action for the given flow. */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_ENCAP        UINT32_C(0x10)\n-\t/*\n-\t * Setting of this flag indicates drop action. If this flag is not set,\n-\t * then it should be considered accept action.\n-\t */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_DROP         UINT32_C(0x20)\n-\t/*\n-\t * Setting of this flag indicates that a meter is expected to be attached\n-\t * to this flow. This hint can be used when choosing the action record\n-\t * format required for the flow.\n-\t */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_METER        UINT32_C(0x40)\n-\tuint32_t\tenables;\n-\t/*\n-\t * This bit must be '1' for the l2_filter_id field to be\n-\t * configured.\n+\t * When this bit is '1', the VNIC shall be configured to\n+\t * perform transparent packet aggregation (TPA) of\n+\t * non-tunneled TCP packets.\n \t */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_L2_FILTER_ID \\\n+\t#define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_TPA \\\n \t\tUINT32_C(0x1)\n \t/*\n-\t * This bit must be '1' for the tunnel_type field to be\n-\t * configured.\n+\t * When this bit is '1', the VNIC shall be configured to\n+\t * perform transparent packet aggregation (TPA) of\n+\t * tunneled TCP packets.\n \t */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_TUNNEL_TYPE \\\n+\t#define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_ENCAP_TPA \\\n \t\tUINT32_C(0x2)\n \t/*\n-\t * This bit must be '1' for the tunnel_id field to be\n-\t * configured.\n+\t * When this bit is '1', the VNIC shall be configured to\n+\t * perform transparent packet aggregation (TPA) according\n+\t * to Windows Receive Segment Coalescing (RSC) rules.\n \t */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_TUNNEL_ID \\\n+\t#define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_RSC_WND_UPDATE \\\n \t\tUINT32_C(0x4)\n \t/*\n-\t * This bit must be '1' for the src_macaddr field to be\n-\t * configured.\n+\t * When this bit is '1', the VNIC shall be configured to\n+\t * perform transparent packet aggregation (TPA) according\n+\t * to Linux Generic Receive Offload (GRO) rules.\n \t */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_SRC_MACADDR \\\n+\t#define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_GRO \\\n \t\tUINT32_C(0x8)\n \t/*\n-\t * This bit must be '1' for the dst_macaddr field to be\n-\t * configured.\n+\t * When this bit is '1', the VNIC shall be configured to\n+\t * perform transparent packet aggregation (TPA) for TCP\n+\t * packets with IP ECN set to non-zero.\n \t */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_DST_MACADDR \\\n+\t#define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_AGG_WITH_ECN \\\n \t\tUINT32_C(0x10)\n \t/*\n-\t * This bit must be '1' for the ovlan_vid field to be\n-\t * configured.\n+\t * When this bit is '1', the VNIC shall be configured to\n+\t * perform transparent packet aggregation (TPA) for\n+\t * GRE tunneled TCP packets only if all packets have the\n+\t * same GRE sequence.\n \t */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_OVLAN_VID \\\n+\t#define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_AGG_WITH_SAME_GRE_SEQ \\\n \t\tUINT32_C(0x20)\n \t/*\n-\t * This bit must be '1' for the ivlan_vid field to be\n-\t * configured.\n+\t * When this bit is '1' and the GRO mode is enabled,\n+\t * the VNIC shall be configured to\n+\t * perform transparent packet aggregation (TPA) for\n+\t * TCP/IPv4 packets with consecutively increasing IPIDs.\n+\t * In other words, the last packet that is being\n+\t * aggregated to an already existing aggregation context\n+\t * shall have IPID 1 more than the IPID of the last packet\n+\t * that was aggregated in that aggregation context.\n \t */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_IVLAN_VID \\\n+\t#define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_GRO_IPID_CHECK \\\n \t\tUINT32_C(0x40)\n \t/*\n-\t * This bit must be '1' for the ethertype field to be\n-\t * configured.\n+\t * When this bit is '1' and the GRO mode is enabled,\n+\t * the VNIC shall be configured to\n+\t * perform transparent packet aggregation (TPA) for\n+\t * TCP packets with the same TTL (IPv4) or Hop limit (IPv6)\n+\t * value.\n \t */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_ETHERTYPE \\\n+\t#define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_GRO_TTL_CHECK \\\n \t\tUINT32_C(0x80)\n+\tuint32_t\tenables;\n \t/*\n-\t * This bit must be '1' for the src_ipaddr field to be\n+\t * This bit must be '1' for the max_agg_segs field to be\n \t * configured.\n \t */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_SRC_IPADDR \\\n-\t\tUINT32_C(0x100)\n+\t#define HWRM_VNIC_TPA_CFG_INPUT_ENABLES_MAX_AGG_SEGS      UINT32_C(0x1)\n \t/*\n-\t * This bit must be '1' for the dst_ipaddr field to be\n+\t * This bit must be '1' for the max_aggs field to be\n \t * configured.\n \t */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_DST_IPADDR \\\n-\t\tUINT32_C(0x200)\n+\t#define HWRM_VNIC_TPA_CFG_INPUT_ENABLES_MAX_AGGS          UINT32_C(0x2)\n \t/*\n-\t * This bit must be '1' for the ipaddr_type field to be\n+\t * This bit must be '1' for the max_agg_timer field to be\n \t * configured.\n \t */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_IPADDR_TYPE \\\n-\t\tUINT32_C(0x400)\n+\t#define HWRM_VNIC_TPA_CFG_INPUT_ENABLES_MAX_AGG_TIMER     UINT32_C(0x4)\n \t/*\n-\t * This bit must be '1' for the ip_protocol field to be\n+\t * This bit must be '1' for the min_agg_len field to be\n \t * configured.\n \t */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_IP_PROTOCOL \\\n-\t\tUINT32_C(0x800)\n+\t#define HWRM_VNIC_TPA_CFG_INPUT_ENABLES_MIN_AGG_LEN       UINT32_C(0x8)\n+\t/* Logical vnic ID */\n+\tuint16_t\tvnic_id;\n \t/*\n-\t * This bit must be '1' for the src_port field to be\n-\t * configured.\n+\t * This is the maximum number of TCP segments that can\n+\t * be aggregated (unit is Log2). Max value is 31.\n \t */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_SRC_PORT \\\n-\t\tUINT32_C(0x1000)\n+\tuint16_t\tmax_agg_segs;\n+\t/* 1 segment */\n+\t#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_1   UINT32_C(0x0)\n+\t/* 2 segments */\n+\t#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_2   UINT32_C(0x1)\n+\t/* 4 segments */\n+\t#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_4   UINT32_C(0x2)\n+\t/* 8 segments */\n+\t#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_8   UINT32_C(0x3)\n+\t/* Any segment size larger than this is not valid */\n+\t#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_MAX UINT32_C(0x1f)\n+\t#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_LAST \\\n+\t\tHWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_MAX\n \t/*\n-\t * This bit must be '1' for the dst_port field to be\n-\t * configured.\n+\t * This is the maximum number of aggregations this VNIC is\n+\t * allowed (unit is Log2). Max value is 7\n \t */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_DST_PORT \\\n-\t\tUINT32_C(0x2000)\n+\tuint16_t\tmax_aggs;\n+\t/* 1 aggregation */\n+\t#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_1   UINT32_C(0x0)\n+\t/* 2 aggregations */\n+\t#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_2   UINT32_C(0x1)\n+\t/* 4 aggregations */\n+\t#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_4   UINT32_C(0x2)\n+\t/* 8 aggregations */\n+\t#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_8   UINT32_C(0x3)\n+\t/* 16 aggregations */\n+\t#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_16  UINT32_C(0x4)\n+\t/* Any aggregation size larger than this is not valid */\n+\t#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_MAX UINT32_C(0x7)\n+\t#define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_LAST \\\n+\t\tHWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_MAX\n+\tuint8_t\tunused_0[2];\n \t/*\n-\t * This bit must be '1' for the dst_id field to be\n-\t * configured.\n+\t * This is the maximum amount of time allowed for\n+\t * an aggregation context to complete after it was initiated.\n \t */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_DST_ID \\\n-\t\tUINT32_C(0x4000)\n+\tuint32_t\tmax_agg_timer;\n \t/*\n-\t * This bit must be '1' for the mirror_vnic_id field to be\n-\t * configured.\n+\t * This is the minimum amount of payload length required to\n+\t * start an aggregation context.\n \t */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_MIRROR_VNIC_ID \\\n-\t\tUINT32_C(0x8000)\n+\tuint32_t\tmin_agg_len;\n+} __attribute__((packed));\n+\n+/* hwrm_vnic_tpa_cfg_output (size:128b/16B) */\n+struct hwrm_vnic_tpa_cfg_output {\n+\t/* The specific error status for the command. */\n+\tuint16_t\terror_code;\n+\t/* The HWRM command request type. */\n+\tuint16_t\treq_type;\n+\t/* The sequence ID from the original command. */\n+\tuint16_t\tseq_id;\n+\t/* The length of the response data in number of bytes. */\n+\tuint16_t\tresp_len;\n+\tuint8_t\tunused_0[7];\n \t/*\n-\t * This bit must be '1' for the encap_record_id field to be\n-\t * configured.\n+\t * This field is used in Output records to indicate that the output\n+\t * is completely written to RAM.  This field should be read as '1'\n+\t * to indicate that the output has been completely written.\n+\t * When writing a command completion or response to an internal processor,\n+\t * the order of writes has to be such that this field is written last.\n \t */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_ENCAP_RECORD_ID \\\n-\t\tUINT32_C(0x10000)\n+\tuint8_t\tvalid;\n+} __attribute__((packed));\n+\n+/*********************\n+ * hwrm_vnic_rss_cfg *\n+ *********************/\n+\n+\n+/* hwrm_vnic_rss_cfg_input (size:384b/48B) */\n+struct hwrm_vnic_rss_cfg_input {\n+\t/* The HWRM command request type. */\n+\tuint16_t\treq_type;\n \t/*\n-\t * This bit must be '1' for the meter_instance_id field to be\n-\t * configured.\n+\t * The completion ring to send the completion event on. This should\n+\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n \t */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_METER_INSTANCE_ID \\\n-\t\tUINT32_C(0x20000)\n+\tuint16_t\tcmpl_ring;\n \t/*\n-\t * This value identifies a set of CFA data structures used for an L2\n-\t * context.\n+\t * The sequence ID is used by the driver for tracking multiple\n+\t * commands. This ID is treated as opaque data by the firmware and\n+\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n \t */\n-\tuint64_t\tl2_filter_id;\n-\t/* Tunnel Type. */\n-\tuint8_t\ttunnel_type;\n-\t/* Non-tunnel */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_NONTUNNEL \\\n-\t\tUINT32_C(0x0)\n-\t/* Virtual eXtensible Local Area Network (VXLAN) */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_VXLAN \\\n-\t\tUINT32_C(0x1)\n-\t/* Network Virtualization Generic Routing Encapsulation (NVGRE) */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_NVGRE \\\n-\t\tUINT32_C(0x2)\n-\t/* Generic Routing Encapsulation (GRE) inside Ethernet payload */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_L2GRE \\\n-\t\tUINT32_C(0x3)\n-\t/* IP in IP */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_IPIP \\\n-\t\tUINT32_C(0x4)\n-\t/* Generic Network Virtualization Encapsulation (Geneve) */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_GENEVE \\\n-\t\tUINT32_C(0x5)\n-\t/* Multi-Protocol Lable Switching (MPLS) */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_MPLS \\\n-\t\tUINT32_C(0x6)\n-\t/* Stateless Transport Tunnel (STT) */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_STT \\\n-\t\tUINT32_C(0x7)\n-\t/* Generic Routing Encapsulation (GRE) inside IP datagram payload */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_IPGRE \\\n-\t\tUINT32_C(0x8)\n-\t/* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_V4 \\\n-\t\tUINT32_C(0x9)\n-\t/* Any tunneled traffic */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL \\\n-\t\tUINT32_C(0xff)\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_LAST \\\n-\t\tHWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL\n-\tuint8_t\tunused_0[3];\n+\tuint16_t\tseq_id;\n \t/*\n-\t * Tunnel identifier.\n-\t * Virtual Network Identifier (VNI). Only valid with\n-\t * tunnel_types VXLAN, NVGRE, and Geneve.\n-\t * Only lower 24-bits of VNI field are used\n-\t * in setting up the filter.\n+\t * The target ID of the command:\n+\t * * 0x0-0xFFF8 - The function ID\n+\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n+\t * * 0xFFFF - HWRM\n \t */\n-\tuint32_t\ttunnel_id;\n+\tuint16_t\ttarget_id;\n \t/*\n-\t * This value indicates the source MAC address in\n-\t * the Ethernet header.\n+\t * A physical address pointer pointing to a host buffer that the\n+\t * command's response data will be written. This can be either a host\n+\t * physical address (HPA) or a guest physical address (GPA) and must\n+\t * point to a physically contiguous block of memory.\n \t */\n-\tuint8_t\tsrc_macaddr[6];\n-\t/* The meter instance to attach to the flow. */\n-\tuint16_t\tmeter_instance_id;\n+\tuint64_t\tresp_addr;\n+\tuint32_t\thash_type;\n \t/*\n-\t * A value of 0xfff is considered invalid and implies the\n-\t * instance is not configured.\n+\t * When this bit is '1', the RSS hash shall be computed\n+\t * over source and destination IPv4 addresses of IPv4\n+\t * packets.\n \t */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_METER_INSTANCE_ID_INVALID \\\n-\t\tUINT32_C(0xffff)\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_METER_INSTANCE_ID_LAST \\\n-\t\tHWRM_CFA_EM_FLOW_ALLOC_INPUT_METER_INSTANCE_ID_INVALID\n+\t#define HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_IPV4         UINT32_C(0x1)\n \t/*\n-\t * This value indicates the destination MAC address in\n-\t * the Ethernet header.\n+\t * When this bit is '1', the RSS hash shall be computed\n+\t * over source/destination IPv4 addresses and\n+\t * source/destination ports of TCP/IPv4 packets.\n \t */\n-\tuint8_t\tdst_macaddr[6];\n+\t#define HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_TCP_IPV4     UINT32_C(0x2)\n \t/*\n-\t * This value indicates the VLAN ID of the outer VLAN tag\n-\t * in the Ethernet header.\n+\t * When this bit is '1', the RSS hash shall be computed\n+\t * over source/destination IPv4 addresses and\n+\t * source/destination ports of UDP/IPv4 packets.\n \t */\n-\tuint16_t\tovlan_vid;\n+\t#define HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_UDP_IPV4     UINT32_C(0x4)\n \t/*\n-\t * This value indicates the VLAN ID of the inner VLAN tag\n-\t * in the Ethernet header.\n+\t * When this bit is '1', the RSS hash shall be computed\n+\t * over source and destination IPv4 addresses of IPv6\n+\t * packets.\n \t */\n-\tuint16_t\tivlan_vid;\n-\t/* This value indicates the ethertype in the Ethernet header. */\n-\tuint16_t\tethertype;\n+\t#define HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_IPV6         UINT32_C(0x8)\n \t/*\n-\t * This value indicates the type of IP address.\n-\t * 4 - IPv4\n-\t * 6 - IPv6\n-\t * All others are invalid.\n+\t * When this bit is '1', the RSS hash shall be computed\n+\t * over source/destination IPv6 addresses and\n+\t * source/destination ports of TCP/IPv6 packets.\n \t */\n-\tuint8_t\tip_addr_type;\n-\t/* invalid */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_ADDR_TYPE_UNKNOWN UINT32_C(0x0)\n-\t/* IPv4 */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_ADDR_TYPE_IPV4    UINT32_C(0x4)\n-\t/* IPv6 */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_ADDR_TYPE_IPV6    UINT32_C(0x6)\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_ADDR_TYPE_LAST \\\n-\t\tHWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_ADDR_TYPE_IPV6\n+\t#define HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_TCP_IPV6     UINT32_C(0x10)\n \t/*\n-\t * The value of protocol filed in IP header.\n-\t * Applies to UDP and TCP traffic.\n-\t * 6 - TCP\n-\t * 17 - UDP\n+\t * When this bit is '1', the RSS hash shall be computed\n+\t * over source/destination IPv6 addresses and\n+\t * source/destination ports of UDP/IPv6 packets.\n \t */\n-\tuint8_t\tip_protocol;\n-\t/* invalid */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_PROTOCOL_UNKNOWN UINT32_C(0x0)\n-\t/* TCP */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_PROTOCOL_TCP     UINT32_C(0x6)\n-\t/* UDP */\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_PROTOCOL_UDP     UINT32_C(0x11)\n-\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_PROTOCOL_LAST \\\n-\t\tHWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_PROTOCOL_UDP\n-\tuint8_t\tunused_1[2];\n+\t#define HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_UDP_IPV6     UINT32_C(0x20)\n+\t/* VNIC ID of VNIC associated with RSS table being configured. */\n+\tuint16_t\tvnic_id;\n \t/*\n-\t * The value of source IP address to be used in filtering.\n-\t * For IPv4, first four bytes represent the IP address.\n+\t * Specifies which VNIC ring table pair to configure.\n+\t * Valid values range from 0 to 7.\n \t */\n-\tuint32_t\tsrc_ipaddr[4];\n+\tuint8_t\tring_table_pair_index;\n+\t/* Flags to specify different RSS hash modes. */\n+\tuint8_t\thash_mode_flags;\n \t/*\n-\t * big_endian = True\n-\t *     The value of destination IP address to be used in filtering.\n-\t *     For IPv4, first four bytes represent the IP address.\n+\t * When this bit is '1', it indicates using current RSS\n+\t * hash mode setting configured in the device.\n \t */\n-\tuint32_t\tdst_ipaddr[4];\n+\t#define HWRM_VNIC_RSS_CFG_INPUT_HASH_MODE_FLAGS_DEFAULT \\\n+\t\tUINT32_C(0x1)\n \t/*\n-\t * The value of source port to be used in filtering.\n-\t * Applies to UDP and TCP traffic.\n+\t * When this bit is '1', it indicates requesting support of\n+\t * RSS hashing over innermost 4 tuples {l3.src, l3.dest,\n+\t * l4.src, l4.dest} for tunnel packets. For none-tunnel\n+\t * packets, the RSS hash is computed over the normal\n+\t * src/dest l3 and src/dest l4 headers.\n \t */\n-\tuint16_t\tsrc_port;\n+\t#define HWRM_VNIC_RSS_CFG_INPUT_HASH_MODE_FLAGS_INNERMOST_4 \\\n+\t\tUINT32_C(0x2)\n \t/*\n-\t * The value of destination port to be used in filtering.\n-\t * Applies to UDP and TCP traffic.\n+\t * When this bit is '1', it indicates requesting support of\n+\t * RSS hashing over innermost 2 tuples {l3.src, l3.dest} for\n+\t * tunnel packets. For none-tunnel packets, the RSS hash is\n+\t * computed over the normal src/dest l3 headers.\n \t */\n-\tuint16_t\tdst_port;\n+\t#define HWRM_VNIC_RSS_CFG_INPUT_HASH_MODE_FLAGS_INNERMOST_2 \\\n+\t\tUINT32_C(0x4)\n \t/*\n-\t * If set, this value shall represent the\n-\t * Logical VNIC ID of the destination VNIC for the RX\n-\t * path and network port id of the destination port for\n-\t * the TX path.\n+\t * When this bit is '1', it indicates requesting support of\n+\t * RSS hashing over outermost 4 tuples {t_l3.src, t_l3.dest,\n+\t * t_l4.src, t_l4.dest} for tunnel packets. For none-tunnel\n+\t * packets, the RSS hash is computed over the normal\n+\t * src/dest l3 and src/dest l4 headers.\n \t */\n-\tuint16_t\tdst_id;\n+\t#define HWRM_VNIC_RSS_CFG_INPUT_HASH_MODE_FLAGS_OUTERMOST_4 \\\n+\t\tUINT32_C(0x8)\n \t/*\n-\t * Logical VNIC ID of the VNIC where traffic is\n-\t * mirrored.\n+\t * When this bit is '1', it indicates requesting support of\n+\t * RSS hashing over outermost 2 tuples {t_l3.src, t_l3.dest} for\n+\t * tunnel packets. For none-tunnel packets, the RSS hash is\n+\t * computed over the normal src/dest l3 headers.\n \t */\n-\tuint16_t\tmirror_vnic_id;\n-\t/* Logical ID of the encapsulation record. */\n-\tuint32_t\tencap_record_id;\n-\tuint8_t\tunused_2[4];\n+\t#define HWRM_VNIC_RSS_CFG_INPUT_HASH_MODE_FLAGS_OUTERMOST_2 \\\n+\t\tUINT32_C(0x10)\n+\t/* This is the address for rss ring group table */\n+\tuint64_t\tring_grp_tbl_addr;\n+\t/* This is the address for rss hash key table */\n+\tuint64_t\thash_key_tbl_addr;\n+\t/* Index to the rss indirection table. */\n+\tuint16_t\trss_ctx_idx;\n+\tuint8_t\tunused_1[6];\n } __attribute__((packed));\n \n-/* hwrm_cfa_em_flow_alloc_output (size:192b/24B) */\n-struct hwrm_cfa_em_flow_alloc_output {\n+/* hwrm_vnic_rss_cfg_output (size:128b/16B) */\n+struct hwrm_vnic_rss_cfg_output {\n \t/* The specific error status for the command. */\n \tuint16_t\terror_code;\n \t/* The HWRM command request type. */\n@@ -22623,17 +16238,7 @@ struct hwrm_cfa_em_flow_alloc_output {\n \tuint16_t\tseq_id;\n \t/* The length of the response data in number of bytes. */\n \tuint16_t\tresp_len;\n-\t/* This value is an opaque id into CFA data structures. */\n-\tuint64_t\tem_filter_id;\n-\t/*\n-\t * This is the ID of the flow associated with this\n-\t * filter.\n-\t * This value shall be used to match and associate the\n-\t * flow identifier returned in completion records.\n-\t * A value of 0xFFFFFFFF shall indicate no flow id.\n-\t */\n-\tuint32_t\tflow_id;\n-\tuint8_t\tunused_0[3];\n+\tuint8_t\tunused_0[7];\n \t/*\n \t * This field is used in Output records to indicate that the output\n \t * is completely written to RAM.  This field should be read as '1'\n@@ -22644,13 +16249,13 @@ struct hwrm_cfa_em_flow_alloc_output {\n \tuint8_t\tvalid;\n } __attribute__((packed));\n \n-/*************************\n- * hwrm_cfa_em_flow_free *\n- *************************/\n+/**********************\n+ * hwrm_vnic_rss_qcfg *\n+ **********************/\n \n \n-/* hwrm_cfa_em_flow_free_input (size:192b/24B) */\n-struct hwrm_cfa_em_flow_free_input {\n+/* hwrm_vnic_rss_qcfg_input (size:192b/24B) */\n+struct hwrm_vnic_rss_qcfg_input {\n \t/* The HWRM command request type. */\n \tuint16_t\treq_type;\n \t/*\n@@ -22678,12 +16283,13 @@ struct hwrm_cfa_em_flow_free_input {\n \t * point to a physically contiguous block of memory.\n \t */\n \tuint64_t\tresp_addr;\n-\t/* This value is an opaque id into CFA data structures. */\n-\tuint64_t\tem_filter_id;\n+\t/* Index to the rss indirection table. */\n+\tuint16_t\trss_ctx_idx;\n+\tuint8_t\tunused_0[6];\n } __attribute__((packed));\n \n-/* hwrm_cfa_em_flow_free_output (size:128b/16B) */\n-struct hwrm_cfa_em_flow_free_output {\n+/* hwrm_vnic_rss_qcfg_output (size:512b/64B) */\n+struct hwrm_vnic_rss_qcfg_output {\n \t/* The specific error status for the command. */\n \tuint16_t\terror_code;\n \t/* The HWRM command request type. */\n@@ -22692,7 +16298,89 @@ struct hwrm_cfa_em_flow_free_output {\n \tuint16_t\tseq_id;\n \t/* The length of the response data in number of bytes. */\n \tuint16_t\tresp_len;\n-\tuint8_t\tunused_0[7];\n+\tuint32_t\thash_type;\n+\t/*\n+\t * When this bit is '1', the RSS hash shall be computed\n+\t * over source and destination IPv4 addresses of IPv4\n+\t * packets.\n+\t */\n+\t#define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_TYPE_IPV4         UINT32_C(0x1)\n+\t/*\n+\t * When this bit is '1', the RSS hash shall be computed\n+\t * over source/destination IPv4 addresses and\n+\t * source/destination ports of TCP/IPv4 packets.\n+\t */\n+\t#define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_TYPE_TCP_IPV4     UINT32_C(0x2)\n+\t/*\n+\t * When this bit is '1', the RSS hash shall be computed\n+\t * over source/destination IPv4 addresses and\n+\t * source/destination ports of UDP/IPv4 packets.\n+\t */\n+\t#define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_TYPE_UDP_IPV4     UINT32_C(0x4)\n+\t/*\n+\t * When this bit is '1', the RSS hash shall be computed\n+\t * over source and destination IPv4 addresses of IPv6\n+\t * packets.\n+\t */\n+\t#define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_TYPE_IPV6         UINT32_C(0x8)\n+\t/*\n+\t * When this bit is '1', the RSS hash shall be computed\n+\t * over source/destination IPv6 addresses and\n+\t * source/destination ports of TCP/IPv6 packets.\n+\t */\n+\t#define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_TYPE_TCP_IPV6     UINT32_C(0x10)\n+\t/*\n+\t * When this bit is '1', the RSS hash shall be computed\n+\t * over source/destination IPv6 addresses and\n+\t * source/destination ports of UDP/IPv6 packets.\n+\t */\n+\t#define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_TYPE_UDP_IPV6     UINT32_C(0x20)\n+\tuint8_t\tunused_0[4];\n+\t/* This is the value of rss hash key */\n+\tuint32_t\thash_key[10];\n+\t/* Flags to specify different RSS hash modes. */\n+\tuint8_t\thash_mode_flags;\n+\t/*\n+\t * When this bit is '1', it indicates using current RSS\n+\t * hash mode setting configured in the device.\n+\t */\n+\t#define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_MODE_FLAGS_DEFAULT \\\n+\t\tUINT32_C(0x1)\n+\t/*\n+\t * When this bit is '1', it indicates requesting support of\n+\t * RSS hashing over innermost 4 tuples {l3.src, l3.dest,\n+\t * l4.src, l4.dest} for tunnel packets. For none-tunnel\n+\t * packets, the RSS hash is computed over the normal\n+\t * src/dest l3 and src/dest l4 headers.\n+\t */\n+\t#define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_MODE_FLAGS_INNERMOST_4 \\\n+\t\tUINT32_C(0x2)\n+\t/*\n+\t * When this bit is '1', it indicates requesting support of\n+\t * RSS hashing over innermost 2 tuples {l3.src, l3.dest} for\n+\t * tunnel packets. For none-tunnel packets, the RSS hash is\n+\t * computed over the normal src/dest l3 headers.\n+\t */\n+\t#define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_MODE_FLAGS_INNERMOST_2 \\\n+\t\tUINT32_C(0x4)\n+\t/*\n+\t * When this bit is '1', it indicates requesting support of\n+\t * RSS hashing over outermost 4 tuples {t_l3.src, t_l3.dest,\n+\t * t_l4.src, t_l4.dest} for tunnel packets. For none-tunnel\n+\t * packets, the RSS hash is computed over the normal\n+\t * src/dest l3 and src/dest l4 headers.\n+\t */\n+\t#define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_MODE_FLAGS_OUTERMOST_4 \\\n+\t\tUINT32_C(0x8)\n+\t/*\n+\t * When this bit is '1', it indicates requesting support of\n+\t * RSS hashing over outermost 2 tuples {t_l3.src, t_l3.dest} for\n+\t * tunnel packets. For none-tunnel packets, the RSS hash is\n+\t * computed over the normal src/dest l3 headers.\n+\t */\n+\t#define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_MODE_FLAGS_OUTERMOST_2 \\\n+\t\tUINT32_C(0x10)\n+\tuint8_t\tunused_1[6];\n \t/*\n \t * This field is used in Output records to indicate that the output\n \t * is completely written to RAM.  This field should be read as '1'\n@@ -22703,13 +16391,13 @@ struct hwrm_cfa_em_flow_free_output {\n \tuint8_t\tvalid;\n } __attribute__((packed));\n \n-/************************\n- * hwrm_cfa_em_flow_cfg *\n- ************************/\n+/**************************\n+ * hwrm_vnic_plcmodes_cfg *\n+ **************************/\n \n \n-/* hwrm_cfa_em_flow_cfg_input (size:384b/48B) */\n-struct hwrm_cfa_em_flow_cfg_input {\n+/* hwrm_vnic_plcmodes_cfg_input (size:320b/40B) */\n+struct hwrm_vnic_plcmodes_cfg_input {\n \t/* The HWRM command request type. */\n \tuint16_t\treq_type;\n \t/*\n@@ -22722,74 +16410,131 @@ struct hwrm_cfa_em_flow_cfg_input {\n \t * commands. This ID is treated as opaque data by the firmware and\n \t * the value is returned in the `hwrm_resp_hdr` upon completion.\n \t */\n-\tuint16_t\tseq_id;\n+\tuint16_t\tseq_id;\n+\t/*\n+\t * The target ID of the command:\n+\t * * 0x0-0xFFF8 - The function ID\n+\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n+\t * * 0xFFFF - HWRM\n+\t */\n+\tuint16_t\ttarget_id;\n+\t/*\n+\t * A physical address pointer pointing to a host buffer that the\n+\t * command's response data will be written. This can be either a host\n+\t * physical address (HPA) or a guest physical address (GPA) and must\n+\t * point to a physically contiguous block of memory.\n+\t */\n+\tuint64_t\tresp_addr;\n+\tuint32_t\tflags;\n+\t/*\n+\t * When this bit is '1', the VNIC shall be configured to\n+\t * use regular placement algorithm.\n+\t * By default, the regular placement algorithm shall be\n+\t * enabled on the VNIC.\n+\t */\n+\t#define HWRM_VNIC_PLCMODES_CFG_INPUT_FLAGS_REGULAR_PLACEMENT \\\n+\t\tUINT32_C(0x1)\n+\t/*\n+\t * When this bit is '1', the VNIC shall be configured\n+\t * use the jumbo placement algorithm.\n+\t */\n+\t#define HWRM_VNIC_PLCMODES_CFG_INPUT_FLAGS_JUMBO_PLACEMENT \\\n+\t\tUINT32_C(0x2)\n+\t/*\n+\t * When this bit is '1', the VNIC shall be configured\n+\t * to enable Header-Data split for IPv4 packets according\n+\t * to the following rules:\n+\t * # If the packet is identified as TCP/IPv4, then the\n+\t * packet is split at the beginning of the TCP payload.\n+\t * # If the packet is identified as UDP/IPv4, then the\n+\t * packet is split at the beginning of UDP payload.\n+\t * # If the packet is identified as non-TCP and non-UDP\n+\t * IPv4 packet, then the packet is split at the beginning\n+\t * of the upper layer protocol header carried in the IPv4\n+\t * packet.\n+\t */\n+\t#define HWRM_VNIC_PLCMODES_CFG_INPUT_FLAGS_HDS_IPV4 \\\n+\t\tUINT32_C(0x4)\n+\t/*\n+\t * When this bit is '1', the VNIC shall be configured\n+\t * to enable Header-Data split for IPv6 packets according\n+\t * to the following rules:\n+\t * # If the packet is identified as TCP/IPv6, then the\n+\t * packet is split at the beginning of the TCP payload.\n+\t * # If the packet is identified as UDP/IPv6, then the\n+\t * packet is split at the beginning of UDP payload.\n+\t * # If the packet is identified as non-TCP and non-UDP\n+\t * IPv6 packet, then the packet is split at the beginning\n+\t * of the upper layer protocol header carried in the IPv6\n+\t * packet.\n+\t */\n+\t#define HWRM_VNIC_PLCMODES_CFG_INPUT_FLAGS_HDS_IPV6 \\\n+\t\tUINT32_C(0x8)\n \t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n+\t * When this bit is '1', the VNIC shall be configured\n+\t * to enable Header-Data split for FCoE packets at the\n+\t * beginning of FC payload.\n \t */\n-\tuint16_t\ttarget_id;\n+\t#define HWRM_VNIC_PLCMODES_CFG_INPUT_FLAGS_HDS_FCOE \\\n+\t\tUINT32_C(0x10)\n \t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n+\t * When this bit is '1', the VNIC shall be configured\n+\t * to enable Header-Data split for RoCE packets at the\n+\t * beginning of RoCE payload (after BTH/GRH headers).\n \t */\n-\tuint64_t\tresp_addr;\n+\t#define HWRM_VNIC_PLCMODES_CFG_INPUT_FLAGS_HDS_ROCE \\\n+\t\tUINT32_C(0x20)\n \tuint32_t\tenables;\n \t/*\n-\t * This bit must be '1' for the new_dst_id field to be\n+\t * This bit must be '1' for the jumbo_thresh_valid field to be\n \t * configured.\n \t */\n-\t#define HWRM_CFA_EM_FLOW_CFG_INPUT_ENABLES_NEW_DST_ID \\\n+\t#define HWRM_VNIC_PLCMODES_CFG_INPUT_ENABLES_JUMBO_THRESH_VALID \\\n \t\tUINT32_C(0x1)\n \t/*\n-\t * This bit must be '1' for the new_mirror_vnic_id field to be\n+\t * This bit must be '1' for the hds_offset_valid field to be\n \t * configured.\n \t */\n-\t#define HWRM_CFA_EM_FLOW_CFG_INPUT_ENABLES_NEW_MIRROR_VNIC_ID \\\n+\t#define HWRM_VNIC_PLCMODES_CFG_INPUT_ENABLES_HDS_OFFSET_VALID \\\n \t\tUINT32_C(0x2)\n \t/*\n-\t * This bit must be '1' for the new_meter_instance_id field to be\n+\t * This bit must be '1' for the hds_threshold_valid field to be\n \t * configured.\n \t */\n-\t#define HWRM_CFA_EM_FLOW_CFG_INPUT_ENABLES_NEW_METER_INSTANCE_ID \\\n+\t#define HWRM_VNIC_PLCMODES_CFG_INPUT_ENABLES_HDS_THRESHOLD_VALID \\\n \t\tUINT32_C(0x4)\n-\tuint8_t\tunused_0[4];\n-\t/* This value is an opaque id into CFA data structures. */\n-\tuint64_t\tem_filter_id;\n-\t/*\n-\t * If set, this value shall represent the new\n-\t * Logical VNIC ID of the destination VNIC for the RX\n-\t * path and network port id of the destination port for\n-\t * the TX path.\n-\t */\n-\tuint32_t\tnew_dst_id;\n+\t/* Logical vnic ID */\n+\tuint32_t\tvnic_id;\n \t/*\n-\t * New Logical VNIC ID of the VNIC where traffic is\n-\t * mirrored.\n+\t * When jumbo placement algorithm is enabled, this value\n+\t * is used to determine the threshold for jumbo placement.\n+\t * Packets with length larger than this value will be\n+\t * placed according to the jumbo placement algorithm.\n \t */\n-\tuint32_t\tnew_mirror_vnic_id;\n+\tuint16_t\tjumbo_thresh;\n \t/*\n-\t * New meter to attach to the flow. Specifying the\n-\t * invalid instance ID is used to remove any existing\n-\t * meter from the flow.\n+\t * This value is used to determine the offset into\n+\t * packet buffer where the split data (payload) will be\n+\t * placed according to one of of HDS placement algorithm.\n+\t *\n+\t * The lengths of packet buffers provided for split data\n+\t * shall be larger than this value.\n \t */\n-\tuint16_t\tnew_meter_instance_id;\n+\tuint16_t\thds_offset;\n \t/*\n-\t * A value of 0xfff is considered invalid and implies the\n-\t * instance is not configured.\n+\t * When one of the HDS placement algorithm is enabled, this\n+\t * value is used to determine the threshold for HDS\n+\t * placement.\n+\t * Packets with length larger than this value will be\n+\t * placed according to the HDS placement algorithm.\n+\t * This value shall be in multiple of 4 bytes.\n \t */\n-\t#define HWRM_CFA_EM_FLOW_CFG_INPUT_NEW_METER_INSTANCE_ID_INVALID \\\n-\t\tUINT32_C(0xffff)\n-\t#define HWRM_CFA_EM_FLOW_CFG_INPUT_NEW_METER_INSTANCE_ID_LAST \\\n-\t\tHWRM_CFA_EM_FLOW_CFG_INPUT_NEW_METER_INSTANCE_ID_INVALID\n-\tuint8_t\tunused_1[6];\n+\tuint16_t\thds_threshold;\n+\tuint8_t\tunused_0[6];\n } __attribute__((packed));\n \n-/* hwrm_cfa_em_flow_cfg_output (size:128b/16B) */\n-struct hwrm_cfa_em_flow_cfg_output {\n+/* hwrm_vnic_plcmodes_cfg_output (size:128b/16B) */\n+struct hwrm_vnic_plcmodes_cfg_output {\n \t/* The specific error status for the command. */\n \tuint16_t\terror_code;\n \t/* The HWRM command request type. */\n@@ -22809,13 +16554,13 @@ struct hwrm_cfa_em_flow_cfg_output {\n \tuint8_t\tvalid;\n } __attribute__((packed));\n \n-/********************************\n- * hwrm_cfa_meter_profile_alloc *\n- ********************************/\n+/***************************\n+ * hwrm_vnic_plcmodes_qcfg *\n+ ***************************/\n \n \n-/* hwrm_cfa_meter_profile_alloc_input (size:320b/40B) */\n-struct hwrm_cfa_meter_profile_alloc_input {\n+/* hwrm_vnic_plcmodes_qcfg_input (size:192b/24B) */\n+struct hwrm_vnic_plcmodes_qcfg_input {\n \t/* The HWRM command request type. */\n \tuint16_t\treq_type;\n \t/*\n@@ -22843,220 +16588,138 @@ struct hwrm_cfa_meter_profile_alloc_input {\n \t * point to a physically contiguous block of memory.\n \t */\n \tuint64_t\tresp_addr;\n-\tuint8_t\tflags;\n+\t/* Logical vnic ID */\n+\tuint32_t\tvnic_id;\n+\tuint8_t\tunused_0[4];\n+} __attribute__((packed));\n+\n+/* hwrm_vnic_plcmodes_qcfg_output (size:192b/24B) */\n+struct hwrm_vnic_plcmodes_qcfg_output {\n+\t/* The specific error status for the command. */\n+\tuint16_t\terror_code;\n+\t/* The HWRM command request type. */\n+\tuint16_t\treq_type;\n+\t/* The sequence ID from the original command. */\n+\tuint16_t\tseq_id;\n+\t/* The length of the response data in number of bytes. */\n+\tuint16_t\tresp_len;\n+\tuint32_t\tflags;\n \t/*\n-\t * Enumeration denoting the RX, TX type of the resource.\n-\t * This enumeration is used for resources that are similar for both\n-\t * TX and RX paths of the chip.\n+\t * When this bit is '1', the VNIC is configured to\n+\t * use regular placement algorithm.\n \t */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_FLAGS_PATH     UINT32_C(0x1)\n-\t/* tx path */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_FLAGS_PATH_TX \\\n-\t\tUINT32_C(0x0)\n-\t/* rx path */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_FLAGS_PATH_RX \\\n-\t\tUINT32_C(0x1)\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_FLAGS_PATH_LAST \\\n-\t\tHWRM_CFA_METER_PROFILE_ALLOC_INPUT_FLAGS_PATH_RX\n-\t/* The meter algorithm type. */\n-\tuint8_t\tmeter_type;\n-\t/* RFC 2697 (srTCM) */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_METER_TYPE_RFC2697 \\\n-\t\tUINT32_C(0x0)\n-\t/* RFC 2698 (trTCM) */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_METER_TYPE_RFC2698 \\\n+\t#define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_REGULAR_PLACEMENT \\\n \t\tUINT32_C(0x1)\n-\t/* RFC 4115 (trTCM) */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_METER_TYPE_RFC4115 \\\n+\t/*\n+\t * When this bit is '1', the VNIC is configured to\n+\t * use the jumbo placement algorithm.\n+\t */\n+\t#define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_JUMBO_PLACEMENT \\\n \t\tUINT32_C(0x2)\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_METER_TYPE_LAST \\\n-\t\tHWRM_CFA_METER_PROFILE_ALLOC_INPUT_METER_TYPE_RFC4115\n \t/*\n-\t * This field is reserved for the future use.\n-\t * It shall be set to 0.\n+\t * When this bit is '1', the VNIC is configured\n+\t * to enable Header-Data split for IPv4 packets.\n \t */\n-\tuint16_t\treserved1;\n+\t#define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_HDS_IPV4 \\\n+\t\tUINT32_C(0x4)\n \t/*\n-\t * This field is reserved for the future use.\n-\t * It shall be set to 0.\n+\t * When this bit is '1', the VNIC is configured\n+\t * to enable Header-Data split for IPv6 packets.\n \t */\n-\tuint32_t\treserved2;\n-\t/* A meter rate specified in bytes-per-second. */\n-\tuint32_t\tcommit_rate;\n-\t/* The bandwidth value. */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_BW_VALUE_MASK \\\n-\t\tUINT32_C(0xfffffff)\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_BW_VALUE_SFT \\\n-\t\t0\n-\t/* The granularity of the value (bits or bytes). */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_SCALE \\\n-\t\tUINT32_C(0x10000000)\n-\t/* Value is in bits. */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_SCALE_BITS \\\n-\t\t(UINT32_C(0x0) << 28)\n-\t/* Value is in bytes. */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_SCALE_BYTES \\\n-\t\t(UINT32_C(0x1) << 28)\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_SCALE_LAST \\\n-\t\tHWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_SCALE_BYTES\n-\t/* bw_value_unit is 3 b */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_BW_VALUE_UNIT_MASK \\\n-\t\tUINT32_C(0xe0000000)\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_BW_VALUE_UNIT_SFT \\\n-\t\t29\n-\t/* Value is in Mb or MB (base 10). */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_BW_VALUE_UNIT_MEGA \\\n-\t\t(UINT32_C(0x0) << 29)\n-\t/* Value is in Kb or KB (base 10). */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_BW_VALUE_UNIT_KILO \\\n-\t\t(UINT32_C(0x2) << 29)\n-\t/* Value is in bits or bytes. */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_BW_VALUE_UNIT_BASE \\\n-\t\t(UINT32_C(0x4) << 29)\n-\t/* Value is in Gb or GB (base 10). */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_BW_VALUE_UNIT_GIGA \\\n-\t\t(UINT32_C(0x6) << 29)\n-\t/* Value is in 1/100th of a percentage of total bandwidth. */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_BW_VALUE_UNIT_PERCENT1_100 \\\n-\t\t(UINT32_C(0x1) << 29)\n-\t/* Invalid unit */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_BW_VALUE_UNIT_INVALID \\\n-\t\t(UINT32_C(0x7) << 29)\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_BW_VALUE_UNIT_LAST \\\n-\t\tHWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_RATE_BW_VALUE_UNIT_INVALID\n-\t/* A meter burst size specified in bytes. */\n-\tuint32_t\tcommit_burst;\n-\t/* The bandwidth value. */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_BW_VALUE_MASK \\\n-\t\tUINT32_C(0xfffffff)\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_BW_VALUE_SFT \\\n-\t\t0\n-\t/* The granularity of the value (bits or bytes). */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_SCALE \\\n-\t\tUINT32_C(0x10000000)\n-\t/* Value is in bits. */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_SCALE_BITS \\\n-\t\t(UINT32_C(0x0) << 28)\n-\t/* Value is in bytes. */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_SCALE_BYTES \\\n-\t\t(UINT32_C(0x1) << 28)\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_SCALE_LAST \\\n-\t\tHWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_SCALE_BYTES\n-\t/* bw_value_unit is 3 b */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_BW_VALUE_UNIT_MASK \\\n-\t\tUINT32_C(0xe0000000)\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_BW_VALUE_UNIT_SFT \\\n-\t\t29\n-\t/* Value is in Mb or MB (base 10). */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_BW_VALUE_UNIT_MEGA \\\n-\t\t(UINT32_C(0x0) << 29)\n-\t/* Value is in Kb or KB (base 10). */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_BW_VALUE_UNIT_KILO \\\n-\t\t(UINT32_C(0x2) << 29)\n-\t/* Value is in bits or bytes. */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_BW_VALUE_UNIT_BASE \\\n-\t\t(UINT32_C(0x4) << 29)\n-\t/* Value is in Gb or GB (base 10). */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_BW_VALUE_UNIT_GIGA \\\n-\t\t(UINT32_C(0x6) << 29)\n-\t/* Value is in 1/100th of a percentage of total bandwidth. */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_BW_VALUE_UNIT_PERCENT1_100 \\\n-\t\t(UINT32_C(0x1) << 29)\n-\t/* Invalid unit */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_BW_VALUE_UNIT_INVALID \\\n-\t\t(UINT32_C(0x7) << 29)\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_BW_VALUE_UNIT_LAST \\\n-\t\tHWRM_CFA_METER_PROFILE_ALLOC_INPUT_COMMIT_BURST_BW_VALUE_UNIT_INVALID\n-\t/* A meter rate specified in bytes-per-second. */\n-\tuint32_t\texcess_peak_rate;\n-\t/* The bandwidth value. */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_BW_VALUE_MASK \\\n-\t\tUINT32_C(0xfffffff)\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_BW_VALUE_SFT \\\n-\t\t0\n-\t/* The granularity of the value (bits or bytes). */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_SCALE \\\n-\t\tUINT32_C(0x10000000)\n-\t/* Value is in bits. */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_SCALE_BITS \\\n-\t\t(UINT32_C(0x0) << 28)\n-\t/* Value is in bytes. */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_SCALE_BYTES \\\n-\t\t(UINT32_C(0x1) << 28)\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_SCALE_LAST \\\n-\t\tHWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_SCALE_BYTES\n-\t/* bw_value_unit is 3 b */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_MASK \\\n-\t\tUINT32_C(0xe0000000)\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_SFT \\\n-\t\t29\n-\t/* Value is in Mb or MB (base 10). */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_MEGA \\\n-\t\t(UINT32_C(0x0) << 29)\n-\t/* Value is in Kb or KB (base 10). */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_KILO \\\n-\t\t(UINT32_C(0x2) << 29)\n-\t/* Value is in bits or bytes. */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_BASE \\\n-\t\t(UINT32_C(0x4) << 29)\n-\t/* Value is in Gb or GB (base 10). */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_GIGA \\\n-\t\t(UINT32_C(0x6) << 29)\n-\t/* Value is in 1/100th of a percentage of total bandwidth. */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_PERCENT1_100 \\\n-\t\t(UINT32_C(0x1) << 29)\n-\t/* Invalid unit */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_INVALID \\\n-\t\t(UINT32_C(0x7) << 29)\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_LAST \\\n-\t\tHWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_INVALID\n-\t/* A meter burst size specified in bytes. */\n-\tuint32_t\texcess_peak_burst;\n-\t/* The bandwidth value. */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_BW_VALUE_MASK \\\n-\t\tUINT32_C(0xfffffff)\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_BW_VALUE_SFT \\\n-\t\t0\n-\t/* The granularity of the value (bits or bytes). */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_SCALE \\\n-\t\tUINT32_C(0x10000000)\n-\t/* Value is in bits. */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_SCALE_BITS \\\n-\t\t(UINT32_C(0x0) << 28)\n-\t/* Value is in bytes. */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_SCALE_BYTES \\\n-\t\t(UINT32_C(0x1) << 28)\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_SCALE_LAST \\\n-\t\tHWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_SCALE_BYTES\n-\t/* bw_value_unit is 3 b */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_MASK \\\n-\t\tUINT32_C(0xe0000000)\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_SFT \\\n-\t\t29\n-\t/* Value is in Mb or MB (base 10). */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_MEGA \\\n-\t\t(UINT32_C(0x0) << 29)\n-\t/* Value is in Kb or KB (base 10). */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_KILO \\\n-\t\t(UINT32_C(0x2) << 29)\n-\t/* Value is in bits or bytes. */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_BASE \\\n-\t\t(UINT32_C(0x4) << 29)\n-\t/* Value is in Gb or GB (base 10). */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_GIGA \\\n-\t\t(UINT32_C(0x6) << 29)\n-\t/* Value is in 1/100th of a percentage of total bandwidth. */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_PERCENT1_100 \\\n-\t\t(UINT32_C(0x1) << 29)\n-\t/* Invalid unit */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_INVALID \\\n-\t\t(UINT32_C(0x7) << 29)\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_LAST \\\n-\t\tHWRM_CFA_METER_PROFILE_ALLOC_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_INVALID\n+\t#define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_HDS_IPV6 \\\n+\t\tUINT32_C(0x8)\n+\t/*\n+\t * When this bit is '1', the VNIC is configured\n+\t * to enable Header-Data split for FCoE packets.\n+\t */\n+\t#define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_HDS_FCOE \\\n+\t\tUINT32_C(0x10)\n+\t/*\n+\t * When this bit is '1', the VNIC is configured\n+\t * to enable Header-Data split for RoCE packets.\n+\t */\n+\t#define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_HDS_ROCE \\\n+\t\tUINT32_C(0x20)\n+\t/*\n+\t * When this bit is '1', the VNIC is configured\n+\t * to be the default VNIC of the requesting function.\n+\t */\n+\t#define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_DFLT_VNIC \\\n+\t\tUINT32_C(0x40)\n+\t/*\n+\t * When jumbo placement algorithm is enabled, this value\n+\t * is used to determine the threshold for jumbo placement.\n+\t * Packets with length larger than this value will be\n+\t * placed according to the jumbo placement algorithm.\n+\t */\n+\tuint16_t\tjumbo_thresh;\n+\t/*\n+\t * This value is used to determine the offset into\n+\t * packet buffer where the split data (payload) will be\n+\t * placed according to one of of HDS placement algorithm.\n+\t *\n+\t * The lengths of packet buffers provided for split data\n+\t * shall be larger than this value.\n+\t */\n+\tuint16_t\thds_offset;\n+\t/*\n+\t * When one of the HDS placement algorithm is enabled, this\n+\t * value is used to determine the threshold for HDS\n+\t * placement.\n+\t * Packets with length larger than this value will be\n+\t * placed according to the HDS placement algorithm.\n+\t * This value shall be in multiple of 4 bytes.\n+\t */\n+\tuint16_t\thds_threshold;\n+\tuint8_t\tunused_0[5];\n+\t/*\n+\t * This field is used in Output records to indicate that the output\n+\t * is completely written to RAM.  This field should be read as '1'\n+\t * to indicate that the output has been completely written.\n+\t * When writing a command completion or response to an internal processor,\n+\t * the order of writes has to be such that this field is written last.\n+\t */\n+\tuint8_t\tvalid;\n+} __attribute__((packed));\n+\n+/**********************************\n+ * hwrm_vnic_rss_cos_lb_ctx_alloc *\n+ **********************************/\n+\n+\n+/* hwrm_vnic_rss_cos_lb_ctx_alloc_input (size:128b/16B) */\n+struct hwrm_vnic_rss_cos_lb_ctx_alloc_input {\n+\t/* The HWRM command request type. */\n+\tuint16_t\treq_type;\n+\t/*\n+\t * The completion ring to send the completion event on. This should\n+\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n+\t */\n+\tuint16_t\tcmpl_ring;\n+\t/*\n+\t * The sequence ID is used by the driver for tracking multiple\n+\t * commands. This ID is treated as opaque data by the firmware and\n+\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n+\t */\n+\tuint16_t\tseq_id;\n+\t/*\n+\t * The target ID of the command:\n+\t * * 0x0-0xFFF8 - The function ID\n+\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n+\t * * 0xFFFF - HWRM\n+\t */\n+\tuint16_t\ttarget_id;\n+\t/*\n+\t * A physical address pointer pointing to a host buffer that the\n+\t * command's response data will be written. This can be either a host\n+\t * physical address (HPA) or a guest physical address (GPA) and must\n+\t * point to a physically contiguous block of memory.\n+\t */\n+\tuint64_t\tresp_addr;\n } __attribute__((packed));\n \n-/* hwrm_cfa_meter_profile_alloc_output (size:128b/16B) */\n-struct hwrm_cfa_meter_profile_alloc_output {\n+/* hwrm_vnic_rss_cos_lb_ctx_alloc_output (size:128b/16B) */\n+struct hwrm_vnic_rss_cos_lb_ctx_alloc_output {\n \t/* The specific error status for the command. */\n \tuint16_t\terror_code;\n \t/* The HWRM command request type. */\n@@ -23065,16 +16728,8 @@ struct hwrm_cfa_meter_profile_alloc_output {\n \tuint16_t\tseq_id;\n \t/* The length of the response data in number of bytes. */\n \tuint16_t\tresp_len;\n-\t/* This value identifies a meter profile in CFA. */\n-\tuint16_t\tmeter_profile_id;\n-\t/*\n-\t * A value of 0xfff is considered invalid and implies the\n-\t * profile is not configured.\n-\t */\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_OUTPUT_METER_PROFILE_ID_INVALID \\\n-\t\tUINT32_C(0xffff)\n-\t#define HWRM_CFA_METER_PROFILE_ALLOC_OUTPUT_METER_PROFILE_ID_LAST \\\n-\t\tHWRM_CFA_METER_PROFILE_ALLOC_OUTPUT_METER_PROFILE_ID_INVALID\n+\t/* rss_cos_lb_ctx_id is 16 b */\n+\tuint16_t\trss_cos_lb_ctx_id;\n \tuint8_t\tunused_0[5];\n \t/*\n \t * This field is used in Output records to indicate that the output\n@@ -23086,13 +16741,13 @@ struct hwrm_cfa_meter_profile_alloc_output {\n \tuint8_t\tvalid;\n } __attribute__((packed));\n \n-/*******************************\n- * hwrm_cfa_meter_profile_free *\n- *******************************/\n+/*********************************\n+ * hwrm_vnic_rss_cos_lb_ctx_free *\n+ *********************************/\n \n \n-/* hwrm_cfa_meter_profile_free_input (size:192b/24B) */\n-struct hwrm_cfa_meter_profile_free_input {\n+/* hwrm_vnic_rss_cos_lb_ctx_free_input (size:192b/24B) */\n+struct hwrm_vnic_rss_cos_lb_ctx_free_input {\n \t/* The HWRM command request type. */\n \tuint16_t\treq_type;\n \t/*\n@@ -23120,37 +16775,13 @@ struct hwrm_cfa_meter_profile_free_input {\n \t * point to a physically contiguous block of memory.\n \t */\n \tuint64_t\tresp_addr;\n-\tuint8_t\tflags;\n-\t/*\n-\t * Enumeration denoting the RX, TX type of the resource.\n-\t * This enumeration is used for resources that are similar for both\n-\t * TX and RX paths of the chip.\n-\t */\n-\t#define HWRM_CFA_METER_PROFILE_FREE_INPUT_FLAGS_PATH     UINT32_C(0x1)\n-\t/* tx path */\n-\t#define HWRM_CFA_METER_PROFILE_FREE_INPUT_FLAGS_PATH_TX \\\n-\t\tUINT32_C(0x0)\n-\t/* rx path */\n-\t#define HWRM_CFA_METER_PROFILE_FREE_INPUT_FLAGS_PATH_RX \\\n-\t\tUINT32_C(0x1)\n-\t#define HWRM_CFA_METER_PROFILE_FREE_INPUT_FLAGS_PATH_LAST \\\n-\t\tHWRM_CFA_METER_PROFILE_FREE_INPUT_FLAGS_PATH_RX\n-\tuint8_t\tunused_0;\n-\t/* This value identifies a meter profile in CFA. */\n-\tuint16_t\tmeter_profile_id;\n-\t/*\n-\t * A value of 0xfff is considered invalid and implies the\n-\t * profile is not configured.\n-\t */\n-\t#define HWRM_CFA_METER_PROFILE_FREE_INPUT_METER_PROFILE_ID_INVALID \\\n-\t\tUINT32_C(0xffff)\n-\t#define HWRM_CFA_METER_PROFILE_FREE_INPUT_METER_PROFILE_ID_LAST \\\n-\t\tHWRM_CFA_METER_PROFILE_FREE_INPUT_METER_PROFILE_ID_INVALID\n-\tuint8_t\tunused_1[4];\n+\t/* rss_cos_lb_ctx_id is 16 b */\n+\tuint16_t\trss_cos_lb_ctx_id;\n+\tuint8_t\tunused_0[6];\n } __attribute__((packed));\n \n-/* hwrm_cfa_meter_profile_free_output (size:128b/16B) */\n-struct hwrm_cfa_meter_profile_free_output {\n+/* hwrm_vnic_rss_cos_lb_ctx_free_output (size:128b/16B) */\n+struct hwrm_vnic_rss_cos_lb_ctx_free_output {\n \t/* The specific error status for the command. */\n \tuint16_t\terror_code;\n \t/* The HWRM command request type. */\n@@ -23167,260 +16798,323 @@ struct hwrm_cfa_meter_profile_free_output {\n \t * When writing a command completion or response to an internal processor,\n \t * the order of writes has to be such that this field is written last.\n \t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/******************************\n- * hwrm_cfa_meter_profile_cfg *\n- ******************************/\n-\n-\n-/* hwrm_cfa_meter_profile_cfg_input (size:320b/40B) */\n-struct hwrm_cfa_meter_profile_cfg_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n+\tuint8_t\tvalid;\n+} __attribute__((packed));\n+\n+/*******************\n+ * hwrm_ring_alloc *\n+ *******************/\n+\n+\n+/* hwrm_ring_alloc_input (size:704b/88B) */\n+struct hwrm_ring_alloc_input {\n+\t/* The HWRM command request type. */\n+\tuint16_t\treq_type;\n+\t/*\n+\t * The completion ring to send the completion event on. This should\n+\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n+\t */\n+\tuint16_t\tcmpl_ring;\n+\t/*\n+\t * The sequence ID is used by the driver for tracking multiple\n+\t * commands. This ID is treated as opaque data by the firmware and\n+\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n+\t */\n+\tuint16_t\tseq_id;\n+\t/*\n+\t * The target ID of the command:\n+\t * * 0x0-0xFFF8 - The function ID\n+\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n+\t * * 0xFFFF - HWRM\n+\t */\n+\tuint16_t\ttarget_id;\n+\t/*\n+\t * A physical address pointer pointing to a host buffer that the\n+\t * command's response data will be written. This can be either a host\n+\t * physical address (HPA) or a guest physical address (GPA) and must\n+\t * point to a physically contiguous block of memory.\n+\t */\n+\tuint64_t\tresp_addr;\n+\tuint32_t\tenables;\n+\t/*\n+\t * This bit must be '1' for the ring_arb_cfg field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_RING_ALLOC_INPUT_ENABLES_RING_ARB_CFG \\\n+\t\tUINT32_C(0x2)\n+\t/*\n+\t * This bit must be '1' for the stat_ctx_id_valid field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_RING_ALLOC_INPUT_ENABLES_STAT_CTX_ID_VALID \\\n+\t\tUINT32_C(0x8)\n+\t/*\n+\t * This bit must be '1' for the max_bw_valid field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_RING_ALLOC_INPUT_ENABLES_MAX_BW_VALID \\\n+\t\tUINT32_C(0x20)\n+\t/*\n+\t * This bit must be '1' for the rx_ring_id field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_RING_ALLOC_INPUT_ENABLES_RX_RING_ID_VALID \\\n+\t\tUINT32_C(0x40)\n+\t/*\n+\t * This bit must be '1' for the nq_ring_id field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_RING_ALLOC_INPUT_ENABLES_NQ_RING_ID_VALID \\\n+\t\tUINT32_C(0x80)\n+\t/*\n+\t * This bit must be '1' for the rx_buf_size field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_RING_ALLOC_INPUT_ENABLES_RX_BUF_SIZE_VALID \\\n+\t\tUINT32_C(0x100)\n+\t/* Ring Type. */\n+\tuint8_t\tring_type;\n+\t/* L2 Completion Ring (CR) */\n+\t#define HWRM_RING_ALLOC_INPUT_RING_TYPE_L2_CMPL   UINT32_C(0x0)\n+\t/* TX Ring (TR) */\n+\t#define HWRM_RING_ALLOC_INPUT_RING_TYPE_TX        UINT32_C(0x1)\n+\t/* RX Ring (RR) */\n+\t#define HWRM_RING_ALLOC_INPUT_RING_TYPE_RX        UINT32_C(0x2)\n+\t/* RoCE Notification Completion Ring (ROCE_CR) */\n+\t#define HWRM_RING_ALLOC_INPUT_RING_TYPE_ROCE_CMPL UINT32_C(0x3)\n+\t/* RX Aggregation Ring */\n+\t#define HWRM_RING_ALLOC_INPUT_RING_TYPE_RX_AGG    UINT32_C(0x4)\n+\t/* Notification Queue */\n+\t#define HWRM_RING_ALLOC_INPUT_RING_TYPE_NQ        UINT32_C(0x5)\n+\t#define HWRM_RING_ALLOC_INPUT_RING_TYPE_LAST \\\n+\t\tHWRM_RING_ALLOC_INPUT_RING_TYPE_NQ\n+\tuint8_t\tunused_0;\n+\t/* Ring allocation flags. */\n+\tuint16_t\tflags;\n+\t/*\n+\t * For Rx rings, the incoming packet data can be placed at either\n+\t * a 0B or 2B offset from the start of the Rx packet buffer. When\n+\t * '1', the received packet will be padded with 2B of zeros at the\n+\t * front of the packet. Note that this flag is only used for\n+\t * Rx rings and is ignored for all other rings included Rx\n+\t * Aggregation rings.\n+\t */\n+\t#define HWRM_RING_ALLOC_INPUT_FLAGS_RX_SOP_PAD     UINT32_C(0x1)\n+\t/*\n+\t * This value is a pointer to the page table for the\n+\t * Ring.\n+\t */\n+\tuint64_t\tpage_tbl_addr;\n+\t/* First Byte Offset of the first entry in the first page. */\n+\tuint32_t\tfbo;\n+\t/*\n+\t * Actual page size in 2^page_size. The supported range is increments\n+\t * in powers of 2 from 16 bytes to 1GB.\n+\t * - 4 = 16 B\n+\t *     Page size is 16 B.\n+\t * - 12 = 4 KB\n+\t *     Page size is 4 KB.\n+\t * - 13 = 8 KB\n+\t *     Page size is 8 KB.\n+\t * - 16 = 64 KB\n+\t *     Page size is 64 KB.\n+\t * - 21 = 2 MB\n+\t *     Page size is 2 MB.\n+\t * - 22 = 4 MB\n+\t *     Page size is 4 MB.\n+\t * - 30 = 1 GB\n+\t *     Page size is 1 GB.\n+\t */\n+\tuint8_t\tpage_size;\n+\t/*\n+\t * This value indicates the depth of page table.\n+\t * For this version of the specification, value other than 0 or\n+\t * 1 shall be considered as an invalid value.\n+\t * When the page_tbl_depth = 0, then it is treated as a\n+\t * special case with the following.\n+\t * 1. FBO and page size fields are not valid.\n+\t * 2. page_tbl_addr is the physical address of the first\n+\t *    element of the ring.\n+\t */\n+\tuint8_t\tpage_tbl_depth;\n+\tuint8_t\tunused_1[2];\n+\t/*\n+\t * Number of 16B units in the ring.  Minimum size for\n+\t * a ring is 16 16B entries.\n+\t */\n+\tuint32_t\tlength;\n+\t/*\n+\t * Logical ring number for the ring to be allocated.\n+\t * This value determines the position in the doorbell\n+\t * area where the update to the ring will be made.\n+\t *\n+\t * For completion rings, this value is also the MSI-X\n+\t * vector number for the function the completion ring is\n+\t * associated with.\n+\t */\n+\tuint16_t\tlogical_id;\n+\t/*\n+\t * This field is used only when ring_type is a TX ring.\n+\t * This value indicates what completion ring the TX ring\n+\t * is associated with.\n+\t */\n+\tuint16_t\tcmpl_ring_id;\n+\t/*\n+\t * This field is used only when ring_type is a TX ring.\n+\t * This value indicates what CoS queue the TX ring\n+\t * is associated with.\n+\t */\n+\tuint16_t\tqueue_id;\n \t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n+\t * When allocating a Rx ring or Rx aggregation ring, this field\n+\t * specifies the size of the buffer descriptors posted to the ring.\n \t */\n-\tuint16_t\tcmpl_ring;\n+\tuint16_t\trx_buf_size;\n \t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n+\t * When allocating an Rx aggregation ring, this field\n+\t * specifies the associated Rx ring ID.\n \t */\n-\tuint16_t\tseq_id;\n+\tuint16_t\trx_ring_id;\n \t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n+\t * When allocating a completion ring, this field\n+\t * specifies the associated NQ ring ID.\n \t */\n-\tuint16_t\ttarget_id;\n+\tuint16_t\tnq_ring_id;\n \t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n+\t * This field is used only when ring_type is a TX ring.\n+\t * This field is used to configure arbitration related\n+\t * parameters for a TX ring.\n \t */\n-\tuint64_t\tresp_addr;\n-\tuint8_t\tflags;\n+\tuint16_t\tring_arb_cfg;\n+\t/* Arbitration policy used for the ring. */\n+\t#define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_MASK \\\n+\t\tUINT32_C(0xf)\n+\t#define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_SFT       0\n \t/*\n-\t * Enumeration denoting the RX, TX type of the resource.\n-\t * This enumeration is used for resources that are similar for both\n-\t * TX and RX paths of the chip.\n+\t * Use strict priority for the TX ring.\n+\t * Priority value is specified in arb_policy_param\n \t */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_FLAGS_PATH     UINT32_C(0x1)\n-\t/* tx path */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_FLAGS_PATH_TX    UINT32_C(0x0)\n-\t/* rx path */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_FLAGS_PATH_RX    UINT32_C(0x1)\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_FLAGS_PATH_LAST \\\n-\t\tHWRM_CFA_METER_PROFILE_CFG_INPUT_FLAGS_PATH_RX\n-\t/* The meter algorithm type. */\n-\tuint8_t\tmeter_type;\n-\t/* RFC 2697 (srTCM) */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_METER_TYPE_RFC2697 \\\n-\t\tUINT32_C(0x0)\n-\t/* RFC 2698 (trTCM) */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_METER_TYPE_RFC2698 \\\n+\t#define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_SP \\\n \t\tUINT32_C(0x1)\n-\t/* RFC 4115 (trTCM) */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_METER_TYPE_RFC4115 \\\n+\t/*\n+\t * Use weighted fair queue arbitration for the TX ring.\n+\t * Weight is specified in arb_policy_param\n+\t */\n+\t#define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_WFQ \\\n \t\tUINT32_C(0x2)\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_METER_TYPE_LAST \\\n-\t\tHWRM_CFA_METER_PROFILE_CFG_INPUT_METER_TYPE_RFC4115\n-\t/* This value identifies a meter profile in CFA. */\n-\tuint16_t\tmeter_profile_id;\n+\t#define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_LAST \\\n+\t\tHWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_WFQ\n+\t/* Reserved field. */\n+\t#define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_RSVD_MASK \\\n+\t\tUINT32_C(0xf0)\n+\t#define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_RSVD_SFT             4\n \t/*\n-\t * A value of 0xfff is considered invalid and implies the\n-\t * profile is not configured.\n+\t * Arbitration policy specific parameter.\n+\t * # For strict priority arbitration policy, this field\n+\t * represents a priority value. If set to 0, then the priority\n+\t * is not specified and the HWRM is allowed to select\n+\t * any priority for this TX ring.\n+\t * # For weighted fair queue arbitration policy, this field\n+\t * represents a weight value. If set to 0, then the weight\n+\t * is not specified and the HWRM is allowed to select\n+\t * any weight for this TX ring.\n \t */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_METER_PROFILE_ID_INVALID \\\n-\t\tUINT32_C(0xffff)\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_METER_PROFILE_ID_LAST \\\n-\t\tHWRM_CFA_METER_PROFILE_CFG_INPUT_METER_PROFILE_ID_INVALID\n+\t#define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_PARAM_MASK \\\n+\t\tUINT32_C(0xff00)\n+\t#define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_PARAM_SFT 8\n+\tuint16_t\tunused_3;\n \t/*\n \t * This field is reserved for the future use.\n \t * It shall be set to 0.\n \t */\n-\tuint32_t\treserved;\n-\t/* A meter rate specified in bytes-per-second. */\n-\tuint32_t\tcommit_rate;\n-\t/* The bandwidth value. */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_BW_VALUE_MASK \\\n-\t\tUINT32_C(0xfffffff)\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_BW_VALUE_SFT \\\n-\t\t0\n-\t/* The granularity of the value (bits or bytes). */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_SCALE \\\n-\t\tUINT32_C(0x10000000)\n-\t/* Value is in bits. */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_SCALE_BITS \\\n-\t\t(UINT32_C(0x0) << 28)\n-\t/* Value is in bytes. */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_SCALE_BYTES \\\n-\t\t(UINT32_C(0x1) << 28)\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_SCALE_LAST \\\n-\t\tHWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_SCALE_BYTES\n-\t/* bw_value_unit is 3 b */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_BW_VALUE_UNIT_MASK \\\n-\t\tUINT32_C(0xe0000000)\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_BW_VALUE_UNIT_SFT \\\n-\t\t29\n-\t/* Value is in Mb or MB (base 10). */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_BW_VALUE_UNIT_MEGA \\\n-\t\t(UINT32_C(0x0) << 29)\n-\t/* Value is in Kb or KB (base 10). */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_BW_VALUE_UNIT_KILO \\\n-\t\t(UINT32_C(0x2) << 29)\n-\t/* Value is in bits or bytes. */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_BW_VALUE_UNIT_BASE \\\n-\t\t(UINT32_C(0x4) << 29)\n-\t/* Value is in Gb or GB (base 10). */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_BW_VALUE_UNIT_GIGA \\\n-\t\t(UINT32_C(0x6) << 29)\n-\t/* Value is in 1/100th of a percentage of total bandwidth. */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_BW_VALUE_UNIT_PERCENT1_100 \\\n-\t\t(UINT32_C(0x1) << 29)\n-\t/* Invalid unit */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_BW_VALUE_UNIT_INVALID \\\n-\t\t(UINT32_C(0x7) << 29)\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_BW_VALUE_UNIT_LAST \\\n-\t\tHWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_RATE_BW_VALUE_UNIT_INVALID\n-\t/* A meter burst size specified in bytes. */\n-\tuint32_t\tcommit_burst;\n-\t/* The bandwidth value. */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_BW_VALUE_MASK \\\n-\t\tUINT32_C(0xfffffff)\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_BW_VALUE_SFT \\\n-\t\t0\n-\t/* The granularity of the value (bits or bytes). */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_SCALE \\\n-\t\tUINT32_C(0x10000000)\n-\t/* Value is in bits. */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_SCALE_BITS \\\n-\t\t(UINT32_C(0x0) << 28)\n-\t/* Value is in bytes. */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_SCALE_BYTES \\\n-\t\t(UINT32_C(0x1) << 28)\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_SCALE_LAST \\\n-\t\tHWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_SCALE_BYTES\n-\t/* bw_value_unit is 3 b */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_BW_VALUE_UNIT_MASK \\\n-\t\tUINT32_C(0xe0000000)\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_BW_VALUE_UNIT_SFT \\\n-\t\t29\n-\t/* Value is in Mb or MB (base 10). */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_BW_VALUE_UNIT_MEGA \\\n-\t\t(UINT32_C(0x0) << 29)\n-\t/* Value is in Kb or KB (base 10). */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_BW_VALUE_UNIT_KILO \\\n-\t\t(UINT32_C(0x2) << 29)\n-\t/* Value is in bits or bytes. */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_BW_VALUE_UNIT_BASE \\\n-\t\t(UINT32_C(0x4) << 29)\n-\t/* Value is in Gb or GB (base 10). */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_BW_VALUE_UNIT_GIGA \\\n-\t\t(UINT32_C(0x6) << 29)\n-\t/* Value is in 1/100th of a percentage of total bandwidth. */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_BW_VALUE_UNIT_PERCENT1_100 \\\n-\t\t(UINT32_C(0x1) << 29)\n-\t/* Invalid unit */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_BW_VALUE_UNIT_INVALID \\\n-\t\t(UINT32_C(0x7) << 29)\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_BW_VALUE_UNIT_LAST \\\n-\t\tHWRM_CFA_METER_PROFILE_CFG_INPUT_COMMIT_BURST_BW_VALUE_UNIT_INVALID\n-\t/* A meter rate specified in bytes-per-second. */\n-\tuint32_t\texcess_peak_rate;\n-\t/* The bandwidth value. */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_BW_VALUE_MASK \\\n-\t\tUINT32_C(0xfffffff)\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_BW_VALUE_SFT \\\n-\t\t0\n-\t/* The granularity of the value (bits or bytes). */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_SCALE \\\n-\t\tUINT32_C(0x10000000)\n-\t/* Value is in bits. */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_SCALE_BITS \\\n-\t\t(UINT32_C(0x0) << 28)\n-\t/* Value is in bytes. */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_SCALE_BYTES \\\n-\t\t(UINT32_C(0x1) << 28)\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_SCALE_LAST \\\n-\t\tHWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_SCALE_BYTES\n-\t/* bw_value_unit is 3 b */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_MASK \\\n-\t\tUINT32_C(0xe0000000)\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_SFT \\\n-\t\t29\n-\t/* Value is in Mb or MB (base 10). */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_MEGA \\\n-\t\t(UINT32_C(0x0) << 29)\n-\t/* Value is in Kb or KB (base 10). */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_KILO \\\n-\t\t(UINT32_C(0x2) << 29)\n-\t/* Value is in bits or bytes. */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_BASE \\\n-\t\t(UINT32_C(0x4) << 29)\n-\t/* Value is in Gb or GB (base 10). */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_GIGA \\\n-\t\t(UINT32_C(0x6) << 29)\n-\t/* Value is in 1/100th of a percentage of total bandwidth. */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_PERCENT1_100 \\\n-\t\t(UINT32_C(0x1) << 29)\n-\t/* Invalid unit */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_INVALID \\\n-\t\t(UINT32_C(0x7) << 29)\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_LAST \\\n-\t\tHWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_RATE_BW_VALUE_UNIT_INVALID\n-\t/* A meter burst size specified in bytes. */\n-\tuint32_t\texcess_peak_burst;\n+\tuint32_t\treserved3;\n+\t/*\n+\t * This field is used only when ring_type is a TX ring.\n+\t * This input indicates what statistics context this ring\n+\t * should be associated with.\n+\t */\n+\tuint32_t\tstat_ctx_id;\n+\t/*\n+\t * This field is reserved for the future use.\n+\t * It shall be set to 0.\n+\t */\n+\tuint32_t\treserved4;\n+\t/*\n+\t * This field is used only when ring_type is a TX ring\n+\t * to specify maximum BW allocated to the TX ring.\n+\t * The HWRM will translate this value into byte counter and\n+\t * time interval used for this ring inside the device.\n+\t */\n+\tuint32_t\tmax_bw;\n \t/* The bandwidth value. */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_BW_VALUE_MASK \\\n+\t#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_MASK \\\n \t\tUINT32_C(0xfffffff)\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_BW_VALUE_SFT \\\n-\t\t0\n+\t#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_SFT              0\n \t/* The granularity of the value (bits or bytes). */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_SCALE \\\n+\t#define HWRM_RING_ALLOC_INPUT_MAX_BW_SCALE \\\n \t\tUINT32_C(0x10000000)\n \t/* Value is in bits. */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_SCALE_BITS \\\n+\t#define HWRM_RING_ALLOC_INPUT_MAX_BW_SCALE_BITS \\\n \t\t(UINT32_C(0x0) << 28)\n \t/* Value is in bytes. */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_SCALE_BYTES \\\n+\t#define HWRM_RING_ALLOC_INPUT_MAX_BW_SCALE_BYTES \\\n \t\t(UINT32_C(0x1) << 28)\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_SCALE_LAST \\\n-\t\tHWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_SCALE_BYTES\n+\t#define HWRM_RING_ALLOC_INPUT_MAX_BW_SCALE_LAST \\\n+\t\tHWRM_RING_ALLOC_INPUT_MAX_BW_SCALE_BYTES\n \t/* bw_value_unit is 3 b */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_MASK \\\n+\t#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_MASK \\\n \t\tUINT32_C(0xe0000000)\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_SFT \\\n-\t\t29\n+\t#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_SFT         29\n \t/* Value is in Mb or MB (base 10). */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_MEGA \\\n+\t#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_MEGA \\\n \t\t(UINT32_C(0x0) << 29)\n \t/* Value is in Kb or KB (base 10). */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_KILO \\\n+\t#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_KILO \\\n \t\t(UINT32_C(0x2) << 29)\n \t/* Value is in bits or bytes. */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_BASE \\\n+\t#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_BASE \\\n \t\t(UINT32_C(0x4) << 29)\n \t/* Value is in Gb or GB (base 10). */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_GIGA \\\n+\t#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_GIGA \\\n \t\t(UINT32_C(0x6) << 29)\n \t/* Value is in 1/100th of a percentage of total bandwidth. */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_PERCENT1_100 \\\n+\t#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \\\n \t\t(UINT32_C(0x1) << 29)\n \t/* Invalid unit */\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_INVALID \\\n+\t#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_INVALID \\\n \t\t(UINT32_C(0x7) << 29)\n-\t#define HWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_LAST \\\n-\t\tHWRM_CFA_METER_PROFILE_CFG_INPUT_EXCESS_PEAK_BURST_BW_VALUE_UNIT_INVALID\n+\t#define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_LAST \\\n+\t\tHWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_INVALID\n+\t/*\n+\t * This field is used only when ring_type is a Completion ring.\n+\t * This value indicates what interrupt mode should be used\n+\t * on this completion ring.\n+\t * Note: In the legacy interrupt mode, no more than 16\n+\t * completion rings are allowed.\n+\t */\n+\tuint8_t\tint_mode;\n+\t/* Legacy INTA */\n+\t#define HWRM_RING_ALLOC_INPUT_INT_MODE_LEGACY UINT32_C(0x0)\n+\t/* Reserved */\n+\t#define HWRM_RING_ALLOC_INPUT_INT_MODE_RSVD   UINT32_C(0x1)\n+\t/* MSI-X */\n+\t#define HWRM_RING_ALLOC_INPUT_INT_MODE_MSIX   UINT32_C(0x2)\n+\t/* No Interrupt - Polled mode */\n+\t#define HWRM_RING_ALLOC_INPUT_INT_MODE_POLL   UINT32_C(0x3)\n+\t#define HWRM_RING_ALLOC_INPUT_INT_MODE_LAST \\\n+\t\tHWRM_RING_ALLOC_INPUT_INT_MODE_POLL\n+\tuint8_t\tunused_4[3];\n+\t/*\n+\t * The cq_handle is specified when allocating a completion ring. For\n+\t * devices that support NQs, this cq_handle will be included in the\n+\t * NQE to specify which CQ should be read to retrieve the completion\n+\t * record.\n+\t */\n+\tuint64_t\tcq_handle;\n } __attribute__((packed));\n \n-/* hwrm_cfa_meter_profile_cfg_output (size:128b/16B) */\n-struct hwrm_cfa_meter_profile_cfg_output {\n+/* hwrm_ring_alloc_output (size:128b/16B) */\n+struct hwrm_ring_alloc_output {\n \t/* The specific error status for the command. */\n \tuint16_t\terror_code;\n \t/* The HWRM command request type. */\n@@ -23429,7 +17123,14 @@ struct hwrm_cfa_meter_profile_cfg_output {\n \tuint16_t\tseq_id;\n \t/* The length of the response data in number of bytes. */\n \tuint16_t\tresp_len;\n-\tuint8_t\tunused_0[7];\n+\t/*\n+\t * Physical number of ring allocated.\n+\t * This value shall be unique for a ring type.\n+\t */\n+\tuint16_t\tring_id;\n+\t/* Logical number of ring allocated. */\n+\tuint16_t\tlogical_ring_id;\n+\tuint8_t\tunused_0[3];\n \t/*\n \t * This field is used in Output records to indicate that the output\n \t * is completely written to RAM.  This field should be read as '1'\n@@ -23440,13 +17141,13 @@ struct hwrm_cfa_meter_profile_cfg_output {\n \tuint8_t\tvalid;\n } __attribute__((packed));\n \n-/*********************************\n- * hwrm_cfa_meter_instance_alloc *\n- *********************************/\n+/******************\n+ * hwrm_ring_free *\n+ ******************/\n \n \n-/* hwrm_cfa_meter_instance_alloc_input (size:192b/24B) */\n-struct hwrm_cfa_meter_instance_alloc_input {\n+/* hwrm_ring_free_input (size:192b/24B) */\n+struct hwrm_ring_free_input {\n \t/* The HWRM command request type. */\n \tuint16_t\treq_type;\n \t/*\n@@ -23464,48 +17165,40 @@ struct hwrm_cfa_meter_instance_alloc_input {\n \t * The target ID of the command:\n \t * * 0x0-0xFFF8 - The function ID\n \t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\tuint8_t\tflags;\n-\t/*\n-\t * Enumeration denoting the RX, TX type of the resource.\n-\t * This enumeration is used for resources that are similar for both\n-\t * TX and RX paths of the chip.\n-\t */\n-\t#define HWRM_CFA_METER_INSTANCE_ALLOC_INPUT_FLAGS_PATH \\\n-\t\tUINT32_C(0x1)\n-\t/* tx path */\n-\t#define HWRM_CFA_METER_INSTANCE_ALLOC_INPUT_FLAGS_PATH_TX \\\n-\t\tUINT32_C(0x0)\n-\t/* rx path */\n-\t#define HWRM_CFA_METER_INSTANCE_ALLOC_INPUT_FLAGS_PATH_RX \\\n-\t\tUINT32_C(0x1)\n-\t#define HWRM_CFA_METER_INSTANCE_ALLOC_INPUT_FLAGS_PATH_LAST \\\n-\t\tHWRM_CFA_METER_INSTANCE_ALLOC_INPUT_FLAGS_PATH_RX\n-\tuint8_t\tunused_0;\n-\t/* This value identifies a meter profile in CFA. */\n-\tuint16_t\tmeter_profile_id;\n+\t * * 0xFFFF - HWRM\n+\t */\n+\tuint16_t\ttarget_id;\n \t/*\n-\t * A value of 0xfff is considered invalid and implies the\n-\t * profile is not configured.\n+\t * A physical address pointer pointing to a host buffer that the\n+\t * command's response data will be written. This can be either a host\n+\t * physical address (HPA) or a guest physical address (GPA) and must\n+\t * point to a physically contiguous block of memory.\n \t */\n-\t#define HWRM_CFA_METER_INSTANCE_ALLOC_INPUT_METER_PROFILE_ID_INVALID \\\n-\t\tUINT32_C(0xffff)\n-\t#define HWRM_CFA_METER_INSTANCE_ALLOC_INPUT_METER_PROFILE_ID_LAST \\\n-\t\tHWRM_CFA_METER_INSTANCE_ALLOC_INPUT_METER_PROFILE_ID_INVALID\n+\tuint64_t\tresp_addr;\n+\t/* Ring Type. */\n+\tuint8_t\tring_type;\n+\t/* L2 Completion Ring (CR) */\n+\t#define HWRM_RING_FREE_INPUT_RING_TYPE_L2_CMPL   UINT32_C(0x0)\n+\t/* TX Ring (TR) */\n+\t#define HWRM_RING_FREE_INPUT_RING_TYPE_TX        UINT32_C(0x1)\n+\t/* RX Ring (RR) */\n+\t#define HWRM_RING_FREE_INPUT_RING_TYPE_RX        UINT32_C(0x2)\n+\t/* RoCE Notification Completion Ring (ROCE_CR) */\n+\t#define HWRM_RING_FREE_INPUT_RING_TYPE_ROCE_CMPL UINT32_C(0x3)\n+\t/* RX Aggregation Ring */\n+\t#define HWRM_RING_FREE_INPUT_RING_TYPE_RX_AGG    UINT32_C(0x4)\n+\t/* Notification Queue */\n+\t#define HWRM_RING_FREE_INPUT_RING_TYPE_NQ        UINT32_C(0x5)\n+\t#define HWRM_RING_FREE_INPUT_RING_TYPE_LAST \\\n+\t\tHWRM_RING_FREE_INPUT_RING_TYPE_NQ\n+\tuint8_t\tunused_0;\n+\t/* Physical number of ring allocated. */\n+\tuint16_t\tring_id;\n \tuint8_t\tunused_1[4];\n } __attribute__((packed));\n \n-/* hwrm_cfa_meter_instance_alloc_output (size:128b/16B) */\n-struct hwrm_cfa_meter_instance_alloc_output {\n+/* hwrm_ring_free_output (size:128b/16B) */\n+struct hwrm_ring_free_output {\n \t/* The specific error status for the command. */\n \tuint16_t\terror_code;\n \t/* The HWRM command request type. */\n@@ -23514,17 +17207,7 @@ struct hwrm_cfa_meter_instance_alloc_output {\n \tuint16_t\tseq_id;\n \t/* The length of the response data in number of bytes. */\n \tuint16_t\tresp_len;\n-\t/* This value identifies a meter instance in CFA. */\n-\tuint16_t\tmeter_instance_id;\n-\t/*\n-\t * A value of 0xfff is considered invalid and implies the\n-\t * instance is not configured.\n-\t */\n-\t#define HWRM_CFA_METER_INSTANCE_ALLOC_OUTPUT_METER_INSTANCE_ID_INVALID \\\n-\t\tUINT32_C(0xffff)\n-\t#define HWRM_CFA_METER_INSTANCE_ALLOC_OUTPUT_METER_INSTANCE_ID_LAST \\\n-\t\tHWRM_CFA_METER_INSTANCE_ALLOC_OUTPUT_METER_INSTANCE_ID_INVALID\n-\tuint8_t\tunused_0[5];\n+\tuint8_t\tunused_0[7];\n \t/*\n \t * This field is used in Output records to indicate that the output\n \t * is completely written to RAM.  This field should be read as '1'\n@@ -23535,13 +17218,13 @@ struct hwrm_cfa_meter_instance_alloc_output {\n \tuint8_t\tvalid;\n } __attribute__((packed));\n \n-/********************************\n- * hwrm_cfa_meter_instance_free *\n- ********************************/\n+/*******************\n+ * hwrm_ring_reset *\n+ *******************/\n \n \n-/* hwrm_cfa_meter_instance_free_input (size:192b/24B) */\n-struct hwrm_cfa_meter_instance_free_input {\n+/* hwrm_ring_reset_input (size:192b/24B) */\n+struct hwrm_ring_reset_input {\n \t/* The HWRM command request type. */\n \tuint16_t\treq_type;\n \t/*\n@@ -23569,37 +17252,26 @@ struct hwrm_cfa_meter_instance_free_input {\n \t * point to a physically contiguous block of memory.\n \t */\n \tuint64_t\tresp_addr;\n-\tuint8_t\tflags;\n-\t/*\n-\t * Enumeration denoting the RX, TX type of the resource.\n-\t * This enumeration is used for resources that are similar for both\n-\t * TX and RX paths of the chip.\n-\t */\n-\t#define HWRM_CFA_METER_INSTANCE_FREE_INPUT_FLAGS_PATH     UINT32_C(0x1)\n-\t/* tx path */\n-\t#define HWRM_CFA_METER_INSTANCE_FREE_INPUT_FLAGS_PATH_TX \\\n-\t\tUINT32_C(0x0)\n-\t/* rx path */\n-\t#define HWRM_CFA_METER_INSTANCE_FREE_INPUT_FLAGS_PATH_RX \\\n-\t\tUINT32_C(0x1)\n-\t#define HWRM_CFA_METER_INSTANCE_FREE_INPUT_FLAGS_PATH_LAST \\\n-\t\tHWRM_CFA_METER_INSTANCE_FREE_INPUT_FLAGS_PATH_RX\n+\t/* Ring Type. */\n+\tuint8_t\tring_type;\n+\t/* L2 Completion Ring (CR) */\n+\t#define HWRM_RING_RESET_INPUT_RING_TYPE_L2_CMPL   UINT32_C(0x0)\n+\t/* TX Ring (TR) */\n+\t#define HWRM_RING_RESET_INPUT_RING_TYPE_TX        UINT32_C(0x1)\n+\t/* RX Ring (RR) */\n+\t#define HWRM_RING_RESET_INPUT_RING_TYPE_RX        UINT32_C(0x2)\n+\t/* RoCE Notification Completion Ring (ROCE_CR) */\n+\t#define HWRM_RING_RESET_INPUT_RING_TYPE_ROCE_CMPL UINT32_C(0x3)\n+\t#define HWRM_RING_RESET_INPUT_RING_TYPE_LAST \\\n+\t\tHWRM_RING_RESET_INPUT_RING_TYPE_ROCE_CMPL\n \tuint8_t\tunused_0;\n-\t/* This value identifies a meter instance in CFA. */\n-\tuint16_t\tmeter_instance_id;\n-\t/*\n-\t * A value of 0xfff is considered invalid and implies the\n-\t * instance is not configured.\n-\t */\n-\t#define HWRM_CFA_METER_INSTANCE_FREE_INPUT_METER_INSTANCE_ID_INVALID \\\n-\t\tUINT32_C(0xffff)\n-\t#define HWRM_CFA_METER_INSTANCE_FREE_INPUT_METER_INSTANCE_ID_LAST \\\n-\t\tHWRM_CFA_METER_INSTANCE_FREE_INPUT_METER_INSTANCE_ID_INVALID\n+\t/* Physical number of the ring. */\n+\tuint16_t\tring_id;\n \tuint8_t\tunused_1[4];\n } __attribute__((packed));\n \n-/* hwrm_cfa_meter_instance_free_output (size:128b/16B) */\n-struct hwrm_cfa_meter_instance_free_output {\n+/* hwrm_ring_reset_output (size:128b/16B) */\n+struct hwrm_ring_reset_output {\n \t/* The specific error status for the command. */\n \tuint16_t\terror_code;\n \t/* The HWRM command request type. */\n@@ -23619,13 +17291,13 @@ struct hwrm_cfa_meter_instance_free_output {\n \tuint8_t\tvalid;\n } __attribute__((packed));\n \n-/*******************************\n- * hwrm_cfa_decap_filter_alloc *\n- *******************************/\n+/*****************************************\n+ * hwrm_ring_cmpl_ring_cfg_aggint_params *\n+ *****************************************/\n \n \n-/* hwrm_cfa_decap_filter_alloc_input (size:832b/104B) */\n-struct hwrm_cfa_decap_filter_alloc_input {\n+/* hwrm_ring_cmpl_ring_cfg_aggint_params_input (size:320b/40B) */\n+struct hwrm_ring_cmpl_ring_cfg_aggint_params_input {\n \t/* The HWRM command request type. */\n \tuint16_t\treq_type;\n \t/*\n@@ -23653,266 +17325,187 @@ struct hwrm_cfa_decap_filter_alloc_input {\n \t * point to a physically contiguous block of memory.\n \t */\n \tuint64_t\tresp_addr;\n-\tuint32_t\tflags;\n-\t/* ovs_tunnel is 1 b */\n-\t#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_FLAGS_OVS_TUNNEL \\\n-\t\tUINT32_C(0x1)\n-\tuint32_t\tenables;\n+\t/* Physical number of completion ring. */\n+\tuint16_t\tring_id;\n+\tuint16_t\tflags;\n \t/*\n-\t * This bit must be '1' for the tunnel_type field to be\n-\t * configured.\n+\t * When this bit is set to '1', interrupt latency max\n+\t * timer is reset whenever a completion is received.\n \t */\n-\t#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_TUNNEL_TYPE \\\n+\t#define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_FLAGS_TIMER_RESET \\\n \t\tUINT32_C(0x1)\n \t/*\n-\t * This bit must be '1' for the tunnel_id field to be\n-\t * configured.\n+\t * When this bit is set to '1', ring idle mode\n+\t * aggregation will be enabled.\n \t */\n-\t#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_TUNNEL_ID \\\n+\t#define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_FLAGS_RING_IDLE \\\n \t\tUINT32_C(0x2)\n \t/*\n-\t * This bit must be '1' for the src_macaddr field to be\n-\t * configured.\n+\t * Set this flag to 1 when configuring parameters on a\n+\t * notification queue. Set this flag to 0 when configuring\n+\t * parameters on a completion queue.\n \t */\n-\t#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_SRC_MACADDR \\\n+\t#define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_FLAGS_IS_NQ \\\n \t\tUINT32_C(0x4)\n \t/*\n-\t * This bit must be '1' for the dst_macaddr field to be\n-\t * configured.\n-\t */\n-\t#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_DST_MACADDR \\\n-\t\tUINT32_C(0x8)\n-\t/*\n-\t * This bit must be '1' for the ovlan_vid field to be\n-\t * configured.\n+\t * Number of completions to aggregate before DMA\n+\t * during the normal mode.\n \t */\n-\t#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_OVLAN_VID \\\n-\t\tUINT32_C(0x10)\n+\tuint16_t\tnum_cmpl_dma_aggr;\n \t/*\n-\t * This bit must be '1' for the ivlan_vid field to be\n-\t * configured.\n+\t * Number of completions to aggregate before DMA\n+\t * during the interrupt mode.\n \t */\n-\t#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_IVLAN_VID \\\n-\t\tUINT32_C(0x20)\n+\tuint16_t\tnum_cmpl_dma_aggr_during_int;\n \t/*\n-\t * This bit must be '1' for the t_ovlan_vid field to be\n-\t * configured.\n+\t * Timer in unit of 80-nsec used to aggregate completions before\n+\t * DMA during the normal mode (not in interrupt mode).\n \t */\n-\t#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_T_OVLAN_VID \\\n-\t\tUINT32_C(0x40)\n+\tuint16_t\tcmpl_aggr_dma_tmr;\n \t/*\n-\t * This bit must be '1' for the t_ivlan_vid field to be\n-\t * configured.\n+\t * Timer in unit of 80-nsec used to aggregate completions before\n+\t * DMA during the interrupt mode.\n \t */\n-\t#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_T_IVLAN_VID \\\n-\t\tUINT32_C(0x80)\n+\tuint16_t\tcmpl_aggr_dma_tmr_during_int;\n+\t/* Minimum time (in unit of 80-nsec) between two interrupts. */\n+\tuint16_t\tint_lat_tmr_min;\n \t/*\n-\t * This bit must be '1' for the ethertype field to be\n-\t * configured.\n+\t * Maximum wait time (in unit of 80-nsec) spent aggregating\n+\t * cmpls before signaling the interrupt after the\n+\t * interrupt is enabled.\n \t */\n-\t#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_ETHERTYPE \\\n-\t\tUINT32_C(0x100)\n+\tuint16_t\tint_lat_tmr_max;\n \t/*\n-\t * This bit must be '1' for the src_ipaddr field to be\n-\t * configured.\n+\t * Minimum number of completions aggregated before signaling\n+\t * an interrupt.\n \t */\n-\t#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_SRC_IPADDR \\\n-\t\tUINT32_C(0x200)\n+\tuint16_t\tnum_cmpl_aggr_int;\n \t/*\n-\t * This bit must be '1' for the dst_ipaddr field to be\n-\t * configured.\n+\t * Bitfield that indicates which parameters are to be applied. Only\n+\t * required when configuring devices with notification queues, and\n+\t * used in that case to set certain parameters on completion queues\n+\t * and others on notification queues.\n \t */\n-\t#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_DST_IPADDR \\\n-\t\tUINT32_C(0x400)\n+\tuint16_t\tenables;\n \t/*\n-\t * This bit must be '1' for the ipaddr_type field to be\n+\t * This bit must be '1' for the num_cmpl_dma_aggr field to be\n \t * configured.\n \t */\n-\t#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_IPADDR_TYPE \\\n-\t\tUINT32_C(0x800)\n+\t#define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_ENABLES_NUM_CMPL_DMA_AGGR \\\n+\t\tUINT32_C(0x1)\n \t/*\n-\t * This bit must be '1' for the ip_protocol field to be\n+\t * This bit must be '1' for the num_cmpl_dma_aggr_during_int field to be\n \t * configured.\n \t */\n-\t#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_IP_PROTOCOL \\\n-\t\tUINT32_C(0x1000)\n+\t#define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_ENABLES_NUM_CMPL_DMA_AGGR_DURING_INT \\\n+\t\tUINT32_C(0x2)\n \t/*\n-\t * This bit must be '1' for the src_port field to be\n+\t * This bit must be '1' for the cmpl_aggr_dma_tmr field to be\n \t * configured.\n \t */\n-\t#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_SRC_PORT \\\n-\t\tUINT32_C(0x2000)\n+\t#define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_ENABLES_CMPL_AGGR_DMA_TMR \\\n+\t\tUINT32_C(0x4)\n \t/*\n-\t * This bit must be '1' for the dst_port field to be\n+\t * This bit must be '1' for the int_lat_tmr_min field to be\n \t * configured.\n \t */\n-\t#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_DST_PORT \\\n-\t\tUINT32_C(0x4000)\n+\t#define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_ENABLES_INT_LAT_TMR_MIN \\\n+\t\tUINT32_C(0x8)\n \t/*\n-\t * This bit must be '1' for the dst_id field to be\n+\t * This bit must be '1' for the int_lat_tmr_max field to be\n \t * configured.\n \t */\n-\t#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_DST_ID \\\n-\t\tUINT32_C(0x8000)\n+\t#define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_ENABLES_INT_LAT_TMR_MAX \\\n+\t\tUINT32_C(0x10)\n \t/*\n-\t * This bit must be '1' for the mirror_vnic_id field to be\n+\t * This bit must be '1' for the num_cmpl_aggr_int field to be\n \t * configured.\n \t */\n-\t#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_MIRROR_VNIC_ID \\\n-\t\tUINT32_C(0x10000)\n-\t/*\n-\t * Tunnel identifier.\n-\t * Virtual Network Identifier (VNI). Only valid with\n-\t * tunnel_types VXLAN, NVGRE, and Geneve.\n-\t * Only lower 24-bits of VNI field are used\n-\t * in setting up the filter.\n-\t */\n-\tuint32_t\ttunnel_id;\n-\t/* Tunnel Type. */\n-\tuint8_t\ttunnel_type;\n-\t/* Non-tunnel */\n-\t#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NONTUNNEL \\\n-\t\tUINT32_C(0x0)\n-\t/* Virtual eXtensible Local Area Network (VXLAN) */\n-\t#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN \\\n-\t\tUINT32_C(0x1)\n-\t/* Network Virtualization Generic Routing Encapsulation (NVGRE) */\n-\t#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NVGRE \\\n-\t\tUINT32_C(0x2)\n-\t/* Generic Routing Encapsulation (GRE) inside Ethernet payload */\n-\t#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_L2GRE \\\n-\t\tUINT32_C(0x3)\n-\t/* IP in IP */\n-\t#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPIP \\\n-\t\tUINT32_C(0x4)\n-\t/* Generic Network Virtualization Encapsulation (Geneve) */\n-\t#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_GENEVE \\\n-\t\tUINT32_C(0x5)\n-\t/* Multi-Protocol Lable Switching (MPLS) */\n-\t#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_MPLS \\\n-\t\tUINT32_C(0x6)\n-\t/* Stateless Transport Tunnel (STT) */\n-\t#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_STT \\\n-\t\tUINT32_C(0x7)\n-\t/* Generic Routing Encapsulation (GRE) inside IP datagram payload */\n-\t#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPGRE \\\n-\t\tUINT32_C(0x8)\n-\t/* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */\n-\t#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_V4 \\\n-\t\tUINT32_C(0x9)\n-\t/* Any tunneled traffic */\n-\t#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL \\\n-\t\tUINT32_C(0xff)\n-\t#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_LAST \\\n-\t\tHWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL\n-\tuint8_t\tunused_0;\n-\tuint16_t\tunused_1;\n-\t/*\n-\t * This value indicates the source MAC address in\n-\t * the Ethernet header.\n-\t */\n-\tuint8_t\tsrc_macaddr[6];\n-\tuint8_t\tunused_2[2];\n-\t/*\n-\t * This value indicates the destination MAC address in\n-\t * the Ethernet header.\n-\t */\n-\tuint8_t\tdst_macaddr[6];\n-\t/*\n-\t * This value indicates the VLAN ID of the outer VLAN tag\n-\t * in the Ethernet header.\n-\t */\n-\tuint16_t\tovlan_vid;\n-\t/*\n-\t * This value indicates the VLAN ID of the inner VLAN tag\n-\t * in the Ethernet header.\n-\t */\n-\tuint16_t\tivlan_vid;\n-\t/*\n-\t * This value indicates the VLAN ID of the outer VLAN tag\n-\t * in the tunnel Ethernet header.\n-\t */\n-\tuint16_t\tt_ovlan_vid;\n+\t#define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_ENABLES_NUM_CMPL_AGGR_INT \\\n+\t\tUINT32_C(0x20)\n+\tuint8_t\tunused_0[4];\n+} __attribute__((packed));\n+\n+/* hwrm_ring_cmpl_ring_cfg_aggint_params_output (size:128b/16B) */\n+struct hwrm_ring_cmpl_ring_cfg_aggint_params_output {\n+\t/* The specific error status for the command. */\n+\tuint16_t\terror_code;\n+\t/* The HWRM command request type. */\n+\tuint16_t\treq_type;\n+\t/* The sequence ID from the original command. */\n+\tuint16_t\tseq_id;\n+\t/* The length of the response data in number of bytes. */\n+\tuint16_t\tresp_len;\n+\tuint8_t\tunused_0[7];\n \t/*\n-\t * This value indicates the VLAN ID of the inner VLAN tag\n-\t * in the tunnel Ethernet header.\n+\t * This field is used in Output records to indicate that the output\n+\t * is completely written to RAM.  This field should be read as '1'\n+\t * to indicate that the output has been completely written.\n+\t * When writing a command completion or response to an internal processor,\n+\t * the order of writes has to be such that this field is written last.\n \t */\n-\tuint16_t\tt_ivlan_vid;\n-\t/* This value indicates the ethertype in the Ethernet header. */\n-\tuint16_t\tethertype;\n+\tuint8_t\tvalid;\n+} __attribute__((packed));\n+\n+/***********************\n+ * hwrm_ring_grp_alloc *\n+ ***********************/\n+\n+\n+/* hwrm_ring_grp_alloc_input (size:192b/24B) */\n+struct hwrm_ring_grp_alloc_input {\n+\t/* The HWRM command request type. */\n+\tuint16_t\treq_type;\n \t/*\n-\t * This value indicates the type of IP address.\n-\t * 4 - IPv4\n-\t * 6 - IPv6\n-\t * All others are invalid.\n+\t * The completion ring to send the completion event on. This should\n+\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n \t */\n-\tuint8_t\tip_addr_type;\n-\t/* invalid */\n-\t#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_UNKNOWN \\\n-\t\tUINT32_C(0x0)\n-\t/* IPv4 */\n-\t#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_IPV4 \\\n-\t\tUINT32_C(0x4)\n-\t/* IPv6 */\n-\t#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_IPV6 \\\n-\t\tUINT32_C(0x6)\n-\t#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_LAST \\\n-\t\tHWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_IPV6\n+\tuint16_t\tcmpl_ring;\n \t/*\n-\t * The value of protocol filed in IP header.\n-\t * Applies to UDP and TCP traffic.\n-\t * 6 - TCP\n-\t * 17 - UDP\n+\t * The sequence ID is used by the driver for tracking multiple\n+\t * commands. This ID is treated as opaque data by the firmware and\n+\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n \t */\n-\tuint8_t\tip_protocol;\n-\t/* invalid */\n-\t#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_PROTOCOL_UNKNOWN \\\n-\t\tUINT32_C(0x0)\n-\t/* TCP */\n-\t#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_PROTOCOL_TCP \\\n-\t\tUINT32_C(0x6)\n-\t/* UDP */\n-\t#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_PROTOCOL_UDP \\\n-\t\tUINT32_C(0x11)\n-\t#define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_PROTOCOL_LAST \\\n-\t\tHWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_PROTOCOL_UDP\n-\tuint16_t\tunused_3;\n-\tuint32_t\tunused_4;\n+\tuint16_t\tseq_id;\n \t/*\n-\t * The value of source IP address to be used in filtering.\n-\t * For IPv4, first four bytes represent the IP address.\n+\t * The target ID of the command:\n+\t * * 0x0-0xFFF8 - The function ID\n+\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n+\t * * 0xFFFF - HWRM\n \t */\n-\tuint32_t\tsrc_ipaddr[4];\n+\tuint16_t\ttarget_id;\n \t/*\n-\t * The value of destination IP address to be used in filtering.\n-\t * For IPv4, first four bytes represent the IP address.\n+\t * A physical address pointer pointing to a host buffer that the\n+\t * command's response data will be written. This can be either a host\n+\t * physical address (HPA) or a guest physical address (GPA) and must\n+\t * point to a physically contiguous block of memory.\n \t */\n-\tuint32_t\tdst_ipaddr[4];\n+\tuint64_t\tresp_addr;\n \t/*\n-\t * The value of source port to be used in filtering.\n-\t * Applies to UDP and TCP traffic.\n+\t * This value identifies the CR associated with the ring\n+\t * group.\n \t */\n-\tuint16_t\tsrc_port;\n+\tuint16_t\tcr;\n \t/*\n-\t * The value of destination port to be used in filtering.\n-\t * Applies to UDP and TCP traffic.\n+\t * This value identifies the main RR associated with the ring\n+\t * group.\n \t */\n-\tuint16_t\tdst_port;\n+\tuint16_t\trr;\n \t/*\n-\t * If set, this value shall represent the\n-\t * Logical VNIC ID of the destination VNIC for the RX\n-\t * path.\n+\t * This value identifies the aggregation RR associated with\n+\t * the ring group.  If this value is 0xFF... (All Fs), then no\n+\t * Aggregation ring will be set.\n \t */\n-\tuint16_t\tdst_id;\n+\tuint16_t\tar;\n \t/*\n-\t * If set, this value shall represent the L2 context that matches the L2\n-\t * information of the decap filter.\n+\t * This value identifies the statistics context associated\n+\t * with the ring group.\n \t */\n-\tuint16_t\tl2_ctxt_ref_id;\n+\tuint16_t\tsc;\n } __attribute__((packed));\n \n-/* hwrm_cfa_decap_filter_alloc_output (size:128b/16B) */\n-struct hwrm_cfa_decap_filter_alloc_output {\n+/* hwrm_ring_grp_alloc_output (size:128b/16B) */\n+struct hwrm_ring_grp_alloc_output {\n \t/* The specific error status for the command. */\n \tuint16_t\terror_code;\n \t/* The HWRM command request type. */\n@@ -23921,8 +17514,12 @@ struct hwrm_cfa_decap_filter_alloc_output {\n \tuint16_t\tseq_id;\n \t/* The length of the response data in number of bytes. */\n \tuint16_t\tresp_len;\n-\t/* This value is an opaque id into CFA data structures. */\n-\tuint32_t\tdecap_filter_id;\n+\t/*\n+\t * This is the ring group ID value.  Use this value to program\n+\t * the default ring group for the VNIC or as table entries\n+\t * in an RSS/COS context.\n+\t */\n+\tuint32_t\tring_group_id;\n \tuint8_t\tunused_0[3];\n \t/*\n \t * This field is used in Output records to indicate that the output\n@@ -23934,13 +17531,13 @@ struct hwrm_cfa_decap_filter_alloc_output {\n \tuint8_t\tvalid;\n } __attribute__((packed));\n \n-/******************************\n- * hwrm_cfa_decap_filter_free *\n- ******************************/\n+/**********************\n+ * hwrm_ring_grp_free *\n+ **********************/\n \n \n-/* hwrm_cfa_decap_filter_free_input (size:192b/24B) */\n-struct hwrm_cfa_decap_filter_free_input {\n+/* hwrm_ring_grp_free_input (size:192b/24B) */\n+struct hwrm_ring_grp_free_input {\n \t/* The HWRM command request type. */\n \tuint16_t\treq_type;\n \t/*\n@@ -23968,13 +17565,13 @@ struct hwrm_cfa_decap_filter_free_input {\n \t * point to a physically contiguous block of memory.\n \t */\n \tuint64_t\tresp_addr;\n-\t/* This value is an opaque id into CFA data structures. */\n-\tuint32_t\tdecap_filter_id;\n+\t/* This is the ring group ID value. */\n+\tuint32_t\tring_group_id;\n \tuint8_t\tunused_0[4];\n } __attribute__((packed));\n \n-/* hwrm_cfa_decap_filter_free_output (size:128b/16B) */\n-struct hwrm_cfa_decap_filter_free_output {\n+/* hwrm_ring_grp_free_output (size:128b/16B) */\n+struct hwrm_ring_grp_free_output {\n \t/* The specific error status for the command. */\n \tuint16_t\terror_code;\n \t/* The HWRM command request type. */\n@@ -23994,250 +17591,376 @@ struct hwrm_cfa_decap_filter_free_output {\n \tuint8_t\tvalid;\n } __attribute__((packed));\n \n-/***********************\n- * hwrm_cfa_flow_alloc *\n- ***********************/\n+/****************************\n+ * hwrm_cfa_l2_filter_alloc *\n+ ****************************/\n \n \n-/* hwrm_cfa_flow_alloc_input (size:1024b/128B) */\n-struct hwrm_cfa_flow_alloc_input {\n+/* hwrm_cfa_l2_filter_alloc_input (size:768b/96B) */\n+struct hwrm_cfa_l2_filter_alloc_input {\n \t/* The HWRM command request type. */\n \tuint16_t\treq_type;\n \t/*\n \t * The completion ring to send the completion event on. This should\n \t * be the NQ ID returned from the `nq_alloc` HWRM command.\n \t */\n-\tuint16_t\tcmpl_ring;\n+\tuint16_t\tcmpl_ring;\n+\t/*\n+\t * The sequence ID is used by the driver for tracking multiple\n+\t * commands. This ID is treated as opaque data by the firmware and\n+\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n+\t */\n+\tuint16_t\tseq_id;\n+\t/*\n+\t * The target ID of the command:\n+\t * * 0x0-0xFFF8 - The function ID\n+\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n+\t * * 0xFFFF - HWRM\n+\t */\n+\tuint16_t\ttarget_id;\n+\t/*\n+\t * A physical address pointer pointing to a host buffer that the\n+\t * command's response data will be written. This can be either a host\n+\t * physical address (HPA) or a guest physical address (GPA) and must\n+\t * point to a physically contiguous block of memory.\n+\t */\n+\tuint64_t\tresp_addr;\n+\tuint32_t\tflags;\n+\t/*\n+\t * Enumeration denoting the RX, TX type of the resource.\n+\t * This enumeration is used for resources that are similar for both\n+\t * TX and RX paths of the chip.\n+\t */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_PATH \\\n+\t\tUINT32_C(0x1)\n+\t/* tx path */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_PATH_TX \\\n+\t\tUINT32_C(0x0)\n+\t/* rx path */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_PATH_RX \\\n+\t\tUINT32_C(0x1)\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_PATH_LAST \\\n+\t\tHWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_PATH_RX\n+\t/* Setting of this flag indicates the applicability to the loopback path. */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_LOOPBACK \\\n+\t\tUINT32_C(0x2)\n+\t/*\n+\t * Setting of this flag indicates drop action. If this flag is not set,\n+\t * then it should be considered accept action.\n+\t */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_DROP \\\n+\t\tUINT32_C(0x4)\n+\t/*\n+\t * If this flag is set, all t_l2_* fields are invalid\n+\t * and they should not be specified.\n+\t * If this flag is set, then l2_* fields refer to\n+\t * fields of outermost L2 header.\n+\t */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_OUTERMOST \\\n+\t\tUINT32_C(0x8)\n+\t/*\n+\t * Enumeration denoting NO_ROCE_L2 to support old drivers.\n+\t * New driver L2 for only L2 traffic, ROCE for roce and l2 traffic\n+\t */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_TRAFFIC_MASK \\\n+\t\tUINT32_C(0x30)\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_TRAFFIC_SFT       4\n+\t/* To support old drivers */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_TRAFFIC_NO_ROCE_L2 \\\n+\t\t(UINT32_C(0x0) << 4)\n+\t/* Only L2 traffic */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_TRAFFIC_L2 \\\n+\t\t(UINT32_C(0x1) << 4)\n+\t/* Roce & L2 traffic */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_TRAFFIC_ROCE \\\n+\t\t(UINT32_C(0x2) << 4)\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_TRAFFIC_LAST \\\n+\t\tHWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_TRAFFIC_ROCE\n+\tuint32_t\tenables;\n+\t/*\n+\t * This bit must be '1' for the l2_addr field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_ADDR \\\n+\t\tUINT32_C(0x1)\n+\t/*\n+\t * This bit must be '1' for the l2_addr_mask field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_ADDR_MASK \\\n+\t\tUINT32_C(0x2)\n+\t/*\n+\t * This bit must be '1' for the l2_ovlan field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_OVLAN \\\n+\t\tUINT32_C(0x4)\n+\t/*\n+\t * This bit must be '1' for the l2_ovlan_mask field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_OVLAN_MASK \\\n+\t\tUINT32_C(0x8)\n+\t/*\n+\t * This bit must be '1' for the l2_ivlan field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_IVLAN \\\n+\t\tUINT32_C(0x10)\n+\t/*\n+\t * This bit must be '1' for the l2_ivlan_mask field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_IVLAN_MASK \\\n+\t\tUINT32_C(0x20)\n+\t/*\n+\t * This bit must be '1' for the t_l2_addr field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_T_L2_ADDR \\\n+\t\tUINT32_C(0x40)\n+\t/*\n+\t * This bit must be '1' for the t_l2_addr_mask field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_T_L2_ADDR_MASK \\\n+\t\tUINT32_C(0x80)\n+\t/*\n+\t * This bit must be '1' for the t_l2_ovlan field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_T_L2_OVLAN \\\n+\t\tUINT32_C(0x100)\n+\t/*\n+\t * This bit must be '1' for the t_l2_ovlan_mask field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_T_L2_OVLAN_MASK \\\n+\t\tUINT32_C(0x200)\n+\t/*\n+\t * This bit must be '1' for the t_l2_ivlan field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_T_L2_IVLAN \\\n+\t\tUINT32_C(0x400)\n+\t/*\n+\t * This bit must be '1' for the t_l2_ivlan_mask field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_T_L2_IVLAN_MASK \\\n+\t\tUINT32_C(0x800)\n+\t/*\n+\t * This bit must be '1' for the src_type field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_SRC_TYPE \\\n+\t\tUINT32_C(0x1000)\n \t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n+\t * This bit must be '1' for the src_id field to be\n+\t * configured.\n \t */\n-\tuint16_t\tseq_id;\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_SRC_ID \\\n+\t\tUINT32_C(0x2000)\n \t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n+\t * This bit must be '1' for the tunnel_type field to be\n+\t * configured.\n \t */\n-\tuint16_t\ttarget_id;\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_TUNNEL_TYPE \\\n+\t\tUINT32_C(0x4000)\n \t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n+\t * This bit must be '1' for the dst_id field to be\n+\t * configured.\n \t */\n-\tuint64_t\tresp_addr;\n-\tuint16_t\tflags;\n-\t/* tunnel is 1 b */\n-\t#define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_TUNNEL       UINT32_C(0x1)\n-\t/* num_vlan is 2 b */\n-\t#define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_NUM_VLAN_MASK UINT32_C(0x6)\n-\t#define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_NUM_VLAN_SFT 1\n-\t/* no tags */\n-\t#define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_NUM_VLAN_NONE \\\n-\t\t(UINT32_C(0x0) << 1)\n-\t/* 1 tag */\n-\t#define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_NUM_VLAN_ONE \\\n-\t\t(UINT32_C(0x1) << 1)\n-\t/* 2 tags */\n-\t#define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_NUM_VLAN_TWO \\\n-\t\t(UINT32_C(0x2) << 1)\n-\t#define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_NUM_VLAN_LAST \\\n-\t\tHWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_NUM_VLAN_TWO\n-\t/* Enumeration denoting the Flow Type. */\n-\t#define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_FLOWTYPE_MASK UINT32_C(0x38)\n-\t#define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_FLOWTYPE_SFT 3\n-\t/* L2 flow */\n-\t#define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_FLOWTYPE_L2 \\\n-\t\t(UINT32_C(0x0) << 3)\n-\t/* IPV4 flow */\n-\t#define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_FLOWTYPE_IPV4 \\\n-\t\t(UINT32_C(0x1) << 3)\n-\t/* IPV6 flow */\n-\t#define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_FLOWTYPE_IPV6 \\\n-\t\t(UINT32_C(0x2) << 3)\n-\t#define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_FLOWTYPE_LAST \\\n-\t\tHWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_FLOWTYPE_IPV6\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_DST_ID \\\n+\t\tUINT32_C(0x8000)\n \t/*\n-\t * Tx Flow: vf fid.\n-\t * Rx Flow: pf fid.\n+\t * This bit must be '1' for the mirror_vnic_id field to be\n+\t * configured.\n \t */\n-\tuint16_t\tsrc_fid;\n-\t/* Tunnel handle valid when tunnel flag is set. */\n-\tuint32_t\ttunnel_handle;\n-\tuint16_t\taction_flags;\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_MIRROR_VNIC_ID \\\n+\t\tUINT32_C(0x10000)\n \t/*\n-\t * Setting of this flag indicates drop action. If this flag is not set,\n-\t * then it should be considered accept action.\n+\t * This value sets the match value for the L2 MAC address.\n+\t * Destination MAC address for RX path.\n+\t * Source MAC address for TX path.\n \t */\n-\t#define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_FWD \\\n-\t\tUINT32_C(0x1)\n-\t/* recycle is 1 b */\n-\t#define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_RECYCLE \\\n-\t\tUINT32_C(0x2)\n+\tuint8_t\tl2_addr[6];\n+\tuint8_t\tunused_0[2];\n \t/*\n-\t * Setting of this flag indicates drop action. If this flag is not set,\n-\t * then it should be considered accept action.\n+\t * This value sets the mask value for the L2 address.\n+\t * A value of 0 will mask the corresponding bit from\n+\t * compare.\n \t */\n-\t#define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_DROP \\\n-\t\tUINT32_C(0x4)\n-\t/* meter is 1 b */\n-\t#define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_METER \\\n-\t\tUINT32_C(0x8)\n-\t/* tunnel is 1 b */\n-\t#define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_TUNNEL \\\n-\t\tUINT32_C(0x10)\n-\t/* nat_src is 1 b */\n-\t#define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_NAT_SRC \\\n-\t\tUINT32_C(0x20)\n-\t/* nat_dest is 1 b */\n-\t#define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_NAT_DEST \\\n-\t\tUINT32_C(0x40)\n-\t/* nat_ipv4_address is 1 b */\n-\t#define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_NAT_IPV4_ADDRESS \\\n-\t\tUINT32_C(0x80)\n-\t/* l2_header_rewrite is 1 b */\n-\t#define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_L2_HEADER_REWRITE \\\n-\t\tUINT32_C(0x100)\n-\t/* ttl_decrement is 1 b */\n-\t#define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_TTL_DECREMENT \\\n-\t\tUINT32_C(0x200)\n+\tuint8_t\tl2_addr_mask[6];\n+\t/* This value sets VLAN ID value for outer VLAN. */\n+\tuint16_t\tl2_ovlan;\n \t/*\n-\t * Tx Flow: pf or vf fid.\n-\t * Rx Flow: vf fid.\n-\t */\n-\tuint16_t\tdst_fid;\n-\t/* VLAN tpid, valid when push_vlan flag is set. */\n-\tuint16_t\tl2_rewrite_vlan_tpid;\n-\t/* VLAN tci, valid when push_vlan flag is set. */\n-\tuint16_t\tl2_rewrite_vlan_tci;\n-\t/* Meter id, valid when meter flag is set. */\n-\tuint16_t\tact_meter_id;\n-\t/* Flow with the same l2 context tcam key. */\n-\tuint16_t\tref_flow_handle;\n-\t/* This value sets the match value for the ethertype. */\n-\tuint16_t\tethertype;\n-\t/* valid when num tags is 1 or 2. */\n-\tuint16_t\touter_vlan_tci;\n-\t/* This value sets the match value for the Destination MAC address. */\n-\tuint16_t\tdmac[3];\n-\t/* valid when num tags is 2. */\n-\tuint16_t\tinner_vlan_tci;\n-\t/* This value sets the match value for the Source MAC address. */\n-\tuint16_t\tsmac[3];\n-\t/* The bit length of destination IP address mask. */\n-\tuint8_t\tip_dst_mask_len;\n-\t/* The bit length of source IP address mask. */\n-\tuint8_t\tip_src_mask_len;\n-\t/* The value of destination IPv4/IPv6 address. */\n-\tuint32_t\tip_dst[4];\n-\t/* The source IPv4/IPv6 address. */\n-\tuint32_t\tip_src[4];\n-\t/*\n-\t * The value of source port.\n-\t * Applies to UDP and TCP traffic.\n+\t * This value sets the mask value for the ovlan id.\n+\t * A value of 0 will mask the corresponding bit from\n+\t * compare.\n \t */\n-\tuint16_t\tl4_src_port;\n+\tuint16_t\tl2_ovlan_mask;\n+\t/* This value sets VLAN ID value for inner VLAN. */\n+\tuint16_t\tl2_ivlan;\n \t/*\n-\t * The value of source port mask.\n-\t * Applies to UDP and TCP traffic.\n+\t * This value sets the mask value for the ivlan id.\n+\t * A value of 0 will mask the corresponding bit from\n+\t * compare.\n \t */\n-\tuint16_t\tl4_src_port_mask;\n+\tuint16_t\tl2_ivlan_mask;\n+\tuint8_t\tunused_1[2];\n \t/*\n-\t * The value of destination port.\n-\t * Applies to UDP and TCP traffic.\n+\t * This value sets the match value for the tunnel\n+\t * L2 MAC address.\n+\t * Destination MAC address for RX path.\n+\t * Source MAC address for TX path.\n \t */\n-\tuint16_t\tl4_dst_port;\n+\tuint8_t\tt_l2_addr[6];\n+\tuint8_t\tunused_2[2];\n \t/*\n-\t * The value of destination port mask.\n-\t * Applies to UDP and TCP traffic.\n+\t * This value sets the mask value for the tunnel L2\n+\t * address.\n+\t * A value of 0 will mask the corresponding bit from\n+\t * compare.\n \t */\n-\tuint16_t\tl4_dst_port_mask;\n+\tuint8_t\tt_l2_addr_mask[6];\n+\t/* This value sets VLAN ID value for tunnel outer VLAN. */\n+\tuint16_t\tt_l2_ovlan;\n \t/*\n-\t * NAT IPv4/6 address based on address type flag.\n-\t * 0 values are ignored.\n+\t * This value sets the mask value for the tunnel ovlan id.\n+\t * A value of 0 will mask the corresponding bit from\n+\t * compare.\n \t */\n-\tuint32_t\tnat_ip_address[4];\n-\t/* L2 header re-write Destination MAC address. */\n-\tuint16_t\tl2_rewrite_dmac[3];\n+\tuint16_t\tt_l2_ovlan_mask;\n+\t/* This value sets VLAN ID value for tunnel inner VLAN. */\n+\tuint16_t\tt_l2_ivlan;\n \t/*\n-\t * The NAT source/destination port based on direction flag.\n-\t * Applies to UDP and TCP traffic.\n-\t * 0 values are ignored.\n+\t * This value sets the mask value for the tunnel ivlan id.\n+\t * A value of 0 will mask the corresponding bit from\n+\t * compare.\n \t */\n-\tuint16_t\tnat_port;\n-\t/* L2 header re-write Source MAC address. */\n-\tuint16_t\tl2_rewrite_smac[3];\n-\t/* The value of ip protocol. */\n-\tuint8_t\tip_proto;\n-\tuint8_t\tunused_0;\n-} __attribute__((packed));\n-\n-/* hwrm_cfa_flow_alloc_output (size:128b/16B) */\n-struct hwrm_cfa_flow_alloc_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\t/* Flow record index. */\n-\tuint16_t\tflow_handle;\n-\tuint8_t\tunused_0[5];\n+\tuint16_t\tt_l2_ivlan_mask;\n+\t/* This value identifies the type of source of the packet. */\n+\tuint8_t\tsrc_type;\n+\t/* Network port */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_NPORT UINT32_C(0x0)\n+\t/* Physical function */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_PF    UINT32_C(0x1)\n+\t/* Virtual function */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_VF    UINT32_C(0x2)\n+\t/* Virtual NIC of a function */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_VNIC  UINT32_C(0x3)\n+\t/* Embedded processor for CFA management */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_KONG  UINT32_C(0x4)\n+\t/* Embedded processor for OOB management */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_APE   UINT32_C(0x5)\n+\t/* Embedded processor for RoCE */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_BONO  UINT32_C(0x6)\n+\t/* Embedded processor for network proxy functions */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_TANG  UINT32_C(0x7)\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_LAST \\\n+\t\tHWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_TANG\n+\tuint8_t\tunused_3;\n \t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n+\t * This value is the id of the source.\n+\t * For a network port, it represents port_id.\n+\t * For a physical function, it represents fid.\n+\t * For a virtual function, it represents vf_id.\n+\t * For a vnic, it represents vnic_id.\n+\t * For embedded processors, this id is not valid.\n+\t *\n+\t * Notes:\n+\t * 1. The function ID is implied if it src_id is\n+\t *    not provided for a src_type that is either\n \t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/**********************\n- * hwrm_cfa_flow_free *\n- **********************/\n-\n-\n-/* hwrm_cfa_flow_free_input (size:192b/24B) */\n-struct hwrm_cfa_flow_free_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n+\tuint32_t\tsrc_id;\n+\t/* Tunnel Type. */\n+\tuint8_t\ttunnel_type;\n+\t/* Non-tunnel */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NONTUNNEL \\\n+\t\tUINT32_C(0x0)\n+\t/* Virtual eXtensible Local Area Network (VXLAN) */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN \\\n+\t\tUINT32_C(0x1)\n+\t/* Network Virtualization Generic Routing Encapsulation (NVGRE) */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NVGRE \\\n+\t\tUINT32_C(0x2)\n+\t/* Generic Routing Encapsulation (GRE) inside Ethernet payload */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_L2GRE \\\n+\t\tUINT32_C(0x3)\n+\t/* IP in IP */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPIP \\\n+\t\tUINT32_C(0x4)\n+\t/* Generic Network Virtualization Encapsulation (Geneve) */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_GENEVE \\\n+\t\tUINT32_C(0x5)\n+\t/* Multi-Protocol Lable Switching (MPLS) */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_MPLS \\\n+\t\tUINT32_C(0x6)\n+\t/* Stateless Transport Tunnel (STT) */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_STT \\\n+\t\tUINT32_C(0x7)\n+\t/* Generic Routing Encapsulation (GRE) inside IP datagram payload */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPGRE \\\n+\t\tUINT32_C(0x8)\n+\t/* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_V4 \\\n+\t\tUINT32_C(0x9)\n+\t/* Any tunneled traffic */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL \\\n+\t\tUINT32_C(0xff)\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_LAST \\\n+\t\tHWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL\n+\tuint8_t\tunused_4;\n \t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n+\t * If set, this value shall represent the\n+\t * Logical VNIC ID of the destination VNIC for the RX\n+\t * path and network port id of the destination port for\n+\t * the TX path.\n \t */\n-\tuint16_t\tcmpl_ring;\n+\tuint16_t\tdst_id;\n \t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n+\t * Logical VNIC ID of the VNIC where traffic is\n+\t * mirrored.\n \t */\n-\tuint16_t\tseq_id;\n+\tuint16_t\tmirror_vnic_id;\n \t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n+\t * This hint is provided to help in placing\n+\t * the filter in the filter table.\n \t */\n-\tuint16_t\ttarget_id;\n+\tuint8_t\tpri_hint;\n+\t/* No preference */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_NO_PREFER \\\n+\t\tUINT32_C(0x0)\n+\t/* Above the given filter */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_ABOVE_FILTER \\\n+\t\tUINT32_C(0x1)\n+\t/* Below the given filter */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_BELOW_FILTER \\\n+\t\tUINT32_C(0x2)\n+\t/* As high as possible */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_MAX \\\n+\t\tUINT32_C(0x3)\n+\t/* As low as possible */\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_MIN \\\n+\t\tUINT32_C(0x4)\n+\t#define HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_LAST \\\n+\t\tHWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_MIN\n+\tuint8_t\tunused_5;\n+\tuint32_t\tunused_6;\n \t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\t/* Flow record index. */\n-\tuint16_t\tflow_handle;\n-\tuint8_t\tunused_0[6];\n+\t * This is the ID of the filter that goes along with\n+\t * the pri_hint.\n+\t *\n+\t * This field is valid only for the following values.\n+\t * 1 - Above the given filter\n+\t * 2 - Below the given filter\n+\t */\n+\tuint64_t\tl2_filter_id_hint;\n } __attribute__((packed));\n \n-/* hwrm_cfa_flow_free_output (size:256b/32B) */\n-struct hwrm_cfa_flow_free_output {\n+/* hwrm_cfa_l2_filter_alloc_output (size:192b/24B) */\n+struct hwrm_cfa_l2_filter_alloc_output {\n \t/* The specific error status for the command. */\n \tuint16_t\terror_code;\n \t/* The HWRM command request type. */\n@@ -24246,11 +17969,20 @@ struct hwrm_cfa_flow_free_output {\n \tuint16_t\tseq_id;\n \t/* The length of the response data in number of bytes. */\n \tuint16_t\tresp_len;\n-\t/* packet is 64 b */\n-\tuint64_t\tpacket;\n-\t/* byte is 64 b */\n-\tuint64_t\tbyte;\n-\tuint8_t\tunused_0[7];\n+\t/*\n+\t * This value identifies a set of CFA data structures used for an L2\n+\t * context.\n+\t */\n+\tuint64_t\tl2_filter_id;\n+\t/*\n+\t * This is the ID of the flow associated with this\n+\t * filter.\n+\t * This value shall be used to match and associate the\n+\t * flow identifier returned in completion records.\n+\t * A value of 0xFFFFFFFF shall indicate no flow id.\n+\t */\n+\tuint32_t\tflow_id;\n+\tuint8_t\tunused_0[3];\n \t/*\n \t * This field is used in Output records to indicate that the output\n \t * is completely written to RAM.  This field should be read as '1'\n@@ -24261,13 +17993,13 @@ struct hwrm_cfa_flow_free_output {\n \tuint8_t\tvalid;\n } __attribute__((packed));\n \n-/**********************\n- * hwrm_cfa_flow_info *\n- **********************/\n+/***************************\n+ * hwrm_cfa_l2_filter_free *\n+ ***************************/\n \n \n-/* hwrm_cfa_flow_info_input (size:192b/24B) */\n-struct hwrm_cfa_flow_info_input {\n+/* hwrm_cfa_l2_filter_free_input (size:192b/24B) */\n+struct hwrm_cfa_l2_filter_free_input {\n \t/* The HWRM command request type. */\n \tuint16_t\treq_type;\n \t/*\n@@ -24295,23 +18027,15 @@ struct hwrm_cfa_flow_info_input {\n \t * point to a physically contiguous block of memory.\n \t */\n \tuint64_t\tresp_addr;\n-\t/* Flow record index. */\n-\tuint16_t\tflow_handle;\n-\t/* Max flow handle */\n-\t#define HWRM_CFA_FLOW_INFO_INPUT_FLOW_HANDLE_MAX_MASK \\\n-\t\tUINT32_C(0xfff)\n-\t#define HWRM_CFA_FLOW_INFO_INPUT_FLOW_HANDLE_MAX_SFT     0\n-\t/* CNP flow handle */\n-\t#define HWRM_CFA_FLOW_INFO_INPUT_FLOW_HANDLE_CNP_CNT \\\n-\t\tUINT32_C(0x1000)\n-\t/* Direction rx = 1 */\n-\t#define HWRM_CFA_FLOW_INFO_INPUT_FLOW_HANDLE_DIR_RX \\\n-\t\tUINT32_C(0x8000)\n-\tuint8_t\tunused_0[6];\n+\t/*\n+\t * This value identifies a set of CFA data structures used for an L2\n+\t * context.\n+\t */\n+\tuint64_t\tl2_filter_id;\n } __attribute__((packed));\n \n-/* hwrm_cfa_flow_info_output (size:448b/56B) */\n-struct hwrm_cfa_flow_info_output {\n+/* hwrm_cfa_l2_filter_free_output (size:128b/16B) */\n+struct hwrm_cfa_l2_filter_free_output {\n \t/* The specific error status for the command. */\n \tuint16_t\terror_code;\n \t/* The HWRM command request type. */\n@@ -24320,28 +18044,6 @@ struct hwrm_cfa_flow_info_output {\n \tuint16_t\tseq_id;\n \t/* The length of the response data in number of bytes. */\n \tuint16_t\tresp_len;\n-\t/* flags is 8 b */\n-\tuint8_t\tflags;\n-\t/* profile is 8 b */\n-\tuint8_t\tprofile;\n-\t/* src_fid is 16 b */\n-\tuint16_t\tsrc_fid;\n-\t/* dst_fid is 16 b */\n-\tuint16_t\tdst_fid;\n-\t/* l2_ctxt_id is 16 b */\n-\tuint16_t\tl2_ctxt_id;\n-\t/* em_info is 64 b */\n-\tuint64_t\tem_info;\n-\t/* tcam_info is 64 b */\n-\tuint64_t\ttcam_info;\n-\t/* vfp_tcam_info is 64 b */\n-\tuint64_t\tvfp_tcam_info;\n-\t/* ar_id is 16 b */\n-\tuint16_t\tar_id;\n-\t/* flow_handle is 16 b */\n-\tuint16_t\tflow_handle;\n-\t/* tunnel_handle is 32 b */\n-\tuint32_t\ttunnel_handle;\n \tuint8_t\tunused_0[7];\n \t/*\n \t * This field is used in Output records to indicate that the output\n@@ -24353,13 +18055,13 @@ struct hwrm_cfa_flow_info_output {\n \tuint8_t\tvalid;\n } __attribute__((packed));\n \n-/***********************\n- * hwrm_cfa_flow_flush *\n- ***********************/\n+/**************************\n+ * hwrm_cfa_l2_filter_cfg *\n+ **************************/\n \n \n-/* hwrm_cfa_flow_flush_input (size:192b/24B) */\n-struct hwrm_cfa_flow_flush_input {\n+/* hwrm_cfa_l2_filter_cfg_input (size:320b/40B) */\n+struct hwrm_cfa_l2_filter_cfg_input {\n \t/* The HWRM command request type. */\n \tuint16_t\treq_type;\n \t/*\n@@ -24388,11 +18090,79 @@ struct hwrm_cfa_flow_flush_input {\n \t */\n \tuint64_t\tresp_addr;\n \tuint32_t\tflags;\n-\tuint8_t\tunused_0[4];\n+\t/*\n+\t * Enumeration denoting the RX, TX type of the resource.\n+\t * This enumeration is used for resources that are similar for both\n+\t * TX and RX paths of the chip.\n+\t */\n+\t#define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_PATH \\\n+\t\tUINT32_C(0x1)\n+\t/* tx path */\n+\t#define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_PATH_TX \\\n+\t\tUINT32_C(0x0)\n+\t/* rx path */\n+\t#define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_PATH_RX \\\n+\t\tUINT32_C(0x1)\n+\t#define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_PATH_LAST \\\n+\t\tHWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_PATH_RX\n+\t/*\n+\t * Setting of this flag indicates drop action. If this flag is not set,\n+\t * then it should be considered accept action.\n+\t */\n+\t#define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_DROP \\\n+\t\tUINT32_C(0x2)\n+\t/*\n+\t * Enumeration denoting NO_ROCE_L2 to support old drivers.\n+\t * New driver L2 for only L2 traffic, ROCE for roce and l2 traffic\n+\t */\n+\t#define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_TRAFFIC_MASK \\\n+\t\tUINT32_C(0xc)\n+\t#define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_TRAFFIC_SFT       2\n+\t/* To support old drivers */\n+\t#define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_TRAFFIC_NO_ROCE_L2 \\\n+\t\t(UINT32_C(0x0) << 2)\n+\t/* Only L2 traffic */\n+\t#define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_TRAFFIC_L2 \\\n+\t\t(UINT32_C(0x1) << 2)\n+\t/* Roce & L2 traffic */\n+\t#define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_TRAFFIC_ROCE \\\n+\t\t(UINT32_C(0x2) << 2)\n+\t#define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_TRAFFIC_LAST \\\n+\t\tHWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_TRAFFIC_ROCE\n+\tuint32_t\tenables;\n+\t/*\n+\t * This bit must be '1' for the dst_id field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_CFA_L2_FILTER_CFG_INPUT_ENABLES_DST_ID \\\n+\t\tUINT32_C(0x1)\n+\t/*\n+\t * This bit must be '1' for the new_mirror_vnic_id field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_CFA_L2_FILTER_CFG_INPUT_ENABLES_NEW_MIRROR_VNIC_ID \\\n+\t\tUINT32_C(0x2)\n+\t/*\n+\t * This value identifies a set of CFA data structures used for an L2\n+\t * context.\n+\t */\n+\tuint64_t\tl2_filter_id;\n+\t/*\n+\t * If set, this value shall represent the\n+\t * Logical VNIC ID of the destination VNIC for the RX\n+\t * path and network port id of the destination port for\n+\t * the TX path.\n+\t */\n+\tuint32_t\tdst_id;\n+\t/*\n+\t * New Logical VNIC ID of the VNIC where traffic is\n+\t * mirrored.\n+\t */\n+\tuint32_t\tnew_mirror_vnic_id;\n } __attribute__((packed));\n \n-/* hwrm_cfa_flow_flush_output (size:128b/16B) */\n-struct hwrm_cfa_flow_flush_output {\n+/* hwrm_cfa_l2_filter_cfg_output (size:128b/16B) */\n+struct hwrm_cfa_l2_filter_cfg_output {\n \t/* The specific error status for the command. */\n \tuint16_t\terror_code;\n \t/* The HWRM command request type. */\n@@ -24412,13 +18182,13 @@ struct hwrm_cfa_flow_flush_output {\n \tuint8_t\tvalid;\n } __attribute__((packed));\n \n-/***********************\n- * hwrm_cfa_flow_stats *\n- ***********************/\n+/***************************\n+ * hwrm_cfa_l2_set_rx_mask *\n+ ***************************/\n \n \n-/* hwrm_cfa_flow_stats_input (size:320b/40B) */\n-struct hwrm_cfa_flow_stats_input {\n+/* hwrm_cfa_l2_set_rx_mask_input (size:448b/56B) */\n+struct hwrm_cfa_l2_set_rx_mask_input {\n \t/* The HWRM command request type. */\n \tuint16_t\treq_type;\n \t/*\n@@ -24446,137 +18216,134 @@ struct hwrm_cfa_flow_stats_input {\n \t * point to a physically contiguous block of memory.\n \t */\n \tuint64_t\tresp_addr;\n-\t/* Flow handle. */\n-\tuint16_t\tnum_flows;\n-\t/* Flow handle. */\n-\tuint16_t\tflow_handle_0;\n-\t/* Flow handle. */\n-\tuint16_t\tflow_handle_1;\n-\t/* Flow handle. */\n-\tuint16_t\tflow_handle_2;\n-\t/* Flow handle. */\n-\tuint16_t\tflow_handle_3;\n-\t/* Flow handle. */\n-\tuint16_t\tflow_handle_4;\n-\t/* Flow handle. */\n-\tuint16_t\tflow_handle_5;\n-\t/* Flow handle. */\n-\tuint16_t\tflow_handle_6;\n-\t/* Flow handle. */\n-\tuint16_t\tflow_handle_7;\n-\t/* Flow handle. */\n-\tuint16_t\tflow_handle_8;\n-\t/* Flow handle. */\n-\tuint16_t\tflow_handle_9;\n-\tuint8_t\tunused_0[2];\n-} __attribute__((packed));\n-\n-/* hwrm_cfa_flow_stats_output (size:1408b/176B) */\n-struct hwrm_cfa_flow_stats_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\t/* packet_0 is 64 b */\n-\tuint64_t\tpacket_0;\n-\t/* packet_1 is 64 b */\n-\tuint64_t\tpacket_1;\n-\t/* packet_2 is 64 b */\n-\tuint64_t\tpacket_2;\n-\t/* packet_3 is 64 b */\n-\tuint64_t\tpacket_3;\n-\t/* packet_4 is 64 b */\n-\tuint64_t\tpacket_4;\n-\t/* packet_5 is 64 b */\n-\tuint64_t\tpacket_5;\n-\t/* packet_6 is 64 b */\n-\tuint64_t\tpacket_6;\n-\t/* packet_7 is 64 b */\n-\tuint64_t\tpacket_7;\n-\t/* packet_8 is 64 b */\n-\tuint64_t\tpacket_8;\n-\t/* packet_9 is 64 b */\n-\tuint64_t\tpacket_9;\n-\t/* byte_0 is 64 b */\n-\tuint64_t\tbyte_0;\n-\t/* byte_1 is 64 b */\n-\tuint64_t\tbyte_1;\n-\t/* byte_2 is 64 b */\n-\tuint64_t\tbyte_2;\n-\t/* byte_3 is 64 b */\n-\tuint64_t\tbyte_3;\n-\t/* byte_4 is 64 b */\n-\tuint64_t\tbyte_4;\n-\t/* byte_5 is 64 b */\n-\tuint64_t\tbyte_5;\n-\t/* byte_6 is 64 b */\n-\tuint64_t\tbyte_6;\n-\t/* byte_7 is 64 b */\n-\tuint64_t\tbyte_7;\n-\t/* byte_8 is 64 b */\n-\tuint64_t\tbyte_8;\n-\t/* byte_9 is 64 b */\n-\tuint64_t\tbyte_9;\n-\tuint8_t\tunused_0[7];\n+\t/* VNIC ID */\n+\tuint32_t\tvnic_id;\n+\tuint32_t\tmask;\n \t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n+\t * When this bit is '1', the function is requested to accept\n+\t * multi-cast packets specified by the multicast addr table.\n \t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/**************************\n- * hwrm_cfa_vf_pair_alloc *\n- **************************/\n-\n-\n-/* hwrm_cfa_vf_pair_alloc_input (size:448b/56B) */\n-struct hwrm_cfa_vf_pair_alloc_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n+\t#define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_MCAST \\\n+\t\tUINT32_C(0x2)\n \t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n+\t * When this bit is '1', the function is requested to accept\n+\t * all multi-cast packets.\n \t */\n-\tuint16_t\tcmpl_ring;\n+\t#define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_ALL_MCAST \\\n+\t\tUINT32_C(0x4)\n \t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n+\t * When this bit is '1', the function is requested to accept\n+\t * broadcast packets.\n \t */\n-\tuint16_t\tseq_id;\n+\t#define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_BCAST \\\n+\t\tUINT32_C(0x8)\n \t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n+\t * When this bit is '1', the function is requested to be\n+\t * put in the promiscuous mode.\n+\t *\n+\t * The HWRM should accept any function to set up\n+\t * promiscuous mode.\n+\t *\n+\t * The HWRM shall follow the semantics below for the\n+\t * promiscuous mode support.\n+\t * # When partitioning is not enabled on a port\n+\t * (i.e. single PF on the port), then the PF shall\n+\t * be allowed to be in the promiscuous mode. When the\n+\t * PF is in the promiscuous mode, then it shall\n+\t * receive all host bound traffic on that port.\n+\t * # When partitioning is enabled on a port\n+\t * (i.e. multiple PFs per port) and a PF on that\n+\t * port is in the promiscuous mode, then the PF\n+\t * receives all traffic within that partition as\n+\t * identified by a unique identifier for the\n+\t * PF (e.g. S-Tag). If a unique outer VLAN\n+\t * for the PF is specified, then the setting of\n+\t * promiscuous mode on that PF shall result in the\n+\t * PF receiving all host bound traffic with matching\n+\t * outer VLAN.\n+\t * # A VF shall can be set in the promiscuous mode.\n+\t * In the promiscuous mode, the VF does not receive any\n+\t * traffic unless a unique outer VLAN for the\n+\t * VF is specified. If a unique outer VLAN\n+\t * for the VF is specified, then the setting of\n+\t * promiscuous mode on that VF shall result in the\n+\t * VF receiving all host bound traffic with the\n+\t * matching outer VLAN.\n+\t * # The HWRM shall allow the setting of promiscuous\n+\t * mode on a function independently from the\n+\t * promiscuous mode settings on other functions.\n \t */\n-\tuint16_t\ttarget_id;\n+\t#define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_PROMISCUOUS \\\n+\t\tUINT32_C(0x10)\n \t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n+\t * If this flag is set, the corresponding RX\n+\t * filters shall be set up to cover multicast/broadcast\n+\t * filters for the outermost Layer 2 destination MAC\n+\t * address field.\n+\t */\n+\t#define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_OUTERMOST \\\n+\t\tUINT32_C(0x20)\n+\t/*\n+\t * If this flag is set, the corresponding RX\n+\t * filters shall be set up to cover multicast/broadcast\n+\t * filters for the VLAN-tagged packets that match the\n+\t * TPID and VID fields of VLAN tags in the VLAN tag\n+\t * table specified in this command.\n+\t */\n+\t#define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_VLANONLY \\\n+\t\tUINT32_C(0x40)\n+\t/*\n+\t * If this flag is set, the corresponding RX\n+\t * filters shall be set up to cover multicast/broadcast\n+\t * filters for non-VLAN tagged packets and VLAN-tagged\n+\t * packets that match the TPID and VID fields of VLAN\n+\t * tags in the VLAN tag table specified in this command.\n+\t */\n+\t#define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_VLAN_NONVLAN \\\n+\t\tUINT32_C(0x80)\n+\t/*\n+\t * If this flag is set, the corresponding RX\n+\t * filters shall be set up to cover multicast/broadcast\n+\t * filters for non-VLAN tagged packets and VLAN-tagged\n+\t * packets matching any VLAN tag.\n+\t *\n+\t * If this flag is set, then the HWRM shall ignore\n+\t * VLAN tags specified in vlan_tag_tbl.\n+\t *\n+\t * If none of vlanonly, vlan_nonvlan, and anyvlan_nonvlan\n+\t * flags is set, then the HWRM shall ignore\n+\t * VLAN tags specified in vlan_tag_tbl.\n+\t *\n+\t * The HWRM client shall set at most one flag out of\n+\t * vlanonly, vlan_nonvlan, and anyvlan_nonvlan.\n+\t */\n+\t#define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_ANYVLAN_NONVLAN \\\n+\t\tUINT32_C(0x100)\n+\t/* This is the address for mcast address tbl. */\n+\tuint64_t\tmc_tbl_addr;\n+\t/*\n+\t * This value indicates how many entries in mc_tbl are valid.\n+\t * Each entry is 6 bytes.\n+\t */\n+\tuint32_t\tnum_mc_entries;\n+\tuint8_t\tunused_0[4];\n+\t/*\n+\t * This is the address for VLAN tag table.\n+\t * Each VLAN entry in the table is 4 bytes of a VLAN tag\n+\t * including TPID, PCP, DEI, and VID fields in network byte\n+\t * order.\n+\t */\n+\tuint64_t\tvlan_tag_tbl_addr;\n+\t/*\n+\t * This value indicates how many entries in vlan_tag_tbl are\n+\t * valid. Each entry is 4 bytes.\n \t */\n-\tuint64_t\tresp_addr;\n-\t/* Logical VF number (range: 0 -> MAX_VFS -1). */\n-\tuint16_t\tvf_a_id;\n-\t/* Logical VF number (range: 0 -> MAX_VFS -1). */\n-\tuint16_t\tvf_b_id;\n-\tuint8_t\tunused_0[4];\n-\t/* VF Pair name (32 byte string). */\n-\tchar\tpair_name[32];\n+\tuint32_t\tnum_vlan_tags;\n+\tuint8_t\tunused_1[4];\n } __attribute__((packed));\n \n-/* hwrm_cfa_vf_pair_alloc_output (size:128b/16B) */\n-struct hwrm_cfa_vf_pair_alloc_output {\n+/* hwrm_cfa_l2_set_rx_mask_output (size:128b/16B) */\n+struct hwrm_cfa_l2_set_rx_mask_output {\n \t/* The specific error status for the command. */\n \tuint16_t\terror_code;\n \t/* The HWRM command request type. */\n@@ -24596,13 +18363,31 @@ struct hwrm_cfa_vf_pair_alloc_output {\n \tuint8_t\tvalid;\n } __attribute__((packed));\n \n-/*************************\n- * hwrm_cfa_vf_pair_free *\n- *************************/\n+/* hwrm_cfa_l2_set_rx_mask_cmd_err (size:64b/8B) */\n+struct hwrm_cfa_l2_set_rx_mask_cmd_err {\n+\t/*\n+\t * command specific error codes that goes to\n+\t * the cmd_err field in Common HWRM Error Response.\n+\t */\n+\tuint8_t\tcode;\n+\t/* Unknown error */\n+\t#define HWRM_CFA_L2_SET_RX_MASK_CMD_ERR_CODE_UNKNOWN \\\n+\t\tUINT32_C(0x0)\n+\t/* Unable to complete operation due to conflict with Ntuple Filter */\n+\t#define HWRM_CFA_L2_SET_RX_MASK_CMD_ERR_CODE_NTUPLE_FILTER_CONFLICT_ERR \\\n+\t\tUINT32_C(0x1)\n+\t#define HWRM_CFA_L2_SET_RX_MASK_CMD_ERR_CODE_LAST \\\n+\t\tHWRM_CFA_L2_SET_RX_MASK_CMD_ERR_CODE_NTUPLE_FILTER_CONFLICT_ERR\n+\tuint8_t\tunused_0[7];\n+} __attribute__((packed));\n+\n+/*******************************\n+ * hwrm_cfa_vlan_antispoof_cfg *\n+ *******************************/\n \n \n-/* hwrm_cfa_vf_pair_free_input (size:384b/48B) */\n-struct hwrm_cfa_vf_pair_free_input {\n+/* hwrm_cfa_vlan_antispoof_cfg_input (size:256b/32B) */\n+struct hwrm_cfa_vlan_antispoof_cfg_input {\n \t/* The HWRM command request type. */\n \tuint16_t\treq_type;\n \t/*\n@@ -24630,12 +18415,27 @@ struct hwrm_cfa_vf_pair_free_input {\n \t * point to a physically contiguous block of memory.\n \t */\n \tuint64_t\tresp_addr;\n-\t/* VF Pair name (32 byte string). */\n-\tchar\tpair_name[32];\n+\t/*\n+\t * Function ID of the function that is being configured.\n+\t * Only valid for a VF FID configured by the PF.\n+\t */\n+\tuint16_t\tfid;\n+\tuint8_t\tunused_0[2];\n+\t/* Number of VLAN entries in the vlan_tag_mask_tbl. */\n+\tuint32_t\tnum_vlan_entries;\n+\t/*\n+\t * The vlan_tag_mask_tbl_addr is the DMA address of the VLAN\n+\t * antispoof table. Each table entry contains the 16-bit TPID\n+\t * (0x8100 or 0x88a8 only), 16-bit VLAN ID, and a 16-bit mask,\n+\t * all in network order to match hwrm_cfa_l2_set_rx_mask.\n+\t * For an individual VLAN entry, the mask value should be 0xfff\n+\t * for the 12-bit VLAN ID.\n+\t */\n+\tuint64_t\tvlan_tag_mask_tbl_addr;\n } __attribute__((packed));\n \n-/* hwrm_cfa_vf_pair_free_output (size:128b/16B) */\n-struct hwrm_cfa_vf_pair_free_output {\n+/* hwrm_cfa_vlan_antispoof_cfg_output (size:128b/16B) */\n+struct hwrm_cfa_vlan_antispoof_cfg_output {\n \t/* The specific error status for the command. */\n \tuint16_t\terror_code;\n \t/* The HWRM command request type. */\n@@ -24655,13 +18455,13 @@ struct hwrm_cfa_vf_pair_free_output {\n \tuint8_t\tvalid;\n } __attribute__((packed));\n \n-/*************************\n- * hwrm_cfa_vf_pair_info *\n- *************************/\n+/********************************\n+ * hwrm_cfa_vlan_antispoof_qcfg *\n+ ********************************/\n \n \n-/* hwrm_cfa_vf_pair_info_input (size:448b/56B) */\n-struct hwrm_cfa_vf_pair_info_input {\n+/* hwrm_cfa_vlan_antispoof_qcfg_input (size:256b/32B) */\n+struct hwrm_cfa_vlan_antispoof_qcfg_input {\n \t/* The HWRM command request type. */\n \tuint16_t\treq_type;\n \t/*\n@@ -24689,18 +18489,30 @@ struct hwrm_cfa_vf_pair_info_input {\n \t * point to a physically contiguous block of memory.\n \t */\n \tuint64_t\tresp_addr;\n-\tuint32_t\tflags;\n-\t/* If this flag is set, lookup by name else lookup by index. */\n-\t#define HWRM_CFA_VF_PAIR_INFO_INPUT_FLAGS_LOOKUP_TYPE     UINT32_C(0x1)\n-\t/* vf pair table index. */\n-\tuint16_t\tvf_pair_index;\n+\t/*\n+\t * Function ID of the function that is being queried.\n+\t * Only valid for a VF FID queried by the PF.\n+\t */\n+\tuint16_t\tfid;\n \tuint8_t\tunused_0[2];\n-\t/* VF Pair name (32 byte string). */\n-\tchar\tvf_pair_name[32];\n+\t/*\n+\t * Maximum number of VLAN entries the firmware is allowed to DMA\n+\t * to vlan_tag_mask_tbl.\n+\t */\n+\tuint32_t\tmax_vlan_entries;\n+\t/*\n+\t * The vlan_tag_mask_tbl_addr is the DMA address of the VLAN\n+\t * antispoof table to which firmware will DMA to. Each table\n+\t * entry will contain the 16-bit TPID (0x8100 or 0x88a8 only),\n+\t * 16-bit VLAN ID, and a 16-bit mask, all in network order to\n+\t * match hwrm_cfa_l2_set_rx_mask. For an individual VLAN entry,\n+\t * the mask value should be 0xfff for the 12-bit VLAN ID.\n+\t */\n+\tuint64_t\tvlan_tag_mask_tbl_addr;\n } __attribute__((packed));\n \n-/* hwrm_cfa_vf_pair_info_output (size:512b/64B) */\n-struct hwrm_cfa_vf_pair_info_output {\n+/* hwrm_cfa_vlan_antispoof_qcfg_output (size:128b/16B) */\n+struct hwrm_cfa_vlan_antispoof_qcfg_output {\n \t/* The specific error status for the command. */\n \tuint16_t\terror_code;\n \t/* The HWRM command request type. */\n@@ -24709,28 +18521,9 @@ struct hwrm_cfa_vf_pair_info_output {\n \tuint16_t\tseq_id;\n \t/* The length of the response data in number of bytes. */\n \tuint16_t\tresp_len;\n-\t/* vf pair table index. */\n-\tuint16_t\tnext_vf_pair_index;\n-\t/* vf pair member a's vf_fid. */\n-\tuint16_t\tvf_a_fid;\n-\t/* vf pair member a's Linux logical VF number. */\n-\tuint16_t\tvf_a_index;\n-\t/* vf pair member b's vf_fid. */\n-\tuint16_t\tvf_b_fid;\n-\t/* vf pair member a's Linux logical VF number. */\n-\tuint16_t\tvf_b_index;\n-\t/* vf pair state. */\n-\tuint8_t\tpair_state;\n-\t/* Pair has been allocated */\n-\t#define HWRM_CFA_VF_PAIR_INFO_OUTPUT_PAIR_STATE_ALLOCATED UINT32_C(0x1)\n-\t/* Both pair members are active */\n-\t#define HWRM_CFA_VF_PAIR_INFO_OUTPUT_PAIR_STATE_ACTIVE    UINT32_C(0x2)\n-\t#define HWRM_CFA_VF_PAIR_INFO_OUTPUT_PAIR_STATE_LAST \\\n-\t\tHWRM_CFA_VF_PAIR_INFO_OUTPUT_PAIR_STATE_ACTIVE\n-\tuint8_t\tunused_0[5];\n-\t/* VF Pair name (32 byte string). */\n-\tchar\tpair_name[32];\n-\tuint8_t\tunused_1[7];\n+\t/* Number of valid entries DMAd by firmware to vlan_tag_mask_tbl. */\n+\tuint32_t\tnum_vlan_entries;\n+\tuint8_t\tunused_0[3];\n \t/*\n \t * This field is used in Output records to indicate that the output\n \t * is completely written to RAM.  This field should be read as '1'\n@@ -24741,13 +18534,13 @@ struct hwrm_cfa_vf_pair_info_output {\n \tuint8_t\tvalid;\n } __attribute__((packed));\n \n-/***********************\n- * hwrm_cfa_pair_alloc *\n- ***********************/\n+/********************************\n+ * hwrm_cfa_ntuple_filter_alloc *\n+ ********************************/\n \n \n-/* hwrm_cfa_pair_alloc_input (size:576b/72B) */\n-struct hwrm_cfa_pair_alloc_input {\n+/* hwrm_cfa_ntuple_filter_alloc_input (size:1024b/128B) */\n+struct hwrm_cfa_ntuple_filter_alloc_input {\n \t/* The HWRM command request type. */\n \tuint16_t\treq_type;\n \t/*\n@@ -24775,346 +18568,316 @@ struct hwrm_cfa_pair_alloc_input {\n \t * point to a physically contiguous block of memory.\n \t */\n \tuint64_t\tresp_addr;\n-\t/* Pair mode (0-vf2fn, 1-rep2fn, 2-rep2rep, 3-proxy, 4-pfpair, 5-rep2fn_mod). */\n-\tuint8_t\tpair_mode;\n-\t/* Pair between VF on local host with PF or VF on specified host. */\n-\t#define HWRM_CFA_PAIR_ALLOC_INPUT_PAIR_MODE_VF2FN         UINT32_C(0x0)\n-\t/* Pair between REP on local host with PF or VF on specified host. */\n-\t#define HWRM_CFA_PAIR_ALLOC_INPUT_PAIR_MODE_REP2FN        UINT32_C(0x1)\n-\t/* Pair between REP on local host with REP on specified host. */\n-\t#define HWRM_CFA_PAIR_ALLOC_INPUT_PAIR_MODE_REP2REP       UINT32_C(0x2)\n-\t/* Pair for the proxy interface. */\n-\t#define HWRM_CFA_PAIR_ALLOC_INPUT_PAIR_MODE_PROXY         UINT32_C(0x3)\n-\t/* Pair for the PF interface. */\n-\t#define HWRM_CFA_PAIR_ALLOC_INPUT_PAIR_MODE_PFPAIR        UINT32_C(0x4)\n-\t/* Modify exiting rep2fn pair and move pair to new PF. */\n-\t#define HWRM_CFA_PAIR_ALLOC_INPUT_PAIR_MODE_REP2FN_MOD    UINT32_C(0x5)\n-\t/* Modify exiting rep2fn pairs paired with same PF and move pairs to new PF. */\n-\t#define HWRM_CFA_PAIR_ALLOC_INPUT_PAIR_MODE_REP2FN_MODALL UINT32_C(0x6)\n-\t#define HWRM_CFA_PAIR_ALLOC_INPUT_PAIR_MODE_LAST \\\n-\t\tHWRM_CFA_PAIR_ALLOC_INPUT_PAIR_MODE_REP2FN_MODALL\n-\tuint8_t\tunused_0;\n-\t/* Logical VF number (range: 0 -> MAX_VFS -1). */\n-\tuint16_t\tvf_a_id;\n-\t/* Logical Host (0xff-local host). */\n-\tuint8_t\thost_b_id;\n-\t/* Logical PF (0xff-PF for command channel). */\n-\tuint8_t\tpf_b_id;\n-\t/* Logical VF number (range: 0 -> MAX_VFS -1). */\n-\tuint16_t\tvf_b_id;\n-\t/* Loopback port (0xff-internal loopback), valid for mode-3. */\n-\tuint8_t\tport_id;\n-\t/* Priority used for encap of loopback packets valid for mode-3. */\n-\tuint8_t\tpri;\n-\t/* New PF for rep2fn modify, valid for mode 5. */\n-\tuint16_t\tnew_pf_fid;\n+\tuint32_t\tflags;\n+\t/* Setting of this flag indicates the applicability to the loopback path. */\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_FLAGS_LOOPBACK \\\n+\t\tUINT32_C(0x1)\n+\t/*\n+\t * Setting of this flag indicates drop action. If this flag is not set,\n+\t * then it should be considered accept action.\n+\t */\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_FLAGS_DROP \\\n+\t\tUINT32_C(0x2)\n+\t/*\n+\t * Setting of this flag indicates that a meter is expected to be attached\n+\t * to this flow. This hint can be used when choosing the action record\n+\t * format required for the flow.\n+\t */\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_FLAGS_METER \\\n+\t\tUINT32_C(0x4)\n \tuint32_t\tenables;\n \t/*\n-\t * This bit must be '1' for the q_ab field to be\n+\t * This bit must be '1' for the l2_filter_id field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_L2_FILTER_ID \\\n+\t\tUINT32_C(0x1)\n+\t/*\n+\t * This bit must be '1' for the ethertype field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_ETHERTYPE \\\n+\t\tUINT32_C(0x2)\n+\t/*\n+\t * This bit must be '1' for the tunnel_type field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_TUNNEL_TYPE \\\n+\t\tUINT32_C(0x4)\n+\t/*\n+\t * This bit must be '1' for the src_macaddr field to be\n \t * configured.\n \t */\n-\t#define HWRM_CFA_PAIR_ALLOC_INPUT_ENABLES_Q_AB_VALID      UINT32_C(0x1)\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_SRC_MACADDR \\\n+\t\tUINT32_C(0x8)\n \t/*\n-\t * This bit must be '1' for the q_ba field to be\n+\t * This bit must be '1' for the ipaddr_type field to be\n \t * configured.\n \t */\n-\t#define HWRM_CFA_PAIR_ALLOC_INPUT_ENABLES_Q_BA_VALID      UINT32_C(0x2)\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_IPADDR_TYPE \\\n+\t\tUINT32_C(0x10)\n \t/*\n-\t * This bit must be '1' for the fc_ab field to be\n+\t * This bit must be '1' for the src_ipaddr field to be\n \t * configured.\n \t */\n-\t#define HWRM_CFA_PAIR_ALLOC_INPUT_ENABLES_FC_AB_VALID     UINT32_C(0x4)\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_SRC_IPADDR \\\n+\t\tUINT32_C(0x20)\n \t/*\n-\t * This bit must be '1' for the fc_ba field to be\n+\t * This bit must be '1' for the src_ipaddr_mask field to be\n \t * configured.\n \t */\n-\t#define HWRM_CFA_PAIR_ALLOC_INPUT_ENABLES_FC_BA_VALID     UINT32_C(0x8)\n-\t/* VF Pair name (32 byte string). */\n-\tchar\tpair_name[32];\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_SRC_IPADDR_MASK \\\n+\t\tUINT32_C(0x40)\n \t/*\n-\t * The q_ab value specifies the logical index of the TX/RX CoS\n-\t * queue to be assigned for traffic in the A to B direction of\n-\t * the interface pair. The default value is 0.\n+\t * This bit must be '1' for the dst_ipaddr field to be\n+\t * configured.\n \t */\n-\tuint8_t\tq_ab;\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_IPADDR \\\n+\t\tUINT32_C(0x80)\n \t/*\n-\t * The q_ba value specifies the logical index of the TX/RX CoS\n-\t * queue to be assigned for traffic in the B to A direction of\n-\t * the interface pair. The default value is 1.\n+\t * This bit must be '1' for the dst_ipaddr_mask field to be\n+\t * configured.\n \t */\n-\tuint8_t\tq_ba;\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_IPADDR_MASK \\\n+\t\tUINT32_C(0x100)\n \t/*\n-\t * Specifies whether RX ring flow control is disabled (0) or enabled\n-\t * (1) in the A to B direction. The default value is 0, meaning that\n-\t * packets will be dropped when the B-side RX rings are full.\n+\t * This bit must be '1' for the ip_protocol field to be\n+\t * configured.\n \t */\n-\tuint8_t\tfc_ab;\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_IP_PROTOCOL \\\n+\t\tUINT32_C(0x200)\n \t/*\n-\t * Specifies whether RX ring flow control is disabled (0) or enabled\n-\t * (1) in the B to A direction. The default value is 1, meaning that\n-\t * the RX CoS queue will be flow controlled when the A-side RX rings\n-\t * are full.\n+\t * This bit must be '1' for the src_port field to be\n+\t * configured.\n \t */\n-\tuint8_t\tfc_ba;\n-\tuint8_t\tunused_1[4];\n-} __attribute__((packed));\n-\n-/* hwrm_cfa_pair_alloc_output (size:192b/24B) */\n-struct hwrm_cfa_pair_alloc_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\t/* Only valid for modes 1 and 2. */\n-\tuint16_t\trx_cfa_code_a;\n-\t/* Only valid for modes 1 and 2. */\n-\tuint16_t\ttx_cfa_action_a;\n-\t/* Only valid for mode 2. */\n-\tuint16_t\trx_cfa_code_b;\n-\t/* Only valid for mode 2. */\n-\tuint16_t\ttx_cfa_action_b;\n-\tuint8_t\tunused_0[7];\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_SRC_PORT \\\n+\t\tUINT32_C(0x400)\n \t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n+\t * This bit must be '1' for the src_port_mask field to be\n+\t * configured.\n \t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/**********************\n- * hwrm_cfa_pair_free *\n- **********************/\n-\n-\n-/* hwrm_cfa_pair_free_input (size:384b/48B) */\n-struct hwrm_cfa_pair_free_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_SRC_PORT_MASK \\\n+\t\tUINT32_C(0x800)\n \t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n+\t * This bit must be '1' for the dst_port field to be\n+\t * configured.\n \t */\n-\tuint16_t\tcmpl_ring;\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_PORT \\\n+\t\tUINT32_C(0x1000)\n+\t/*\n+\t * This bit must be '1' for the dst_port_mask field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_PORT_MASK \\\n+\t\tUINT32_C(0x2000)\n+\t/*\n+\t * This bit must be '1' for the pri_hint field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_PRI_HINT \\\n+\t\tUINT32_C(0x4000)\n+\t/*\n+\t * This bit must be '1' for the ntuple_filter_id field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_NTUPLE_FILTER_ID \\\n+\t\tUINT32_C(0x8000)\n+\t/*\n+\t * This bit must be '1' for the dst_id field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_ID \\\n+\t\tUINT32_C(0x10000)\n+\t/*\n+\t * This bit must be '1' for the mirror_vnic_id field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_MIRROR_VNIC_ID \\\n+\t\tUINT32_C(0x20000)\n+\t/*\n+\t * This bit must be '1' for the dst_macaddr field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_MACADDR \\\n+\t\tUINT32_C(0x40000)\n+\t/*\n+\t * This value identifies a set of CFA data structures used for an L2\n+\t * context.\n+\t */\n+\tuint64_t\tl2_filter_id;\n+\t/*\n+\t * This value indicates the source MAC address in\n+\t * the Ethernet header.\n+\t */\n+\tuint8_t\tsrc_macaddr[6];\n+\t/* This value indicates the ethertype in the Ethernet header. */\n+\tuint16_t\tethertype;\n+\t/*\n+\t * This value indicates the type of IP address.\n+\t * 4 - IPv4\n+\t * 6 - IPv6\n+\t * All others are invalid.\n+\t */\n+\tuint8_t\tip_addr_type;\n+\t/* invalid */\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_UNKNOWN \\\n+\t\tUINT32_C(0x0)\n+\t/* IPv4 */\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_IPV4 \\\n+\t\tUINT32_C(0x4)\n+\t/* IPv6 */\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_IPV6 \\\n+\t\tUINT32_C(0x6)\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_LAST \\\n+\t\tHWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_IPV6\n \t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n+\t * The value of protocol filed in IP header.\n+\t * Applies to UDP and TCP traffic.\n+\t * 6 - TCP\n+\t * 17 - UDP\n \t */\n-\tuint16_t\tseq_id;\n+\tuint8_t\tip_protocol;\n+\t/* invalid */\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_PROTOCOL_UNKNOWN \\\n+\t\tUINT32_C(0x0)\n+\t/* TCP */\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_PROTOCOL_TCP \\\n+\t\tUINT32_C(0x6)\n+\t/* UDP */\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_PROTOCOL_UDP \\\n+\t\tUINT32_C(0x11)\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_PROTOCOL_LAST \\\n+\t\tHWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_PROTOCOL_UDP\n \t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n+\t * If set, this value shall represent the\n+\t * Logical VNIC ID of the destination VNIC for the RX\n+\t * path and network port id of the destination port for\n+\t * the TX path.\n \t */\n-\tuint16_t\ttarget_id;\n+\tuint16_t\tdst_id;\n \t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n+\t * Logical VNIC ID of the VNIC where traffic is\n+\t * mirrored.\n \t */\n-\tuint64_t\tresp_addr;\n-\t/* VF Pair name (32 byte string). */\n-\tchar\tpair_name[32];\n-} __attribute__((packed));\n-\n-/* hwrm_cfa_pair_free_output (size:128b/16B) */\n-struct hwrm_cfa_pair_free_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\tuint8_t\tunused_0[7];\n+\tuint16_t\tmirror_vnic_id;\n \t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n+\t * This value indicates the tunnel type for this filter.\n+\t * If this field is not specified, then the filter shall\n+\t * apply to both non-tunneled and tunneled packets.\n+\t * If this field conflicts with the tunnel_type specified\n+\t * in the l2_filter_id, then the HWRM shall return an\n+\t * error for this command.\n \t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/**********************\n- * hwrm_cfa_pair_info *\n- **********************/\n-\n-\n-/* hwrm_cfa_pair_info_input (size:448b/56B) */\n-struct hwrm_cfa_pair_info_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n+\tuint8_t\ttunnel_type;\n+\t/* Non-tunnel */\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NONTUNNEL \\\n+\t\tUINT32_C(0x0)\n+\t/* Virtual eXtensible Local Area Network (VXLAN) */\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN \\\n+\t\tUINT32_C(0x1)\n+\t/* Network Virtualization Generic Routing Encapsulation (NVGRE) */\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NVGRE \\\n+\t\tUINT32_C(0x2)\n+\t/* Generic Routing Encapsulation (GRE) inside Ethernet payload */\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_L2GRE \\\n+\t\tUINT32_C(0x3)\n+\t/* IP in IP */\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPIP \\\n+\t\tUINT32_C(0x4)\n+\t/* Generic Network Virtualization Encapsulation (Geneve) */\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_GENEVE \\\n+\t\tUINT32_C(0x5)\n+\t/* Multi-Protocol Lable Switching (MPLS) */\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_MPLS \\\n+\t\tUINT32_C(0x6)\n+\t/* Stateless Transport Tunnel (STT) */\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_STT \\\n+\t\tUINT32_C(0x7)\n+\t/* Generic Routing Encapsulation (GRE) inside IP datagram payload */\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPGRE \\\n+\t\tUINT32_C(0x8)\n+\t/* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_V4 \\\n+\t\tUINT32_C(0x9)\n+\t/* Any tunneled traffic */\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL \\\n+\t\tUINT32_C(0xff)\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_LAST \\\n+\t\tHWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL\n \t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n+\t * This hint is provided to help in placing\n+\t * the filter in the filter table.\n \t */\n-\tuint16_t\tcmpl_ring;\n+\tuint8_t\tpri_hint;\n+\t/* No preference */\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_NO_PREFER \\\n+\t\tUINT32_C(0x0)\n+\t/* Above the given filter */\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_ABOVE \\\n+\t\tUINT32_C(0x1)\n+\t/* Below the given filter */\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_BELOW \\\n+\t\tUINT32_C(0x2)\n+\t/* As high as possible */\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_HIGHEST \\\n+\t\tUINT32_C(0x3)\n+\t/* As low as possible */\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_LOWEST \\\n+\t\tUINT32_C(0x4)\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_LAST \\\n+\t\tHWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_LOWEST\n \t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n+\t * The value of source IP address to be used in filtering.\n+\t * For IPv4, first four bytes represent the IP address.\n \t */\n-\tuint16_t\tseq_id;\n+\tuint32_t\tsrc_ipaddr[4];\n \t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n+\t * The value of source IP address mask to be used in\n+\t * filtering.\n+\t * For IPv4, first four bytes represent the IP address mask.\n \t */\n-\tuint16_t\ttarget_id;\n+\tuint32_t\tsrc_ipaddr_mask[4];\n \t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n+\t * The value of destination IP address to be used in filtering.\n+\t * For IPv4, first four bytes represent the IP address.\n \t */\n-\tuint64_t\tresp_addr;\n-\tuint32_t\tflags;\n-\t/* If this flag is set, lookup by name else lookup by index. */\n-\t#define HWRM_CFA_PAIR_INFO_INPUT_FLAGS_LOOKUP_TYPE      UINT32_C(0x1)\n-\t/* If this flag is set, lookup by PF id and VF id. */\n-\t#define HWRM_CFA_PAIR_INFO_INPUT_FLAGS_LOOKUP_REPRE     UINT32_C(0x2)\n-\t/* Pair table index. */\n-\tuint16_t\tpair_index;\n-\t/* Pair pf index. */\n-\tuint8_t\tpair_pfid;\n-\t/* Pair vf index. */\n-\tuint8_t\tpair_vfid;\n-\t/* Pair name (32 byte string). */\n-\tchar\tpair_name[32];\n-} __attribute__((packed));\n-\n-/* hwrm_cfa_pair_info_output (size:576b/72B) */\n-struct hwrm_cfa_pair_info_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\t/* Pair table index. */\n-\tuint16_t\tnext_pair_index;\n-\t/* Pair member a's fid. */\n-\tuint16_t\ta_fid;\n-\t/* Logical host number. */\n-\tuint8_t\thost_a_index;\n-\t/* Logical PF number. */\n-\tuint8_t\tpf_a_index;\n-\t/* Pair member a's Linux logical VF number. */\n-\tuint16_t\tvf_a_index;\n-\t/* Rx CFA code. */\n-\tuint16_t\trx_cfa_code_a;\n-\t/* Tx CFA action. */\n-\tuint16_t\ttx_cfa_action_a;\n-\t/* Pair member b's fid. */\n-\tuint16_t\tb_fid;\n-\t/* Logical host number. */\n-\tuint8_t\thost_b_index;\n-\t/* Logical PF number. */\n-\tuint8_t\tpf_b_index;\n-\t/* Pair member a's Linux logical VF number. */\n-\tuint16_t\tvf_b_index;\n-\t/* Rx CFA code. */\n-\tuint16_t\trx_cfa_code_b;\n-\t/* Tx CFA action. */\n-\tuint16_t\ttx_cfa_action_b;\n-\t/* Pair mode (0-vf2fn, 1-rep2fn, 2-rep2rep, 3-proxy, 4-pfpair). */\n-\tuint8_t\tpair_mode;\n-\t/* Pair between VF on local host with PF or VF on specified host. */\n-\t#define HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_MODE_VF2FN   UINT32_C(0x0)\n-\t/* Pair between REP on local host with PF or VF on specified host. */\n-\t#define HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_MODE_REP2FN  UINT32_C(0x1)\n-\t/* Pair between REP on local host with REP on specified host. */\n-\t#define HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_MODE_REP2REP UINT32_C(0x2)\n-\t/* Pair for the proxy interface. */\n-\t#define HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_MODE_PROXY   UINT32_C(0x3)\n-\t/* Pair for the PF interface. */\n-\t#define HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_MODE_PFPAIR  UINT32_C(0x4)\n-\t#define HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_MODE_LAST \\\n-\t\tHWRM_CFA_PAIR_INFO_OUTPUT_PAIR_MODE_PFPAIR\n-\t/* Pair state. */\n-\tuint8_t\tpair_state;\n-\t/* Pair has been allocated */\n-\t#define HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_STATE_ALLOCATED UINT32_C(0x1)\n-\t/* Both pair members are active */\n-\t#define HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_STATE_ACTIVE    UINT32_C(0x2)\n-\t#define HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_STATE_LAST \\\n-\t\tHWRM_CFA_PAIR_INFO_OUTPUT_PAIR_STATE_ACTIVE\n-\t/* Pair name (32 byte string). */\n-\tchar\tpair_name[32];\n-\tuint8_t\tunused_0[7];\n+\tuint32_t\tdst_ipaddr[4];\n \t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n+\t * The value of destination IP address mask to be used in\n+\t * filtering.\n+\t * For IPv4, first four bytes represent the IP address mask.\n \t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/**********************\n- * hwrm_cfa_vfr_alloc *\n- **********************/\n-\n-\n-/* hwrm_cfa_vfr_alloc_input (size:448b/56B) */\n-struct hwrm_cfa_vfr_alloc_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n+\tuint32_t\tdst_ipaddr_mask[4];\n \t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n+\t * The value of source port to be used in filtering.\n+\t * Applies to UDP and TCP traffic.\n \t */\n-\tuint16_t\tcmpl_ring;\n+\tuint16_t\tsrc_port;\n \t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n+\t * The value of source port mask to be used in filtering.\n+\t * Applies to UDP and TCP traffic.\n \t */\n-\tuint16_t\tseq_id;\n+\tuint16_t\tsrc_port_mask;\n \t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n+\t * The value of destination port to be used in filtering.\n+\t * Applies to UDP and TCP traffic.\n \t */\n-\tuint16_t\ttarget_id;\n+\tuint16_t\tdst_port;\n \t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n+\t * The value of destination port mask to be used in\n+\t * filtering.\n+\t * Applies to UDP and TCP traffic.\n \t */\n-\tuint64_t\tresp_addr;\n-\t/* Logical VF number (range: 0 -> MAX_VFS -1). */\n-\tuint16_t\tvf_id;\n+\tuint16_t\tdst_port_mask;\n \t/*\n-\t * This field is reserved for the future use.\n-\t * It shall be set to 0.\n+\t * This is the ID of the filter that goes along with\n+\t * the pri_hint.\n \t */\n-\tuint16_t\treserved;\n-\tuint8_t\tunused_0[4];\n-\t/* VF Representor name (32 byte string). */\n-\tchar\tvfr_name[32];\n+\tuint64_t\tntuple_filter_id_hint;\n } __attribute__((packed));\n \n-/* hwrm_cfa_vfr_alloc_output (size:128b/16B) */\n-struct hwrm_cfa_vfr_alloc_output {\n+/* hwrm_cfa_ntuple_filter_alloc_output (size:192b/24B) */\n+struct hwrm_cfa_ntuple_filter_alloc_output {\n \t/* The specific error status for the command. */\n \tuint16_t\terror_code;\n \t/* The HWRM command request type. */\n@@ -25123,10 +18886,16 @@ struct hwrm_cfa_vfr_alloc_output {\n \tuint16_t\tseq_id;\n \t/* The length of the response data in number of bytes. */\n \tuint16_t\tresp_len;\n-\t/* Rx CFA code. */\n-\tuint16_t\trx_cfa_code;\n-\t/* Tx CFA action. */\n-\tuint16_t\ttx_cfa_action;\n+\t/* This value is an opaque id into CFA data structures. */\n+\tuint64_t\tntuple_filter_id;\n+\t/*\n+\t * This is the ID of the flow associated with this\n+\t * filter.\n+\t * This value shall be used to match and associate the\n+\t * flow identifier returned in completion records.\n+\t * A value of 0xFFFFFFFF shall indicate no flow id.\n+\t */\n+\tuint32_t\tflow_id;\n \tuint8_t\tunused_0[3];\n \t/*\n \t * This field is used in Output records to indicate that the output\n@@ -25138,13 +18907,31 @@ struct hwrm_cfa_vfr_alloc_output {\n \tuint8_t\tvalid;\n } __attribute__((packed));\n \n-/*********************\n- * hwrm_cfa_vfr_free *\n- *********************/\n+/* hwrm_cfa_ntuple_filter_alloc_cmd_err (size:64b/8B) */\n+struct hwrm_cfa_ntuple_filter_alloc_cmd_err {\n+\t/*\n+\t * command specific error codes that goes to\n+\t * the cmd_err field in Common HWRM Error Response.\n+\t */\n+\tuint8_t\tcode;\n+\t/* Unknown error */\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_CMD_ERR_CODE_UNKNOWN \\\n+\t\tUINT32_C(0x0)\n+\t/* Unable to complete operation due to conflict with Rx Mask VLAN */\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_CMD_ERR_CODE_RX_MASK_VLAN_CONFLICT_ERR \\\n+\t\tUINT32_C(0x1)\n+\t#define HWRM_CFA_NTUPLE_FILTER_ALLOC_CMD_ERR_CODE_LAST \\\n+\t\tHWRM_CFA_NTUPLE_FILTER_ALLOC_CMD_ERR_CODE_RX_MASK_VLAN_CONFLICT_ERR\n+\tuint8_t\tunused_0[7];\n+} __attribute__((packed));\n+\n+/*******************************\n+ * hwrm_cfa_ntuple_filter_free *\n+ *******************************/\n \n \n-/* hwrm_cfa_vfr_free_input (size:384b/48B) */\n-struct hwrm_cfa_vfr_free_input {\n+/* hwrm_cfa_ntuple_filter_free_input (size:192b/24B) */\n+struct hwrm_cfa_ntuple_filter_free_input {\n \t/* The HWRM command request type. */\n \tuint16_t\treq_type;\n \t/*\n@@ -25172,12 +18959,12 @@ struct hwrm_cfa_vfr_free_input {\n \t * point to a physically contiguous block of memory.\n \t */\n \tuint64_t\tresp_addr;\n-\t/* VF Representor name (32 byte string). */\n-\tchar\tvfr_name[32];\n+\t/* This value is an opaque id into CFA data structures. */\n+\tuint64_t\tntuple_filter_id;\n } __attribute__((packed));\n \n-/* hwrm_cfa_vfr_free_output (size:128b/16B) */\n-struct hwrm_cfa_vfr_free_output {\n+/* hwrm_cfa_ntuple_filter_free_output (size:128b/16B) */\n+struct hwrm_cfa_ntuple_filter_free_output {\n \t/* The specific error status for the command. */\n \tuint16_t\terror_code;\n \t/* The HWRM command request type. */\n@@ -25198,12 +18985,12 @@ struct hwrm_cfa_vfr_free_output {\n } __attribute__((packed));\n \n /******************************\n- * hwrm_tunnel_dst_port_query *\n+ * hwrm_cfa_ntuple_filter_cfg *\n  ******************************/\n \n \n-/* hwrm_tunnel_dst_port_query_input (size:192b/24B) */\n-struct hwrm_tunnel_dst_port_query_input {\n+/* hwrm_cfa_ntuple_filter_cfg_input (size:384b/48B) */\n+struct hwrm_cfa_ntuple_filter_cfg_input {\n \t/* The HWRM command request type. */\n \tuint16_t\treq_type;\n \t/*\n@@ -25231,27 +19018,59 @@ struct hwrm_tunnel_dst_port_query_input {\n \t * point to a physically contiguous block of memory.\n \t */\n \tuint64_t\tresp_addr;\n-\t/* Tunnel Type. */\n-\tuint8_t\ttunnel_type;\n-\t/* Virtual eXtensible Local Area Network (VXLAN) */\n-\t#define HWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_VXLAN \\\n+\tuint32_t\tenables;\n+\t/*\n+\t * This bit must be '1' for the new_dst_id field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_ENABLES_NEW_DST_ID \\\n \t\tUINT32_C(0x1)\n-\t/* Generic Network Virtualization Encapsulation (Geneve) */\n-\t#define HWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_GENEVE \\\n-\t\tUINT32_C(0x5)\n-\t/* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */\n-\t#define HWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_VXLAN_V4 \\\n-\t\tUINT32_C(0x9)\n-\t/* Enhance Generic Routing Encapsulation (GRE version 1) inside IP datagram payload */\n-\t#define HWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_IPGRE_V1 \\\n-\t\tUINT32_C(0xa)\n-\t#define HWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_LAST \\\n-\t\tHWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_IPGRE_V1\n-\tuint8_t\tunused_0[7];\n+\t/*\n+\t * This bit must be '1' for the new_mirror_vnic_id field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_ENABLES_NEW_MIRROR_VNIC_ID \\\n+\t\tUINT32_C(0x2)\n+\t/*\n+\t * This bit must be '1' for the new_meter_instance_id field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_ENABLES_NEW_METER_INSTANCE_ID \\\n+\t\tUINT32_C(0x4)\n+\tuint8_t\tunused_0[4];\n+\t/* This value is an opaque id into CFA data structures. */\n+\tuint64_t\tntuple_filter_id;\n+\t/*\n+\t * If set, this value shall represent the new\n+\t * Logical VNIC ID of the destination VNIC for the RX\n+\t * path and new network port id of the destination port for\n+\t * the TX path.\n+\t */\n+\tuint32_t\tnew_dst_id;\n+\t/*\n+\t * New Logical VNIC ID of the VNIC where traffic is\n+\t * mirrored.\n+\t */\n+\tuint32_t\tnew_mirror_vnic_id;\n+\t/*\n+\t * New meter to attach to the flow. Specifying the\n+\t * invalid instance ID is used to remove any existing\n+\t * meter from the flow.\n+\t */\n+\tuint16_t\tnew_meter_instance_id;\n+\t/*\n+\t * A value of 0xfff is considered invalid and implies the\n+\t * instance is not configured.\n+\t */\n+\t#define HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_NEW_METER_INSTANCE_ID_INVALID \\\n+\t\tUINT32_C(0xffff)\n+\t#define HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_NEW_METER_INSTANCE_ID_LAST \\\n+\t\tHWRM_CFA_NTUPLE_FILTER_CFG_INPUT_NEW_METER_INSTANCE_ID_INVALID\n+\tuint8_t\tunused_1[6];\n } __attribute__((packed));\n \n-/* hwrm_tunnel_dst_port_query_output (size:128b/16B) */\n-struct hwrm_tunnel_dst_port_query_output {\n+/* hwrm_cfa_ntuple_filter_cfg_output (size:128b/16B) */\n+struct hwrm_cfa_ntuple_filter_cfg_output {\n \t/* The specific error status for the command. */\n \tuint16_t\terror_code;\n \t/* The HWRM command request type. */\n@@ -25260,25 +19079,7 @@ struct hwrm_tunnel_dst_port_query_output {\n \tuint16_t\tseq_id;\n \t/* The length of the response data in number of bytes. */\n \tuint16_t\tresp_len;\n-\t/*\n-\t * This field represents the identifier of L4 destination port\n-\t * used for the given tunnel type. This field is valid for\n-\t * specific tunnel types that use layer 4 (e.g. UDP)\n-\t * transports for tunneling.\n-\t */\n-\tuint16_t\ttunnel_dst_port_id;\n-\t/*\n-\t * This field represents the value of L4 destination port\n-\t * identified by tunnel_dst_port_id. This field is valid for\n-\t * specific tunnel types that use layer 4 (e.g. UDP)\n-\t * transports for tunneling.\n-\t * This field is in network byte order.\n-\t *\n-\t * A value of 0 means that the destination port is not\n-\t * configured.\n-\t */\n-\tuint16_t\ttunnel_dst_port_val;\n-\tuint8_t\tunused_0[3];\n+\tuint8_t\tunused_0[7];\n \t/*\n \t * This field is used in Output records to indicate that the output\n \t * is completely written to RAM.  This field should be read as '1'\n@@ -25289,13 +19090,13 @@ struct hwrm_tunnel_dst_port_query_output {\n \tuint8_t\tvalid;\n } __attribute__((packed));\n \n-/******************************\n- * hwrm_tunnel_dst_port_alloc *\n- ******************************/\n+/**************************\n+ * hwrm_cfa_em_flow_alloc *\n+ **************************/\n \n \n-/* hwrm_tunnel_dst_port_alloc_input (size:192b/24B) */\n-struct hwrm_tunnel_dst_port_alloc_input {\n+/* hwrm_cfa_em_flow_alloc_input (size:896b/112B) */\n+struct hwrm_cfa_em_flow_alloc_input {\n \t/* The HWRM command request type. */\n \tuint16_t\treq_type;\n \t/*\n@@ -25323,313 +19124,307 @@ struct hwrm_tunnel_dst_port_alloc_input {\n \t * point to a physically contiguous block of memory.\n \t */\n \tuint64_t\tresp_addr;\n-\t/* Tunnel Type. */\n-\tuint8_t\ttunnel_type;\n-\t/* Virtual eXtensible Local Area Network (VXLAN) */\n-\t#define HWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_VXLAN \\\n+\tuint32_t\tflags;\n+\t/*\n+\t * Enumeration denoting the RX, TX type of the resource.\n+\t * This enumeration is used for resources that are similar for both\n+\t * TX and RX paths of the chip.\n+\t */\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PATH         UINT32_C(0x1)\n+\t/* tx path */\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PATH_TX        UINT32_C(0x0)\n+\t/* rx path */\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PATH_RX        UINT32_C(0x1)\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PATH_LAST \\\n+\t\tHWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PATH_RX\n+\t/*\n+\t * Setting of this flag indicates enabling of a byte counter for a given\n+\t * flow.\n+\t */\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_BYTE_CTR     UINT32_C(0x2)\n+\t/*\n+\t * Setting of this flag indicates enabling of a packet counter for a given\n+\t * flow.\n+\t */\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PKT_CTR      UINT32_C(0x4)\n+\t/* Setting of this flag indicates de-capsulation action for the given flow. */\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_DECAP        UINT32_C(0x8)\n+\t/* Setting of this flag indicates encapsulation action for the given flow. */\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_ENCAP        UINT32_C(0x10)\n+\t/*\n+\t * Setting of this flag indicates drop action. If this flag is not set,\n+\t * then it should be considered accept action.\n+\t */\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_DROP         UINT32_C(0x20)\n+\t/*\n+\t * Setting of this flag indicates that a meter is expected to be attached\n+\t * to this flow. This hint can be used when choosing the action record\n+\t * format required for the flow.\n+\t */\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_METER        UINT32_C(0x40)\n+\tuint32_t\tenables;\n+\t/*\n+\t * This bit must be '1' for the l2_filter_id field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_L2_FILTER_ID \\\n \t\tUINT32_C(0x1)\n-\t/* Generic Network Virtualization Encapsulation (Geneve) */\n-\t#define HWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_GENEVE \\\n-\t\tUINT32_C(0x5)\n-\t/* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */\n-\t#define HWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_V4 \\\n-\t\tUINT32_C(0x9)\n-\t/* Enhance Generic Routing Encapsulation (GRE version 1) inside IP datagram payload */\n-\t#define HWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_IPGRE_V1 \\\n-\t\tUINT32_C(0xa)\n-\t#define HWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_LAST \\\n-\t\tHWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_IPGRE_V1\n-\tuint8_t\tunused_0;\n \t/*\n-\t * This field represents the value of L4 destination port used\n-\t * for the given tunnel type. This field is valid for\n-\t * specific tunnel types that use layer 4 (e.g. UDP)\n-\t * transports for tunneling.\n-\t *\n-\t * This field is in network byte order.\n-\t *\n-\t * A value of 0 shall fail the command.\n+\t * This bit must be '1' for the tunnel_type field to be\n+\t * configured.\n \t */\n-\tuint16_t\ttunnel_dst_port_val;\n-\tuint8_t\tunused_1[4];\n-} __attribute__((packed));\n-\n-/* hwrm_tunnel_dst_port_alloc_output (size:128b/16B) */\n-struct hwrm_tunnel_dst_port_alloc_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_TUNNEL_TYPE \\\n+\t\tUINT32_C(0x2)\n+\t/*\n+\t * This bit must be '1' for the tunnel_id field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_TUNNEL_ID \\\n+\t\tUINT32_C(0x4)\n+\t/*\n+\t * This bit must be '1' for the src_macaddr field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_SRC_MACADDR \\\n+\t\tUINT32_C(0x8)\n+\t/*\n+\t * This bit must be '1' for the dst_macaddr field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_DST_MACADDR \\\n+\t\tUINT32_C(0x10)\n+\t/*\n+\t * This bit must be '1' for the ovlan_vid field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_OVLAN_VID \\\n+\t\tUINT32_C(0x20)\n+\t/*\n+\t * This bit must be '1' for the ivlan_vid field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_IVLAN_VID \\\n+\t\tUINT32_C(0x40)\n+\t/*\n+\t * This bit must be '1' for the ethertype field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_ETHERTYPE \\\n+\t\tUINT32_C(0x80)\n+\t/*\n+\t * This bit must be '1' for the src_ipaddr field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_SRC_IPADDR \\\n+\t\tUINT32_C(0x100)\n+\t/*\n+\t * This bit must be '1' for the dst_ipaddr field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_DST_IPADDR \\\n+\t\tUINT32_C(0x200)\n+\t/*\n+\t * This bit must be '1' for the ipaddr_type field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_IPADDR_TYPE \\\n+\t\tUINT32_C(0x400)\n+\t/*\n+\t * This bit must be '1' for the ip_protocol field to be\n+\t * configured.\n+\t */\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_IP_PROTOCOL \\\n+\t\tUINT32_C(0x800)\n \t/*\n-\t * Identifier of a tunnel L4 destination port value. Only applies to tunnel\n-\t * types that has l4 destination port parameters.\n+\t * This bit must be '1' for the src_port field to be\n+\t * configured.\n \t */\n-\tuint16_t\ttunnel_dst_port_id;\n-\tuint8_t\tunused_0[5];\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_SRC_PORT \\\n+\t\tUINT32_C(0x1000)\n \t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n+\t * This bit must be '1' for the dst_port field to be\n+\t * configured.\n \t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/*****************************\n- * hwrm_tunnel_dst_port_free *\n- *****************************/\n-\n-\n-/* hwrm_tunnel_dst_port_free_input (size:192b/24B) */\n-struct hwrm_tunnel_dst_port_free_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_DST_PORT \\\n+\t\tUINT32_C(0x2000)\n \t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n+\t * This bit must be '1' for the dst_id field to be\n+\t * configured.\n \t */\n-\tuint16_t\tcmpl_ring;\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_DST_ID \\\n+\t\tUINT32_C(0x4000)\n \t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n+\t * This bit must be '1' for the mirror_vnic_id field to be\n+\t * configured.\n \t */\n-\tuint16_t\tseq_id;\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_MIRROR_VNIC_ID \\\n+\t\tUINT32_C(0x8000)\n \t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n+\t * This bit must be '1' for the encap_record_id field to be\n+\t * configured.\n \t */\n-\tuint16_t\ttarget_id;\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_ENCAP_RECORD_ID \\\n+\t\tUINT32_C(0x10000)\n \t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n+\t * This bit must be '1' for the meter_instance_id field to be\n+\t * configured.\n \t */\n-\tuint64_t\tresp_addr;\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_METER_INSTANCE_ID \\\n+\t\tUINT32_C(0x20000)\n+\t/*\n+\t * This value identifies a set of CFA data structures used for an L2\n+\t * context.\n+\t */\n+\tuint64_t\tl2_filter_id;\n \t/* Tunnel Type. */\n \tuint8_t\ttunnel_type;\n+\t/* Non-tunnel */\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_NONTUNNEL \\\n+\t\tUINT32_C(0x0)\n \t/* Virtual eXtensible Local Area Network (VXLAN) */\n-\t#define HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_VXLAN \\\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_VXLAN \\\n \t\tUINT32_C(0x1)\n+\t/* Network Virtualization Generic Routing Encapsulation (NVGRE) */\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_NVGRE \\\n+\t\tUINT32_C(0x2)\n+\t/* Generic Routing Encapsulation (GRE) inside Ethernet payload */\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_L2GRE \\\n+\t\tUINT32_C(0x3)\n+\t/* IP in IP */\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_IPIP \\\n+\t\tUINT32_C(0x4)\n \t/* Generic Network Virtualization Encapsulation (Geneve) */\n-\t#define HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_GENEVE \\\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_GENEVE \\\n \t\tUINT32_C(0x5)\n+\t/* Multi-Protocol Lable Switching (MPLS) */\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_MPLS \\\n+\t\tUINT32_C(0x6)\n+\t/* Stateless Transport Tunnel (STT) */\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_STT \\\n+\t\tUINT32_C(0x7)\n+\t/* Generic Routing Encapsulation (GRE) inside IP datagram payload */\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_IPGRE \\\n+\t\tUINT32_C(0x8)\n \t/* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */\n-\t#define HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_VXLAN_V4 \\\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_V4 \\\n \t\tUINT32_C(0x9)\n-\t/* Enhance Generic Routing Encapsulation (GRE version 1) inside IP datagram payload */\n-\t#define HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_IPGRE_V1 \\\n-\t\tUINT32_C(0xa)\n-\t#define HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_LAST \\\n-\t\tHWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_IPGRE_V1\n-\tuint8_t\tunused_0;\n+\t/* Any tunneled traffic */\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL \\\n+\t\tUINT32_C(0xff)\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_LAST \\\n+\t\tHWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL\n+\tuint8_t\tunused_0[3];\n \t/*\n-\t * Identifier of a tunnel L4 destination port value. Only applies to tunnel\n-\t * types that has l4 destination port parameters.\n+\t * Tunnel identifier.\n+\t * Virtual Network Identifier (VNI). Only valid with\n+\t * tunnel_types VXLAN, NVGRE, and Geneve.\n+\t * Only lower 24-bits of VNI field are used\n+\t * in setting up the filter.\n \t */\n-\tuint16_t\ttunnel_dst_port_id;\n-\tuint8_t\tunused_1[4];\n-} __attribute__((packed));\n-\n-/* hwrm_tunnel_dst_port_free_output (size:128b/16B) */\n-struct hwrm_tunnel_dst_port_free_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\tuint8_t\tunused_1[7];\n+\tuint32_t\ttunnel_id;\n \t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n+\t * This value indicates the source MAC address in\n+\t * the Ethernet header.\n \t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/* ctx_hw_stats (size:1280b/160B) */\n-struct ctx_hw_stats {\n-\t/* Number of received unicast packets */\n-\tuint64_t\trx_ucast_pkts;\n-\t/* Number of received multicast packets */\n-\tuint64_t\trx_mcast_pkts;\n-\t/* Number of received broadcast packets */\n-\tuint64_t\trx_bcast_pkts;\n-\t/* Number of discarded packets on received path */\n-\tuint64_t\trx_discard_pkts;\n-\t/* Number of dropped packets on received path */\n-\tuint64_t\trx_drop_pkts;\n-\t/* Number of received bytes for unicast traffic */\n-\tuint64_t\trx_ucast_bytes;\n-\t/* Number of received bytes for multicast traffic */\n-\tuint64_t\trx_mcast_bytes;\n-\t/* Number of received bytes for broadcast traffic */\n-\tuint64_t\trx_bcast_bytes;\n-\t/* Number of transmitted unicast packets */\n-\tuint64_t\ttx_ucast_pkts;\n-\t/* Number of transmitted multicast packets */\n-\tuint64_t\ttx_mcast_pkts;\n-\t/* Number of transmitted broadcast packets */\n-\tuint64_t\ttx_bcast_pkts;\n-\t/* Number of discarded packets on transmit path */\n-\tuint64_t\ttx_discard_pkts;\n-\t/* Number of dropped packets on transmit path */\n-\tuint64_t\ttx_drop_pkts;\n-\t/* Number of transmitted bytes for unicast traffic */\n-\tuint64_t\ttx_ucast_bytes;\n-\t/* Number of transmitted bytes for multicast traffic */\n-\tuint64_t\ttx_mcast_bytes;\n-\t/* Number of transmitted bytes for broadcast traffic */\n-\tuint64_t\ttx_bcast_bytes;\n-\t/* Number of TPA packets */\n-\tuint64_t\ttpa_pkts;\n-\t/* Number of TPA bytes */\n-\tuint64_t\ttpa_bytes;\n-\t/* Number of TPA events */\n-\tuint64_t\ttpa_events;\n-\t/* Number of TPA aborts */\n-\tuint64_t\ttpa_aborts;\n-} __attribute__((packed));\n-\n-/***********************\n- * hwrm_stat_ctx_alloc *\n- ***********************/\n-\n-\n-/* hwrm_stat_ctx_alloc_input (size:256b/32B) */\n-struct hwrm_stat_ctx_alloc_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n+\tuint8_t\tsrc_macaddr[6];\n+\t/* The meter instance to attach to the flow. */\n+\tuint16_t\tmeter_instance_id;\n \t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n+\t * A value of 0xfff is considered invalid and implies the\n+\t * instance is not configured.\n \t */\n-\tuint16_t\tcmpl_ring;\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_METER_INSTANCE_ID_INVALID \\\n+\t\tUINT32_C(0xffff)\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_METER_INSTANCE_ID_LAST \\\n+\t\tHWRM_CFA_EM_FLOW_ALLOC_INPUT_METER_INSTANCE_ID_INVALID\n \t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n+\t * This value indicates the destination MAC address in\n+\t * the Ethernet header.\n \t */\n-\tuint16_t\tseq_id;\n+\tuint8_t\tdst_macaddr[6];\n \t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n+\t * This value indicates the VLAN ID of the outer VLAN tag\n+\t * in the Ethernet header.\n \t */\n-\tuint16_t\ttarget_id;\n+\tuint16_t\tovlan_vid;\n \t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n+\t * This value indicates the VLAN ID of the inner VLAN tag\n+\t * in the Ethernet header.\n \t */\n-\tuint64_t\tresp_addr;\n-\t/* This is the address for statistic block. */\n-\tuint64_t\tstats_dma_addr;\n+\tuint16_t\tivlan_vid;\n+\t/* This value indicates the ethertype in the Ethernet header. */\n+\tuint16_t\tethertype;\n \t/*\n-\t * The statistic block update period in ms.\n-\t * e.g. 250ms, 500ms, 750ms, 1000ms.\n-\t * If update_period_ms is 0, then the stats update\n-\t * shall be never done and the DMA address shall not be used.\n-\t * In this case, the stat block can only be read by\n-\t * hwrm_stat_ctx_query command.\n+\t * This value indicates the type of IP address.\n+\t * 4 - IPv4\n+\t * 6 - IPv6\n+\t * All others are invalid.\n \t */\n-\tuint32_t\tupdate_period_ms;\n+\tuint8_t\tip_addr_type;\n+\t/* invalid */\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_ADDR_TYPE_UNKNOWN UINT32_C(0x0)\n+\t/* IPv4 */\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_ADDR_TYPE_IPV4    UINT32_C(0x4)\n+\t/* IPv6 */\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_ADDR_TYPE_IPV6    UINT32_C(0x6)\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_ADDR_TYPE_LAST \\\n+\t\tHWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_ADDR_TYPE_IPV6\n \t/*\n-\t * This field is used to specify statistics context specific\n-\t * configuration flags.\n+\t * The value of protocol filed in IP header.\n+\t * Applies to UDP and TCP traffic.\n+\t * 6 - TCP\n+\t * 17 - UDP\n \t */\n-\tuint8_t\tstat_ctx_flags;\n+\tuint8_t\tip_protocol;\n+\t/* invalid */\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_PROTOCOL_UNKNOWN UINT32_C(0x0)\n+\t/* TCP */\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_PROTOCOL_TCP     UINT32_C(0x6)\n+\t/* UDP */\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_PROTOCOL_UDP     UINT32_C(0x11)\n+\t#define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_PROTOCOL_LAST \\\n+\t\tHWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_PROTOCOL_UDP\n+\tuint8_t\tunused_1[2];\n \t/*\n-\t * When this bit is set to '1', the statistics context shall be\n-\t * allocated for RoCE traffic only. In this case, traffic other\n-\t * than offloaded RoCE traffic shall not be included in this\n-\t * statistic context.\n-\t * When this bit is set to '0', the statistics context shall be\n-\t * used for the network traffic other than offloaded RoCE traffic.\n+\t * The value of source IP address to be used in filtering.\n+\t * For IPv4, first four bytes represent the IP address.\n \t */\n-\t#define HWRM_STAT_CTX_ALLOC_INPUT_STAT_CTX_FLAGS_ROCE     UINT32_C(0x1)\n-\tuint8_t\tunused_0[3];\n-} __attribute__((packed));\n-\n-/* hwrm_stat_ctx_alloc_output (size:128b/16B) */\n-struct hwrm_stat_ctx_alloc_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\t/* This is the statistics context ID value. */\n-\tuint32_t\tstat_ctx_id;\n-\tuint8_t\tunused_0[3];\n+\tuint32_t\tsrc_ipaddr[4];\n \t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n+\t * big_endian = True\n+\t *     The value of destination IP address to be used in filtering.\n+\t *     For IPv4, first four bytes represent the IP address.\n \t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/**********************\n- * hwrm_stat_ctx_free *\n- **********************/\n-\n-\n-/* hwrm_stat_ctx_free_input (size:192b/24B) */\n-struct hwrm_stat_ctx_free_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n+\tuint32_t\tdst_ipaddr[4];\n \t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n+\t * The value of source port to be used in filtering.\n+\t * Applies to UDP and TCP traffic.\n \t */\n-\tuint16_t\tcmpl_ring;\n+\tuint16_t\tsrc_port;\n \t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n+\t * The value of destination port to be used in filtering.\n+\t * Applies to UDP and TCP traffic.\n \t */\n-\tuint16_t\tseq_id;\n+\tuint16_t\tdst_port;\n \t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n+\t * If set, this value shall represent the\n+\t * Logical VNIC ID of the destination VNIC for the RX\n+\t * path and network port id of the destination port for\n+\t * the TX path.\n \t */\n-\tuint16_t\ttarget_id;\n+\tuint16_t\tdst_id;\n \t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n+\t * Logical VNIC ID of the VNIC where traffic is\n+\t * mirrored.\n \t */\n-\tuint64_t\tresp_addr;\n-\t/* ID of the statistics context that is being queried. */\n-\tuint32_t\tstat_ctx_id;\n-\tuint8_t\tunused_0[4];\n+\tuint16_t\tmirror_vnic_id;\n+\t/* Logical ID of the encapsulation record. */\n+\tuint32_t\tencap_record_id;\n+\tuint8_t\tunused_2[4];\n } __attribute__((packed));\n \n-/* hwrm_stat_ctx_free_output (size:128b/16B) */\n-struct hwrm_stat_ctx_free_output {\n+/* hwrm_cfa_em_flow_alloc_output (size:192b/24B) */\n+struct hwrm_cfa_em_flow_alloc_output {\n \t/* The specific error status for the command. */\n \tuint16_t\terror_code;\n \t/* The HWRM command request type. */\n@@ -25638,8 +19433,16 @@ struct hwrm_stat_ctx_free_output {\n \tuint16_t\tseq_id;\n \t/* The length of the response data in number of bytes. */\n \tuint16_t\tresp_len;\n-\t/* This is the statistics context ID value. */\n-\tuint32_t\tstat_ctx_id;\n+\t/* This value is an opaque id into CFA data structures. */\n+\tuint64_t\tem_filter_id;\n+\t/*\n+\t * This is the ID of the flow associated with this\n+\t * filter.\n+\t * This value shall be used to match and associate the\n+\t * flow identifier returned in completion records.\n+\t * A value of 0xFFFFFFFF shall indicate no flow id.\n+\t */\n+\tuint32_t\tflow_id;\n \tuint8_t\tunused_0[3];\n \t/*\n \t * This field is used in Output records to indicate that the output\n@@ -25651,13 +19454,13 @@ struct hwrm_stat_ctx_free_output {\n \tuint8_t\tvalid;\n } __attribute__((packed));\n \n-/***********************\n- * hwrm_stat_ctx_query *\n- ***********************/\n+/*************************\n+ * hwrm_cfa_em_flow_free *\n+ *************************/\n \n \n-/* hwrm_stat_ctx_query_input (size:192b/24B) */\n-struct hwrm_stat_ctx_query_input {\n+/* hwrm_cfa_em_flow_free_input (size:192b/24B) */\n+struct hwrm_cfa_em_flow_free_input {\n \t/* The HWRM command request type. */\n \tuint16_t\treq_type;\n \t/*\n@@ -25685,13 +19488,12 @@ struct hwrm_stat_ctx_query_input {\n \t * point to a physically contiguous block of memory.\n \t */\n \tuint64_t\tresp_addr;\n-\t/* ID of the statistics context that is being queried. */\n-\tuint32_t\tstat_ctx_id;\n-\tuint8_t\tunused_0[4];\n+\t/* This value is an opaque id into CFA data structures. */\n+\tuint64_t\tem_filter_id;\n } __attribute__((packed));\n \n-/* hwrm_stat_ctx_query_output (size:1408b/176B) */\n-struct hwrm_stat_ctx_query_output {\n+/* hwrm_cfa_em_flow_free_output (size:128b/16B) */\n+struct hwrm_cfa_em_flow_free_output {\n \t/* The specific error status for the command. */\n \tuint16_t\terror_code;\n \t/* The HWRM command request type. */\n@@ -25700,46 +19502,6 @@ struct hwrm_stat_ctx_query_output {\n \tuint16_t\tseq_id;\n \t/* The length of the response data in number of bytes. */\n \tuint16_t\tresp_len;\n-\t/* Number of transmitted unicast packets */\n-\tuint64_t\ttx_ucast_pkts;\n-\t/* Number of transmitted multicast packets */\n-\tuint64_t\ttx_mcast_pkts;\n-\t/* Number of transmitted broadcast packets */\n-\tuint64_t\ttx_bcast_pkts;\n-\t/* Number of transmitted packets with error */\n-\tuint64_t\ttx_err_pkts;\n-\t/* Number of dropped packets on transmit path */\n-\tuint64_t\ttx_drop_pkts;\n-\t/* Number of transmitted bytes for unicast traffic */\n-\tuint64_t\ttx_ucast_bytes;\n-\t/* Number of transmitted bytes for multicast traffic */\n-\tuint64_t\ttx_mcast_bytes;\n-\t/* Number of transmitted bytes for broadcast traffic */\n-\tuint64_t\ttx_bcast_bytes;\n-\t/* Number of received unicast packets */\n-\tuint64_t\trx_ucast_pkts;\n-\t/* Number of received multicast packets */\n-\tuint64_t\trx_mcast_pkts;\n-\t/* Number of received broadcast packets */\n-\tuint64_t\trx_bcast_pkts;\n-\t/* Number of received packets with error */\n-\tuint64_t\trx_err_pkts;\n-\t/* Number of dropped packets on received path */\n-\tuint64_t\trx_drop_pkts;\n-\t/* Number of received bytes for unicast traffic */\n-\tuint64_t\trx_ucast_bytes;\n-\t/* Number of received bytes for multicast traffic */\n-\tuint64_t\trx_mcast_bytes;\n-\t/* Number of received bytes for broadcast traffic */\n-\tuint64_t\trx_bcast_bytes;\n-\t/* Number of aggregated unicast packets */\n-\tuint64_t\trx_agg_pkts;\n-\t/* Number of aggregated unicast bytes */\n-\tuint64_t\trx_agg_bytes;\n-\t/* Number of aggregation events */\n-\tuint64_t\trx_agg_events;\n-\t/* Number of aborted aggregations */\n-\tuint64_t\trx_agg_aborts;\n \tuint8_t\tunused_0[7];\n \t/*\n \t * This field is used in Output records to indicate that the output\n@@ -25751,13 +19513,8 @@ struct hwrm_stat_ctx_query_output {\n \tuint8_t\tvalid;\n } __attribute__((packed));\n \n-/***************************\n- * hwrm_stat_ctx_clr_stats *\n- ***************************/\n-\n-\n-/* hwrm_stat_ctx_clr_stats_input (size:192b/24B) */\n-struct hwrm_stat_ctx_clr_stats_input {\n+/* hwrm_tunnel_dst_port_query_input (size:192b/24B) */\n+struct hwrm_tunnel_dst_port_query_input {\n \t/* The HWRM command request type. */\n \tuint16_t\treq_type;\n \t/*\n@@ -25785,13 +19542,27 @@ struct hwrm_stat_ctx_clr_stats_input {\n \t * point to a physically contiguous block of memory.\n \t */\n \tuint64_t\tresp_addr;\n-\t/* ID of the statistics context that is being queried. */\n-\tuint32_t\tstat_ctx_id;\n-\tuint8_t\tunused_0[4];\n+\t/* Tunnel Type. */\n+\tuint8_t\ttunnel_type;\n+\t/* Virtual eXtensible Local Area Network (VXLAN) */\n+\t#define HWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_VXLAN \\\n+\t\tUINT32_C(0x1)\n+\t/* Generic Network Virtualization Encapsulation (Geneve) */\n+\t#define HWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_GENEVE \\\n+\t\tUINT32_C(0x5)\n+\t/* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */\n+\t#define HWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_VXLAN_V4 \\\n+\t\tUINT32_C(0x9)\n+\t/* Enhance Generic Routing Encapsulation (GRE version 1) inside IP datagram payload */\n+\t#define HWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_IPGRE_V1 \\\n+\t\tUINT32_C(0xa)\n+\t#define HWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_LAST \\\n+\t\tHWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_IPGRE_V1\n+\tuint8_t\tunused_0[7];\n } __attribute__((packed));\n \n-/* hwrm_stat_ctx_clr_stats_output (size:128b/16B) */\n-struct hwrm_stat_ctx_clr_stats_output {\n+/* hwrm_tunnel_dst_port_query_output (size:128b/16B) */\n+struct hwrm_tunnel_dst_port_query_output {\n \t/* The specific error status for the command. */\n \tuint16_t\terror_code;\n \t/* The HWRM command request type. */\n@@ -25800,7 +19571,25 @@ struct hwrm_stat_ctx_clr_stats_output {\n \tuint16_t\tseq_id;\n \t/* The length of the response data in number of bytes. */\n \tuint16_t\tresp_len;\n-\tuint8_t\tunused_0[7];\n+\t/*\n+\t * This field represents the identifier of L4 destination port\n+\t * used for the given tunnel type. This field is valid for\n+\t * specific tunnel types that use layer 4 (e.g. UDP)\n+\t * transports for tunneling.\n+\t */\n+\tuint16_t\ttunnel_dst_port_id;\n+\t/*\n+\t * This field represents the value of L4 destination port\n+\t * identified by tunnel_dst_port_id. This field is valid for\n+\t * specific tunnel types that use layer 4 (e.g. UDP)\n+\t * transports for tunneling.\n+\t * This field is in network byte order.\n+\t *\n+\t * A value of 0 means that the destination port is not\n+\t * configured.\n+\t */\n+\tuint16_t\ttunnel_dst_port_val;\n+\tuint8_t\tunused_0[3];\n \t/*\n \t * This field is used in Output records to indicate that the output\n \t * is completely written to RAM.  This field should be read as '1'\n@@ -25811,13 +19600,13 @@ struct hwrm_stat_ctx_clr_stats_output {\n \tuint8_t\tvalid;\n } __attribute__((packed));\n \n-/********************\n- * hwrm_pcie_qstats *\n- ********************/\n+/******************************\n+ * hwrm_tunnel_dst_port_alloc *\n+ ******************************/\n \n \n-/* hwrm_pcie_qstats_input (size:256b/32B) */\n-struct hwrm_pcie_qstats_input {\n+/* hwrm_tunnel_dst_port_alloc_input (size:192b/24B) */\n+struct hwrm_tunnel_dst_port_alloc_input {\n \t/* The HWRM command request type. */\n \tuint16_t\treq_type;\n \t/*\n@@ -25845,22 +19634,39 @@ struct hwrm_pcie_qstats_input {\n \t * point to a physically contiguous block of memory.\n \t */\n \tuint64_t\tresp_addr;\n+\t/* Tunnel Type. */\n+\tuint8_t\ttunnel_type;\n+\t/* Virtual eXtensible Local Area Network (VXLAN) */\n+\t#define HWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_VXLAN \\\n+\t\tUINT32_C(0x1)\n+\t/* Generic Network Virtualization Encapsulation (Geneve) */\n+\t#define HWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_GENEVE \\\n+\t\tUINT32_C(0x5)\n+\t/* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */\n+\t#define HWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_V4 \\\n+\t\tUINT32_C(0x9)\n+\t/* Enhance Generic Routing Encapsulation (GRE version 1) inside IP datagram payload */\n+\t#define HWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_IPGRE_V1 \\\n+\t\tUINT32_C(0xa)\n+\t#define HWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_LAST \\\n+\t\tHWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_IPGRE_V1\n+\tuint8_t\tunused_0;\n \t/*\n-\t * The size of PCIe statistics block in bytes.\n-\t * Firmware will DMA the PCIe statistics to\n-\t * the host with this field size in the response.\n-\t */\n-\tuint16_t\tpcie_stat_size;\n-\tuint8_t\tunused_0[6];\n-\t/*\n-\t * This is the host address where\n-\t * PCIe statistics will be stored\n+\t * This field represents the value of L4 destination port used\n+\t * for the given tunnel type. This field is valid for\n+\t * specific tunnel types that use layer 4 (e.g. UDP)\n+\t * transports for tunneling.\n+\t *\n+\t * This field is in network byte order.\n+\t *\n+\t * A value of 0 shall fail the command.\n \t */\n-\tuint64_t\tpcie_stat_host_addr;\n+\tuint16_t\ttunnel_dst_port_val;\n+\tuint8_t\tunused_1[4];\n } __attribute__((packed));\n \n-/* hwrm_pcie_qstats_output (size:128b/16B) */\n-struct hwrm_pcie_qstats_output {\n+/* hwrm_tunnel_dst_port_alloc_output (size:128b/16B) */\n+struct hwrm_tunnel_dst_port_alloc_output {\n \t/* The specific error status for the command. */\n \tuint16_t\terror_code;\n \t/* The HWRM command request type. */\n@@ -25869,8 +19675,11 @@ struct hwrm_pcie_qstats_output {\n \tuint16_t\tseq_id;\n \t/* The length of the response data in number of bytes. */\n \tuint16_t\tresp_len;\n-\t/* The size of PCIe statistics block in bytes. */\n-\tuint16_t\tpcie_stat_size;\n+\t/*\n+\t * Identifier of a tunnel L4 destination port value. Only applies to tunnel\n+\t * types that has l4 destination port parameters.\n+\t */\n+\tuint16_t\ttunnel_dst_port_id;\n \tuint8_t\tunused_0[5];\n \t/*\n \t * This field is used in Output records to indicate that the output\n@@ -25882,411 +19691,436 @@ struct hwrm_pcie_qstats_output {\n \tuint8_t\tvalid;\n } __attribute__((packed));\n \n-/* Port Tx Statistics Formats */\n-/* tx_port_stats (size:3264b/408B) */\n-struct tx_port_stats {\n-\t/* Total Number of 64 Bytes frames transmitted */\n-\tuint64_t\ttx_64b_frames;\n-\t/* Total Number of 65-127 Bytes frames transmitted */\n-\tuint64_t\ttx_65b_127b_frames;\n-\t/* Total Number of 128-255 Bytes frames transmitted */\n-\tuint64_t\ttx_128b_255b_frames;\n-\t/* Total Number of 256-511 Bytes frames transmitted */\n-\tuint64_t\ttx_256b_511b_frames;\n-\t/* Total Number of 512-1023 Bytes frames transmitted */\n-\tuint64_t\ttx_512b_1023b_frames;\n-\t/* Total Number of 1024-1518 Bytes frames transmitted */\n-\tuint64_t\ttx_1024b_1518_frames;\n-\t/*\n-\t * Total Number of each good VLAN (exludes FCS errors)\n-\t * frame transmitted which is 1519 to 1522 bytes in length\n-\t * inclusive (excluding framing bits but including FCS bytes).\n-\t */\n-\tuint64_t\ttx_good_vlan_frames;\n-\t/* Total Number of 1519-2047 Bytes frames transmitted */\n-\tuint64_t\ttx_1519b_2047_frames;\n-\t/* Total Number of 2048-4095 Bytes frames transmitted */\n-\tuint64_t\ttx_2048b_4095b_frames;\n-\t/* Total Number of 4096-9216 Bytes frames transmitted */\n-\tuint64_t\ttx_4096b_9216b_frames;\n-\t/* Total Number of 9217-16383 Bytes frames transmitted */\n-\tuint64_t\ttx_9217b_16383b_frames;\n-\t/* Total Number of good frames transmitted */\n-\tuint64_t\ttx_good_frames;\n-\t/* Total Number of frames transmitted */\n-\tuint64_t\ttx_total_frames;\n-\t/* Total number of unicast frames transmitted */\n-\tuint64_t\ttx_ucast_frames;\n-\t/* Total number of multicast frames transmitted */\n-\tuint64_t\ttx_mcast_frames;\n-\t/* Total number of broadcast frames transmitted */\n-\tuint64_t\ttx_bcast_frames;\n-\t/* Total number of PAUSE control frames transmitted */\n-\tuint64_t\ttx_pause_frames;\n-\t/*\n-\t * Total number of PFC/per-priority PAUSE\n-\t * control frames transmitted\n-\t */\n-\tuint64_t\ttx_pfc_frames;\n-\t/* Total number of jabber frames transmitted */\n-\tuint64_t\ttx_jabber_frames;\n-\t/* Total number of frames transmitted with FCS error */\n-\tuint64_t\ttx_fcs_err_frames;\n-\t/* Total number of control frames transmitted */\n-\tuint64_t\ttx_control_frames;\n-\t/* Total number of over-sized frames transmitted */\n-\tuint64_t\ttx_oversz_frames;\n-\t/* Total number of frames with single deferral */\n-\tuint64_t\ttx_single_dfrl_frames;\n-\t/* Total number of frames with multiple deferrals */\n-\tuint64_t\ttx_multi_dfrl_frames;\n-\t/* Total number of frames with single collision */\n-\tuint64_t\ttx_single_coll_frames;\n-\t/* Total number of frames with multiple collisions */\n-\tuint64_t\ttx_multi_coll_frames;\n-\t/* Total number of frames with late collisions */\n-\tuint64_t\ttx_late_coll_frames;\n-\t/* Total number of frames with excessive collisions */\n-\tuint64_t\ttx_excessive_coll_frames;\n-\t/* Total number of fragmented frames transmitted */\n-\tuint64_t\ttx_frag_frames;\n-\t/* Total number of transmit errors */\n-\tuint64_t\ttx_err;\n-\t/* Total number of single VLAN tagged frames transmitted */\n-\tuint64_t\ttx_tagged_frames;\n-\t/* Total number of double VLAN tagged frames transmitted */\n-\tuint64_t\ttx_dbl_tagged_frames;\n-\t/* Total number of runt frames transmitted */\n-\tuint64_t\ttx_runt_frames;\n-\t/* Total number of TX FIFO under runs */\n-\tuint64_t\ttx_fifo_underruns;\n-\t/*\n-\t * Total number of PFC frames with PFC enabled bit for\n-\t * Pri 0 transmitted\n-\t */\n-\tuint64_t\ttx_pfc_ena_frames_pri0;\n-\t/*\n-\t * Total number of PFC frames with PFC enabled bit for\n-\t * Pri 1 transmitted\n-\t */\n-\tuint64_t\ttx_pfc_ena_frames_pri1;\n-\t/*\n-\t * Total number of PFC frames with PFC enabled bit for\n-\t * Pri 2 transmitted\n-\t */\n-\tuint64_t\ttx_pfc_ena_frames_pri2;\n-\t/*\n-\t * Total number of PFC frames with PFC enabled bit for\n-\t * Pri 3 transmitted\n-\t */\n-\tuint64_t\ttx_pfc_ena_frames_pri3;\n-\t/*\n-\t * Total number of PFC frames with PFC enabled bit for\n-\t * Pri 4 transmitted\n-\t */\n-\tuint64_t\ttx_pfc_ena_frames_pri4;\n-\t/*\n-\t * Total number of PFC frames with PFC enabled bit for\n-\t * Pri 5 transmitted\n-\t */\n-\tuint64_t\ttx_pfc_ena_frames_pri5;\n-\t/*\n-\t * Total number of PFC frames with PFC enabled bit for\n-\t * Pri 6 transmitted\n-\t */\n-\tuint64_t\ttx_pfc_ena_frames_pri6;\n-\t/*\n-\t * Total number of PFC frames with PFC enabled bit for\n-\t * Pri 7 transmitted\n-\t */\n-\tuint64_t\ttx_pfc_ena_frames_pri7;\n-\t/* Total number of EEE LPI Events on TX */\n-\tuint64_t\ttx_eee_lpi_events;\n-\t/* EEE LPI Duration Counter on TX */\n-\tuint64_t\ttx_eee_lpi_duration;\n-\t/*\n-\t * Total number of Link Level Flow Control (LLFC) messages\n-\t * transmitted\n-\t */\n-\tuint64_t\ttx_llfc_logical_msgs;\n-\t/* Total number of HCFC messages transmitted */\n-\tuint64_t\ttx_hcfc_msgs;\n-\t/* Total number of TX collisions */\n-\tuint64_t\ttx_total_collisions;\n-\t/* Total number of transmitted bytes */\n-\tuint64_t\ttx_bytes;\n-\t/* Total number of end-to-end HOL frames */\n-\tuint64_t\ttx_xthol_frames;\n-\t/* Total Tx Drops per Port reported by STATS block */\n-\tuint64_t\ttx_stat_discard;\n-\t/* Total Tx Error Drops per Port reported by STATS block */\n-\tuint64_t\ttx_stat_error;\n-} __attribute__((packed));\n+/*****************************\n+ * hwrm_tunnel_dst_port_free *\n+ *****************************/\n \n-/* Port Rx Statistics Formats */\n-/* rx_port_stats (size:4224b/528B) */\n-struct rx_port_stats {\n-\t/* Total Number of 64 Bytes frames received */\n-\tuint64_t\trx_64b_frames;\n-\t/* Total Number of 65-127 Bytes frames received */\n-\tuint64_t\trx_65b_127b_frames;\n-\t/* Total Number of 128-255 Bytes frames received */\n-\tuint64_t\trx_128b_255b_frames;\n-\t/* Total Number of 256-511 Bytes frames received */\n-\tuint64_t\trx_256b_511b_frames;\n-\t/* Total Number of 512-1023 Bytes frames received */\n-\tuint64_t\trx_512b_1023b_frames;\n-\t/* Total Number of 1024-1518 Bytes frames received */\n-\tuint64_t\trx_1024b_1518_frames;\n+\n+/* hwrm_tunnel_dst_port_free_input (size:192b/24B) */\n+struct hwrm_tunnel_dst_port_free_input {\n+\t/* The HWRM command request type. */\n+\tuint16_t\treq_type;\n \t/*\n-\t * Total Number of each good VLAN (exludes FCS errors)\n-\t * frame received which is 1519 to 1522 bytes in length\n-\t * inclusive (excluding framing bits but including FCS bytes).\n+\t * The completion ring to send the completion event on. This should\n+\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n \t */\n-\tuint64_t\trx_good_vlan_frames;\n-\t/* Total Number of 1519-2047 Bytes frames received */\n-\tuint64_t\trx_1519b_2047b_frames;\n-\t/* Total Number of 2048-4095 Bytes frames received */\n-\tuint64_t\trx_2048b_4095b_frames;\n-\t/* Total Number of 4096-9216 Bytes frames received */\n-\tuint64_t\trx_4096b_9216b_frames;\n-\t/* Total Number of 9217-16383 Bytes frames received */\n-\tuint64_t\trx_9217b_16383b_frames;\n-\t/* Total number of frames received */\n-\tuint64_t\trx_total_frames;\n-\t/* Total number of unicast frames received */\n-\tuint64_t\trx_ucast_frames;\n-\t/* Total number of multicast frames received */\n-\tuint64_t\trx_mcast_frames;\n-\t/* Total number of broadcast frames received */\n-\tuint64_t\trx_bcast_frames;\n-\t/* Total number of received frames with FCS error */\n-\tuint64_t\trx_fcs_err_frames;\n-\t/* Total number of control frames received */\n-\tuint64_t\trx_ctrl_frames;\n-\t/* Total number of PAUSE frames received */\n-\tuint64_t\trx_pause_frames;\n-\t/* Total number of PFC frames received */\n-\tuint64_t\trx_pfc_frames;\n+\tuint16_t\tcmpl_ring;\n \t/*\n-\t * Total number of frames received with an unsupported\n-\t * opcode\n+\t * The sequence ID is used by the driver for tracking multiple\n+\t * commands. This ID is treated as opaque data by the firmware and\n+\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n \t */\n-\tuint64_t\trx_unsupported_opcode_frames;\n+\tuint16_t\tseq_id;\n \t/*\n-\t * Total number of frames received with an unsupported\n-\t * DA for pause and PFC\n+\t * The target ID of the command:\n+\t * * 0x0-0xFFF8 - The function ID\n+\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n+\t * * 0xFFFF - HWRM\n \t */\n-\tuint64_t\trx_unsupported_da_pausepfc_frames;\n-\t/* Total number of frames received with an unsupported SA */\n-\tuint64_t\trx_wrong_sa_frames;\n-\t/* Total number of received packets with alignment error */\n-\tuint64_t\trx_align_err_frames;\n-\t/* Total number of received frames with out-of-range length */\n-\tuint64_t\trx_oor_len_frames;\n-\t/* Total number of received frames with error termination */\n-\tuint64_t\trx_code_err_frames;\n+\tuint16_t\ttarget_id;\n \t/*\n-\t * Total number of received frames with a false carrier is\n-\t * detected during idle, as defined by RX_ER samples active\n-\t * and RXD is 0xE. The event is reported along with the\n-\t * statistics generated on the next received frame. Only\n-\t * one false carrier condition can be detected and logged\n-\t * between frames.\n-\t *\n-\t * Carrier event, valid for 10M/100M speed modes only.\n+\t * A physical address pointer pointing to a host buffer that the\n+\t * command's response data will be written. This can be either a host\n+\t * physical address (HPA) or a guest physical address (GPA) and must\n+\t * point to a physically contiguous block of memory.\n \t */\n-\tuint64_t\trx_false_carrier_frames;\n-\t/* Total number of over-sized frames received */\n-\tuint64_t\trx_ovrsz_frames;\n-\t/* Total number of jabber packets received */\n-\tuint64_t\trx_jbr_frames;\n-\t/* Total number of received frames with MTU error */\n-\tuint64_t\trx_mtu_err_frames;\n-\t/* Total number of received frames with CRC match */\n-\tuint64_t\trx_match_crc_frames;\n-\t/* Total number of frames received promiscuously */\n-\tuint64_t\trx_promiscuous_frames;\n+\tuint64_t\tresp_addr;\n+\t/* Tunnel Type. */\n+\tuint8_t\ttunnel_type;\n+\t/* Virtual eXtensible Local Area Network (VXLAN) */\n+\t#define HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_VXLAN \\\n+\t\tUINT32_C(0x1)\n+\t/* Generic Network Virtualization Encapsulation (Geneve) */\n+\t#define HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_GENEVE \\\n+\t\tUINT32_C(0x5)\n+\t/* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */\n+\t#define HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_VXLAN_V4 \\\n+\t\tUINT32_C(0x9)\n+\t/* Enhance Generic Routing Encapsulation (GRE version 1) inside IP datagram payload */\n+\t#define HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_IPGRE_V1 \\\n+\t\tUINT32_C(0xa)\n+\t#define HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_LAST \\\n+\t\tHWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_IPGRE_V1\n+\tuint8_t\tunused_0;\n \t/*\n-\t * Total number of received frames with one or two VLAN\n-\t * tags\n+\t * Identifier of a tunnel L4 destination port value. Only applies to tunnel\n+\t * types that has l4 destination port parameters.\n \t */\n-\tuint64_t\trx_tagged_frames;\n-\t/* Total number of received frames with two VLAN tags */\n-\tuint64_t\trx_double_tagged_frames;\n-\t/* Total number of truncated frames received */\n-\tuint64_t\trx_trunc_frames;\n-\t/* Total number of good frames (without errors) received */\n-\tuint64_t\trx_good_frames;\n+\tuint16_t\ttunnel_dst_port_id;\n+\tuint8_t\tunused_1[4];\n+} __attribute__((packed));\n+\n+/* hwrm_tunnel_dst_port_free_output (size:128b/16B) */\n+struct hwrm_tunnel_dst_port_free_output {\n+\t/* The specific error status for the command. */\n+\tuint16_t\terror_code;\n+\t/* The HWRM command request type. */\n+\tuint16_t\treq_type;\n+\t/* The sequence ID from the original command. */\n+\tuint16_t\tseq_id;\n+\t/* The length of the response data in number of bytes. */\n+\tuint16_t\tresp_len;\n+\tuint8_t\tunused_1[7];\n \t/*\n-\t * Total number of received PFC frames with transition from\n-\t * XON to XOFF on Pri 0\n+\t * This field is used in Output records to indicate that the output\n+\t * is completely written to RAM.  This field should be read as '1'\n+\t * to indicate that the output has been completely written.\n+\t * When writing a command completion or response to an internal processor,\n+\t * the order of writes has to be such that this field is written last.\n \t */\n-\tuint64_t\trx_pfc_xon2xoff_frames_pri0;\n+\tuint8_t\tvalid;\n+} __attribute__((packed));\n+\n+/* Periodic statistics context DMA to host. */\n+/* ctx_hw_stats (size:1280b/160B) */\n+struct ctx_hw_stats {\n+\t/* Number of received unicast packets */\n+\tuint64_t\trx_ucast_pkts;\n+\t/* Number of received multicast packets */\n+\tuint64_t\trx_mcast_pkts;\n+\t/* Number of received broadcast packets */\n+\tuint64_t\trx_bcast_pkts;\n+\t/* Number of discarded packets on received path */\n+\tuint64_t\trx_discard_pkts;\n+\t/* Number of dropped packets on received path */\n+\tuint64_t\trx_drop_pkts;\n+\t/* Number of received bytes for unicast traffic */\n+\tuint64_t\trx_ucast_bytes;\n+\t/* Number of received bytes for multicast traffic */\n+\tuint64_t\trx_mcast_bytes;\n+\t/* Number of received bytes for broadcast traffic */\n+\tuint64_t\trx_bcast_bytes;\n+\t/* Number of transmitted unicast packets */\n+\tuint64_t\ttx_ucast_pkts;\n+\t/* Number of transmitted multicast packets */\n+\tuint64_t\ttx_mcast_pkts;\n+\t/* Number of transmitted broadcast packets */\n+\tuint64_t\ttx_bcast_pkts;\n+\t/* Number of discarded packets on transmit path */\n+\tuint64_t\ttx_discard_pkts;\n+\t/* Number of dropped packets on transmit path */\n+\tuint64_t\ttx_drop_pkts;\n+\t/* Number of transmitted bytes for unicast traffic */\n+\tuint64_t\ttx_ucast_bytes;\n+\t/* Number of transmitted bytes for multicast traffic */\n+\tuint64_t\ttx_mcast_bytes;\n+\t/* Number of transmitted bytes for broadcast traffic */\n+\tuint64_t\ttx_bcast_bytes;\n+\t/* Number of TPA packets */\n+\tuint64_t\ttpa_pkts;\n+\t/* Number of TPA bytes */\n+\tuint64_t\ttpa_bytes;\n+\t/* Number of TPA events */\n+\tuint64_t\ttpa_events;\n+\t/* Number of TPA aborts */\n+\tuint64_t\ttpa_aborts;\n+} __attribute__((packed));\n+\n+/***********************\n+ * hwrm_stat_ctx_alloc *\n+ ***********************/\n+\n+\n+/* hwrm_stat_ctx_alloc_input (size:256b/32B) */\n+struct hwrm_stat_ctx_alloc_input {\n+\t/* The HWRM command request type. */\n+\tuint16_t\treq_type;\n \t/*\n-\t * Total number of received PFC frames with transition from\n-\t * XON to XOFF on Pri 1\n+\t * The completion ring to send the completion event on. This should\n+\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n \t */\n-\tuint64_t\trx_pfc_xon2xoff_frames_pri1;\n+\tuint16_t\tcmpl_ring;\n \t/*\n-\t * Total number of received PFC frames with transition from\n-\t * XON to XOFF on Pri 2\n+\t * The sequence ID is used by the driver for tracking multiple\n+\t * commands. This ID is treated as opaque data by the firmware and\n+\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n \t */\n-\tuint64_t\trx_pfc_xon2xoff_frames_pri2;\n+\tuint16_t\tseq_id;\n \t/*\n-\t * Total number of received PFC frames with transition from\n-\t * XON to XOFF on Pri 3\n+\t * The target ID of the command:\n+\t * * 0x0-0xFFF8 - The function ID\n+\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n+\t * * 0xFFFF - HWRM\n \t */\n-\tuint64_t\trx_pfc_xon2xoff_frames_pri3;\n+\tuint16_t\ttarget_id;\n \t/*\n-\t * Total number of received PFC frames with transition from\n-\t * XON to XOFF on Pri 4\n+\t * A physical address pointer pointing to a host buffer that the\n+\t * command's response data will be written. This can be either a host\n+\t * physical address (HPA) or a guest physical address (GPA) and must\n+\t * point to a physically contiguous block of memory.\n \t */\n-\tuint64_t\trx_pfc_xon2xoff_frames_pri4;\n+\tuint64_t\tresp_addr;\n+\t/* This is the address for statistic block. */\n+\tuint64_t\tstats_dma_addr;\n \t/*\n-\t * Total number of received PFC frames with transition from\n-\t * XON to XOFF on Pri 5\n+\t * The statistic block update period in ms.\n+\t * e.g. 250ms, 500ms, 750ms, 1000ms.\n+\t * If update_period_ms is 0, then the stats update\n+\t * shall be never done and the DMA address shall not be used.\n+\t * In this case, the stat block can only be read by\n+\t * hwrm_stat_ctx_query command.\n \t */\n-\tuint64_t\trx_pfc_xon2xoff_frames_pri5;\n+\tuint32_t\tupdate_period_ms;\n \t/*\n-\t * Total number of received PFC frames with transition from\n-\t * XON to XOFF on Pri 6\n+\t * This field is used to specify statistics context specific\n+\t * configuration flags.\n \t */\n-\tuint64_t\trx_pfc_xon2xoff_frames_pri6;\n+\tuint8_t\tstat_ctx_flags;\n \t/*\n-\t * Total number of received PFC frames with transition from\n-\t * XON to XOFF on Pri 7\n+\t * When this bit is set to '1', the statistics context shall be\n+\t * allocated for RoCE traffic only. In this case, traffic other\n+\t * than offloaded RoCE traffic shall not be included in this\n+\t * statistic context.\n+\t * When this bit is set to '0', the statistics context shall be\n+\t * used for the network traffic other than offloaded RoCE traffic.\n \t */\n-\tuint64_t\trx_pfc_xon2xoff_frames_pri7;\n+\t#define HWRM_STAT_CTX_ALLOC_INPUT_STAT_CTX_FLAGS_ROCE     UINT32_C(0x1)\n+\tuint8_t\tunused_0[3];\n+} __attribute__((packed));\n+\n+/* hwrm_stat_ctx_alloc_output (size:128b/16B) */\n+struct hwrm_stat_ctx_alloc_output {\n+\t/* The specific error status for the command. */\n+\tuint16_t\terror_code;\n+\t/* The HWRM command request type. */\n+\tuint16_t\treq_type;\n+\t/* The sequence ID from the original command. */\n+\tuint16_t\tseq_id;\n+\t/* The length of the response data in number of bytes. */\n+\tuint16_t\tresp_len;\n+\t/* This is the statistics context ID value. */\n+\tuint32_t\tstat_ctx_id;\n+\tuint8_t\tunused_0[3];\n \t/*\n-\t * Total number of received PFC frames with PFC enabled\n-\t * bit for Pri 0\n+\t * This field is used in Output records to indicate that the output\n+\t * is completely written to RAM.  This field should be read as '1'\n+\t * to indicate that the output has been completely written.\n+\t * When writing a command completion or response to an internal processor,\n+\t * the order of writes has to be such that this field is written last.\n \t */\n-\tuint64_t\trx_pfc_ena_frames_pri0;\n+\tuint8_t\tvalid;\n+} __attribute__((packed));\n+\n+/**********************\n+ * hwrm_stat_ctx_free *\n+ **********************/\n+\n+\n+/* hwrm_stat_ctx_free_input (size:192b/24B) */\n+struct hwrm_stat_ctx_free_input {\n+\t/* The HWRM command request type. */\n+\tuint16_t\treq_type;\n \t/*\n-\t * Total number of received PFC frames with PFC enabled\n-\t * bit for Pri 1\n+\t * The completion ring to send the completion event on. This should\n+\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n \t */\n-\tuint64_t\trx_pfc_ena_frames_pri1;\n+\tuint16_t\tcmpl_ring;\n \t/*\n-\t * Total number of received PFC frames with PFC enabled\n-\t * bit for Pri 2\n+\t * The sequence ID is used by the driver for tracking multiple\n+\t * commands. This ID is treated as opaque data by the firmware and\n+\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n \t */\n-\tuint64_t\trx_pfc_ena_frames_pri2;\n+\tuint16_t\tseq_id;\n \t/*\n-\t * Total number of received PFC frames with PFC enabled\n-\t * bit for Pri 3\n+\t * The target ID of the command:\n+\t * * 0x0-0xFFF8 - The function ID\n+\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n+\t * * 0xFFFF - HWRM\n \t */\n-\tuint64_t\trx_pfc_ena_frames_pri3;\n+\tuint16_t\ttarget_id;\n \t/*\n-\t * Total number of received PFC frames with PFC enabled\n-\t * bit for Pri 4\n+\t * A physical address pointer pointing to a host buffer that the\n+\t * command's response data will be written. This can be either a host\n+\t * physical address (HPA) or a guest physical address (GPA) and must\n+\t * point to a physically contiguous block of memory.\n \t */\n-\tuint64_t\trx_pfc_ena_frames_pri4;\n+\tuint64_t\tresp_addr;\n+\t/* ID of the statistics context that is being queried. */\n+\tuint32_t\tstat_ctx_id;\n+\tuint8_t\tunused_0[4];\n+} __attribute__((packed));\n+\n+/* hwrm_stat_ctx_free_output (size:128b/16B) */\n+struct hwrm_stat_ctx_free_output {\n+\t/* The specific error status for the command. */\n+\tuint16_t\terror_code;\n+\t/* The HWRM command request type. */\n+\tuint16_t\treq_type;\n+\t/* The sequence ID from the original command. */\n+\tuint16_t\tseq_id;\n+\t/* The length of the response data in number of bytes. */\n+\tuint16_t\tresp_len;\n+\t/* This is the statistics context ID value. */\n+\tuint32_t\tstat_ctx_id;\n+\tuint8_t\tunused_0[3];\n \t/*\n-\t * Total number of received PFC frames with PFC enabled\n-\t * bit for Pri 5\n+\t * This field is used in Output records to indicate that the output\n+\t * is completely written to RAM.  This field should be read as '1'\n+\t * to indicate that the output has been completely written.\n+\t * When writing a command completion or response to an internal processor,\n+\t * the order of writes has to be such that this field is written last.\n \t */\n-\tuint64_t\trx_pfc_ena_frames_pri5;\n+\tuint8_t\tvalid;\n+} __attribute__((packed));\n+\n+/***********************\n+ * hwrm_stat_ctx_query *\n+ ***********************/\n+\n+\n+/* hwrm_stat_ctx_query_input (size:192b/24B) */\n+struct hwrm_stat_ctx_query_input {\n+\t/* The HWRM command request type. */\n+\tuint16_t\treq_type;\n \t/*\n-\t * Total number of received PFC frames with PFC enabled\n-\t * bit for Pri 6\n+\t * The completion ring to send the completion event on. This should\n+\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n \t */\n-\tuint64_t\trx_pfc_ena_frames_pri6;\n+\tuint16_t\tcmpl_ring;\n \t/*\n-\t * Total number of received PFC frames with PFC enabled\n-\t * bit for Pri 7\n+\t * The sequence ID is used by the driver for tracking multiple\n+\t * commands. This ID is treated as opaque data by the firmware and\n+\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n \t */\n-\tuint64_t\trx_pfc_ena_frames_pri7;\n-\t/* Total Number of frames received with SCH CRC error */\n-\tuint64_t\trx_sch_crc_err_frames;\n-\t/* Total Number of under-sized frames received */\n-\tuint64_t\trx_undrsz_frames;\n-\t/* Total Number of fragmented frames received */\n-\tuint64_t\trx_frag_frames;\n-\t/* Total number of RX EEE LPI Events */\n-\tuint64_t\trx_eee_lpi_events;\n-\t/* EEE LPI Duration Counter on RX */\n-\tuint64_t\trx_eee_lpi_duration;\n+\tuint16_t\tseq_id;\n \t/*\n-\t * Total number of physical type Link Level Flow Control\n-\t * (LLFC) messages received\n+\t * The target ID of the command:\n+\t * * 0x0-0xFFF8 - The function ID\n+\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n+\t * * 0xFFFF - HWRM\n \t */\n-\tuint64_t\trx_llfc_physical_msgs;\n+\tuint16_t\ttarget_id;\n \t/*\n-\t * Total number of logical type Link Level Flow Control\n-\t * (LLFC) messages received\n+\t * A physical address pointer pointing to a host buffer that the\n+\t * command's response data will be written. This can be either a host\n+\t * physical address (HPA) or a guest physical address (GPA) and must\n+\t * point to a physically contiguous block of memory.\n \t */\n-\tuint64_t\trx_llfc_logical_msgs;\n+\tuint64_t\tresp_addr;\n+\t/* ID of the statistics context that is being queried. */\n+\tuint32_t\tstat_ctx_id;\n+\tuint8_t\tunused_0[4];\n+} __attribute__((packed));\n+\n+/* hwrm_stat_ctx_query_output (size:1408b/176B) */\n+struct hwrm_stat_ctx_query_output {\n+\t/* The specific error status for the command. */\n+\tuint16_t\terror_code;\n+\t/* The HWRM command request type. */\n+\tuint16_t\treq_type;\n+\t/* The sequence ID from the original command. */\n+\tuint16_t\tseq_id;\n+\t/* The length of the response data in number of bytes. */\n+\tuint16_t\tresp_len;\n+\t/* Number of transmitted unicast packets */\n+\tuint64_t\ttx_ucast_pkts;\n+\t/* Number of transmitted multicast packets */\n+\tuint64_t\ttx_mcast_pkts;\n+\t/* Number of transmitted broadcast packets */\n+\tuint64_t\ttx_bcast_pkts;\n+\t/* Number of transmitted packets with error */\n+\tuint64_t\ttx_err_pkts;\n+\t/* Number of dropped packets on transmit path */\n+\tuint64_t\ttx_drop_pkts;\n+\t/* Number of transmitted bytes for unicast traffic */\n+\tuint64_t\ttx_ucast_bytes;\n+\t/* Number of transmitted bytes for multicast traffic */\n+\tuint64_t\ttx_mcast_bytes;\n+\t/* Number of transmitted bytes for broadcast traffic */\n+\tuint64_t\ttx_bcast_bytes;\n+\t/* Number of received unicast packets */\n+\tuint64_t\trx_ucast_pkts;\n+\t/* Number of received multicast packets */\n+\tuint64_t\trx_mcast_pkts;\n+\t/* Number of received broadcast packets */\n+\tuint64_t\trx_bcast_pkts;\n+\t/* Number of received packets with error */\n+\tuint64_t\trx_err_pkts;\n+\t/* Number of dropped packets on received path */\n+\tuint64_t\trx_drop_pkts;\n+\t/* Number of received bytes for unicast traffic */\n+\tuint64_t\trx_ucast_bytes;\n+\t/* Number of received bytes for multicast traffic */\n+\tuint64_t\trx_mcast_bytes;\n+\t/* Number of received bytes for broadcast traffic */\n+\tuint64_t\trx_bcast_bytes;\n+\t/* Number of aggregated unicast packets */\n+\tuint64_t\trx_agg_pkts;\n+\t/* Number of aggregated unicast bytes */\n+\tuint64_t\trx_agg_bytes;\n+\t/* Number of aggregation events */\n+\tuint64_t\trx_agg_events;\n+\t/* Number of aborted aggregations */\n+\tuint64_t\trx_agg_aborts;\n+\tuint8_t\tunused_0[7];\n \t/*\n-\t * Total number of logical type Link Level Flow Control\n-\t * (LLFC) messages received with CRC error\n+\t * This field is used in Output records to indicate that the output\n+\t * is completely written to RAM.  This field should be read as '1'\n+\t * to indicate that the output has been completely written.\n+\t * When writing a command completion or response to an internal processor,\n+\t * the order of writes has to be such that this field is written last.\n \t */\n-\tuint64_t\trx_llfc_msgs_with_crc_err;\n-\t/* Total number of HCFC messages received */\n-\tuint64_t\trx_hcfc_msgs;\n-\t/* Total number of HCFC messages received with CRC error */\n-\tuint64_t\trx_hcfc_msgs_with_crc_err;\n-\t/* Total number of received bytes */\n-\tuint64_t\trx_bytes;\n-\t/* Total number of bytes received in runt frames */\n-\tuint64_t\trx_runt_bytes;\n-\t/* Total number of runt frames received */\n-\tuint64_t\trx_runt_frames;\n-\t/* Total Rx Discards per Port reported by STATS block */\n-\tuint64_t\trx_stat_discard;\n-\tuint64_t\trx_stat_err;\n+\tuint8_t\tvalid;\n } __attribute__((packed));\n \n-/* Port Rx Statistics extended Formats */\n-/* rx_port_stats_ext (size:320b/40B) */\n-struct rx_port_stats_ext {\n-\t/* Number of times link state changed to down */\n-\tuint64_t\tlink_down_events;\n-\t/* Number of times the idle rings with pause bit are found */\n-\tuint64_t\tcontinuous_pause_events;\n-\t/* Number of times the active rings pause bit resumed back */\n-\tuint64_t\tresume_pause_events;\n-\t/* Number of times, the ROCE cos queue PFC is disabled to avoid pause flood/burst */\n-\tuint64_t\tcontinuous_roce_pause_events;\n-\t/* Number of times, the ROCE cos queue PFC is enabled back */\n-\tuint64_t\tresume_roce_pause_events;\n-} __attribute__((packed));\n+/***************************\n+ * hwrm_stat_ctx_clr_stats *\n+ ***************************/\n+\n \n-/* PCIe Statistics Formats */\n-/* pcie_ctx_hw_stats (size:768b/96B) */\n-struct pcie_ctx_hw_stats {\n-\t/* Number of physical layer receiver errors */\n-\tuint64_t\tpcie_pl_signal_integrity;\n-\t/* Number of DLLP CRC errors detected by Data Link Layer */\n-\tuint64_t\tpcie_dl_signal_integrity;\n+/* hwrm_stat_ctx_clr_stats_input (size:192b/24B) */\n+struct hwrm_stat_ctx_clr_stats_input {\n+\t/* The HWRM command request type. */\n+\tuint16_t\treq_type;\n \t/*\n-\t * Number of TLP LCRC and sequence number errors detected\n-\t * by Data Link Layer\n+\t * The completion ring to send the completion event on. This should\n+\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n+\t */\n+\tuint16_t\tcmpl_ring;\n+\t/*\n+\t * The sequence ID is used by the driver for tracking multiple\n+\t * commands. This ID is treated as opaque data by the firmware and\n+\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n \t */\n-\tuint64_t\tpcie_tl_signal_integrity;\n-\t/* Number of times LTSSM entered Recovery state */\n-\tuint64_t\tpcie_link_integrity;\n-\t/* Number of TLP bytes that have been trasmitted */\n-\tuint64_t\tpcie_tx_traffic_rate;\n-\t/* Number of TLP bytes that have been received */\n-\tuint64_t\tpcie_rx_traffic_rate;\n-\t/* Number of DLLP bytes that have been trasmitted */\n-\tuint64_t\tpcie_tx_dllp_statistics;\n-\t/* Number of DLLP bytes that have been received */\n-\tuint64_t\tpcie_rx_dllp_statistics;\n+\tuint16_t\tseq_id;\n+\t/*\n+\t * The target ID of the command:\n+\t * * 0x0-0xFFF8 - The function ID\n+\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n+\t * * 0xFFFF - HWRM\n+\t */\n+\tuint16_t\ttarget_id;\n \t/*\n-\t * Number of times spent in each phase of gen3\n-\t * equalization\n+\t * A physical address pointer pointing to a host buffer that the\n+\t * command's response data will be written. This can be either a host\n+\t * physical address (HPA) or a guest physical address (GPA) and must\n+\t * point to a physically contiguous block of memory.\n \t */\n-\tuint64_t\tpcie_equalization_time;\n-\t/* Records the last 16 transitions of the LTSSM */\n-\tuint32_t\tpcie_ltssm_histogram[4];\n+\tuint64_t\tresp_addr;\n+\t/* ID of the statistics context that is being queried. */\n+\tuint32_t\tstat_ctx_id;\n+\tuint8_t\tunused_0[4];\n+} __attribute__((packed));\n+\n+/* hwrm_stat_ctx_clr_stats_output (size:128b/16B) */\n+struct hwrm_stat_ctx_clr_stats_output {\n+\t/* The specific error status for the command. */\n+\tuint16_t\terror_code;\n+\t/* The HWRM command request type. */\n+\tuint16_t\treq_type;\n+\t/* The sequence ID from the original command. */\n+\tuint16_t\tseq_id;\n+\t/* The length of the response data in number of bytes. */\n+\tuint16_t\tresp_len;\n+\tuint8_t\tunused_0[7];\n \t/*\n-\t * Record the last 8 reasons on why LTSSM transitioned\n-\t * to Recovery\n+\t * This field is used in Output records to indicate that the output\n+\t * is completely written to RAM.  This field should be read as '1'\n+\t * to indicate that the output has been completely written.\n+\t * When writing a command completion or response to an internal processor,\n+\t * the order of writes has to be such that this field is written last.\n \t */\n-\tuint64_t\tpcie_recovery_histogram;\n+\tuint8_t\tvalid;\n } __attribute__((packed));\n \n /**********************\n@@ -28109,103 +21943,4 @@ struct hwrm_nvm_validate_option_cmd_err {\n \tuint8_t\tunused_0[7];\n } __attribute__((packed));\n \n-/*****************************\n- * hwrm_nvm_factory_defaults *\n- *****************************/\n-\n-\n-/* hwrm_nvm_factory_defaults_input (size:192b/24B) */\n-struct hwrm_nvm_factory_defaults_input {\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/*\n-\t * The completion ring to send the completion event on. This should\n-\t * be the NQ ID returned from the `nq_alloc` HWRM command.\n-\t */\n-\tuint16_t\tcmpl_ring;\n-\t/*\n-\t * The sequence ID is used by the driver for tracking multiple\n-\t * commands. This ID is treated as opaque data by the firmware and\n-\t * the value is returned in the `hwrm_resp_hdr` upon completion.\n-\t */\n-\tuint16_t\tseq_id;\n-\t/*\n-\t * The target ID of the command:\n-\t * * 0x0-0xFFF8 - The function ID\n-\t * * 0xFFF8-0xFFFE - Reserved for internal processors\n-\t * * 0xFFFF - HWRM\n-\t */\n-\tuint16_t\ttarget_id;\n-\t/*\n-\t * A physical address pointer pointing to a host buffer that the\n-\t * command's response data will be written. This can be either a host\n-\t * physical address (HPA) or a guest physical address (GPA) and must\n-\t * point to a physically contiguous block of memory.\n-\t */\n-\tuint64_t\tresp_addr;\n-\t/* mode is 8 b */\n-\tuint8_t\tmode;\n-\t/* If set to 1, it will trigger restoration of factory default settings */\n-\t#define HWRM_NVM_FACTORY_DEFAULTS_INPUT_MODE_RESTORE UINT32_C(0x0)\n-\t/* If set to 1, it will trigger creation of factory default settings */\n-\t#define HWRM_NVM_FACTORY_DEFAULTS_INPUT_MODE_CREATE  UINT32_C(0x1)\n-\t#define HWRM_NVM_FACTORY_DEFAULTS_INPUT_MODE_LAST \\\n-\t\tHWRM_NVM_FACTORY_DEFAULTS_INPUT_MODE_CREATE\n-\tuint8_t\tunused_0[7];\n-} __attribute__((packed));\n-\n-/* hwrm_nvm_factory_defaults_output (size:128b/16B) */\n-struct hwrm_nvm_factory_defaults_output {\n-\t/* The specific error status for the command. */\n-\tuint16_t\terror_code;\n-\t/* The HWRM command request type. */\n-\tuint16_t\treq_type;\n-\t/* The sequence ID from the original command. */\n-\tuint16_t\tseq_id;\n-\t/* The length of the response data in number of bytes. */\n-\tuint16_t\tresp_len;\n-\tuint8_t\tresult;\n-\t/* factory defaults created successfully. */\n-\t#define HWRM_NVM_FACTORY_DEFAULTS_OUTPUT_RESULT_CREATE_OK \\\n-\t\tUINT32_C(0x0)\n-\t/* factory defaults restored successfully. */\n-\t#define HWRM_NVM_FACTORY_DEFAULTS_OUTPUT_RESULT_RESTORE_OK \\\n-\t\tUINT32_C(0x1)\n-\t/* factory defaults already created. */\n-\t#define HWRM_NVM_FACTORY_DEFAULTS_OUTPUT_RESULT_CREATE_ALREADY \\\n-\t\tUINT32_C(0x2)\n-\t#define HWRM_NVM_FACTORY_DEFAULTS_OUTPUT_RESULT_LAST \\\n-\t\tHWRM_NVM_FACTORY_DEFAULTS_OUTPUT_RESULT_CREATE_ALREADY\n-\tuint8_t\tunused_0[6];\n-\t/*\n-\t * This field is used in Output records to indicate that the output\n-\t * is completely written to RAM.  This field should be read as '1'\n-\t * to indicate that the output has been completely written.\n-\t * When writing a command completion or response to an internal processor,\n-\t * the order of writes has to be such that this field is written last.\n-\t */\n-\tuint8_t\tvalid;\n-} __attribute__((packed));\n-\n-/* hwrm_nvm_factory_defaults_cmd_err (size:64b/8B) */\n-struct hwrm_nvm_factory_defaults_cmd_err {\n-\t/*\n-\t * command specific error codes that goes to\n-\t * the cmd_err field in Common HWRM Error Response.\n-\t */\n-\tuint8_t\tcode;\n-\t/* Unknown error */\n-\t#define HWRM_NVM_FACTORY_DEFAULTS_CMD_ERR_CODE_UNKNOWN \\\n-\t\tUINT32_C(0x0)\n-\t/* valid configuration not present to create defaults */\n-\t#define HWRM_NVM_FACTORY_DEFAULTS_CMD_ERR_CODE_NO_VALID_CFG \\\n-\t\tUINT32_C(0x1)\n-\t/* No saved configuration present to restore, restore failed */\n-\t#define HWRM_NVM_FACTORY_DEFAULTS_CMD_ERR_CODE_NO_SAVED_CFG \\\n-\t\tUINT32_C(0x2)\n-\t#define HWRM_NVM_FACTORY_DEFAULTS_CMD_ERR_CODE_LAST \\\n-\t\tHWRM_NVM_FACTORY_DEFAULTS_CMD_ERR_CODE_NO_SAVED_CFG\n-\tuint8_t\tunused_0[7];\n-} __attribute__((packed));\n-\n #endif /* _HSI_STRUCT_DEF_DPDK_H_ */\n",
    "prefixes": [
        "v3",
        "04/15"
    ]
}