net/qede/base: fix access to an uninitialized list
[dpdk.git] / drivers / net / bnxt / hsi_struct_def_dpdk.h
index 17a912f..1b35466 100644 (file)
 #define HWRM_VNIC_RSS_QCFG             (UINT32_C(0x47))
 #define HWRM_VNIC_PLCMODES_CFG         (UINT32_C(0x48))
 #define HWRM_VNIC_PLCMODES_QCFG                (UINT32_C(0x49))
+#define HWRM_VNIC_QCAPS                        (UINT32_C(0x4a))
 #define HWRM_RING_ALLOC                        (UINT32_C(0x50))
 #define HWRM_RING_FREE                 (UINT32_C(0x51))
-#define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAM   (UINT32_C(0x53))
+#define HWRM_RING_CMPL_RING_QAGGINT_PARAMS     (UINT32_C(0x52))
+#define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS  (UINT32_C(0x53))
 #define HWRM_RING_RESET                        (UINT32_C(0x5e))
 #define HWRM_RING_GRP_ALLOC            (UINT32_C(0x60))
-#define HWRM_RING_GRP_ALLOC            (UINT32_C(0x60))
 #define HWRM_RING_GRP_FREE             (UINT32_C(0x61))
 #define HWRM_VNIC_RSS_COS_LB_CTX_ALLOC (UINT32_C(0x70))
 #define HWRM_VNIC_RSS_COS_LB_CTX_FREE  (UINT32_C(0x71))
 #define HWRM_CFA_L2_FILTER_CFG         (UINT32_C(0x92))
 #define HWRM_CFA_L2_SET_RX_MASK                (UINT32_C(0x93))
     /* Reserved for future use */
-#define RESERVED4                      (UINT32_C(0x94))
+#define HWRM_CFA_VLAN_ANTISPOOF_CFG    (UINT32_C(0x94))
 #define HWRM_CFA_TUNNEL_FILTER_ALLOC   (UINT32_C(0x95))
 #define HWRM_CFA_TUNNEL_FILTER_FREE    (UINT32_C(0x96))
 #define HWRM_CFA_NTUPLE_FILTER_ALLOC   (UINT32_C(0x99))
 #define HWRM_CFA_NTUPLE_FILTER_FREE    (UINT32_C(0x9a))
 #define HWRM_CFA_NTUPLE_FILTER_CFG     (UINT32_C(0x9b))
+#define HWRM_CFA_EM_FLOW_ALLOC         (UINT32_C(0x9c))
+#define HWRM_CFA_EM_FLOW_FREE          (UINT32_C(0x9d))
+#define HWRM_CFA_EM_FLOW_CFG           (UINT32_C(0x9e))
 #define HWRM_TUNNEL_DST_PORT_QUERY     (UINT32_C(0xa0))
 #define HWRM_TUNNEL_DST_PORT_ALLOC     (UINT32_C(0xa1))
 #define HWRM_TUNNEL_DST_PORT_FREE      (UINT32_C(0xa2))
 #define HWRM_STAT_CTX_FREE             (UINT32_C(0xb1))
 #define HWRM_STAT_CTX_QUERY            (UINT32_C(0xb2))
 #define HWRM_STAT_CTX_CLR_STATS                (UINT32_C(0xb3))
+#define HWRM_FW_RESET                  (UINT32_C(0xc0))
+#define HWRM_FW_QSTATUS                        (UINT32_C(0xc1))
 #define HWRM_EXEC_FWD_RESP             (UINT32_C(0xd0))
 #define HWRM_REJECT_FWD_RESP           (UINT32_C(0xd1))
 #define HWRM_FWD_RESP                  (UINT32_C(0xd2))
@@ -3187,6 +3193,15 @@ struct hwrm_func_cfg_input {
         * command will be persistent over warm boot.
         */
        #define HWRM_FUNC_CFG_INPUT_FLAGS_VIRT_MAC_PERSIST      UINT32_C(0x800)
+       /*
+        * This bit only applies to the VF. If this bit is set, the
+        * statistic context counters will not be cleared when the
+        * statistic context is freed or a function reset is called on
+        * VF. This bit will be cleared when the PF is unloaded or a
+        * function reset is called on the PF.
+        */
+       #define HWRM_FUNC_CFG_INPUT_FLAGS_NO_AUTOCLEAR_STATISTIC        \
+               UINT32_C(0x1000)
        uint32_t enables;
        /* This bit must be '1' for the mtu field to be configured. */
        #define HWRM_FUNC_CFG_INPUT_ENABLES_MTU UINT32_C(0x1)
@@ -9459,13 +9474,18 @@ struct hwrm_cfa_l2_set_rx_mask_output {
         */
 } __attribute__((packed));
 
-/* hwrm_tunnel_dst_port_query */
+/* hwrm_cfa_ntuple_filter_alloc */
 /*
- * Description: This function is called by a driver to query tunnel type
- * specific destination port configuration.
+ * Description: This is a ntuple filter that uses fields from L4/L3 header and
+ * optionally fields from L2. The ntuple filters apply to receive traffic only.
+ * All L2/L3/L4 header fields are specified in network byte order. These filters
+ * can be used for Receive Flow Steering (RFS). # For ethertype value, only
+ * 0x0800 (IPv4) and 0x86dd (IPv6) shall be supported for ntuple filters. # If a
+ * field specified in this command is not enabled as a valid field, then that
+ * field shall not be used in matching packet header fields against this filter.
  */
-/* Input       (24 bytes) */
-struct hwrm_tunnel_dst_port_query_input {
+/* Input       (128 bytes) */
+struct hwrm_cfa_ntuple_filter_alloc_input {
        uint16_t req_type;
        /*
         * This value indicates what type of request this is. The format
@@ -9492,19 +9512,258 @@ struct hwrm_tunnel_dst_port_query_input {
         * when the request is complete. This area must be 16B aligned
         * and must be cleared to zero before the request is made.
         */
+       uint32_t flags;
+       /*
+        * Setting of this flag indicates the applicability to the
+        * loopback path.
+        */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_FLAGS_LOOPBACK       \
+               UINT32_C(0x1)
+       /*
+        * Setting of this flag indicates drop action. If this flag is
+        * not set, then it should be considered accept action.
+        */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_FLAGS_DROP   UINT32_C(0x2)
+       /*
+        * Setting of this flag indicates that a meter is expected to be
+        * attached to this flow. This hint can be used when choosing
+        * the action record format required for the flow.
+        */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_FLAGS_METER UINT32_C(0x4)
+       uint32_t enables;
+       /* This bit must be '1' for the l2_filter_id field to be configured. */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_L2_FILTER_ID   \
+               UINT32_C(0x1)
+       /* This bit must be '1' for the ethertype field to be configured. */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_ETHERTYPE     \
+               UINT32_C(0x2)
+       /* This bit must be '1' for the tunnel_type field to be configured. */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_TUNNEL_TYPE  \
+               UINT32_C(0x4)
+       /* This bit must be '1' for the src_macaddr field to be configured. */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_SRC_MACADDR  \
+               UINT32_C(0x8)
+       /* This bit must be '1' for the ipaddr_type field to be configured. */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_IPADDR_TYPE  \
+               UINT32_C(0x10)
+       /* This bit must be '1' for the src_ipaddr field to be configured. */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_SRC_IPADDR   \
+               UINT32_C(0x20)
+       /*
+        * This bit must be '1' for the src_ipaddr_mask field to be
+        * configured.
+        */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_SRC_IPADDR_MASK \
+               UINT32_C(0x40)
+       /* This bit must be '1' for the dst_ipaddr field to be configured. */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_IPADDR   \
+               UINT32_C(0x80)
+       /*
+        * This bit must be '1' for the dst_ipaddr_mask field to be
+        * configured.
+        */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_IPADDR_MASK \
+               UINT32_C(0x100)
+       /* This bit must be '1' for the ip_protocol field to be configured. */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_IP_PROTOCOL  \
+               UINT32_C(0x200)
+       /* This bit must be '1' for the src_port field to be configured. */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_SRC_PORT     \
+               UINT32_C(0x400)
+       /*
+        * This bit must be '1' for the src_port_mask field to be
+        * configured.
+        */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_SRC_PORT_MASK  \
+               UINT32_C(0x800)
+       /* This bit must be '1' for the dst_port field to be configured. */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_PORT     \
+               UINT32_C(0x1000)
+       /*
+        * This bit must be '1' for the dst_port_mask field to be
+        * configured.
+        */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_PORT_MASK  \
+               UINT32_C(0x2000)
+       /* This bit must be '1' for the pri_hint field to be configured. */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_PRI_HINT     \
+               UINT32_C(0x4000)
+       /*
+        * This bit must be '1' for the ntuple_filter_id field to be
+        * configured.
+        */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_NTUPLE_FILTER_ID \
+               UINT32_C(0x8000)
+       /* This bit must be '1' for the dst_id field to be configured. */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_ID       \
+               UINT32_C(0x10000)
+       /*
+        * This bit must be '1' for the mirror_vnic_id field to be
+        * configured.
+        */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_MIRROR_VNIC_ID \
+               UINT32_C(0x20000)
+       /* This bit must be '1' for the dst_macaddr field to be configured. */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_MACADDR  \
+               UINT32_C(0x40000)
+       uint64_t l2_filter_id;
+       /*
+        * This value identifies a set of CFA data structures used for
+        * an L2 context.
+        */
+       uint8_t src_macaddr[6];
+       /*
+        * This value indicates the source MAC address in the Ethernet
+        * header.
+        */
+       uint16_t ethertype;
+       /* This value indicates the ethertype in the Ethernet header. */
+       uint8_t ip_addr_type;
+       /*
+        * This value indicates the type of IP address. 4 - IPv4 6 -
+        * IPv6 All others are invalid.
+        */
+       /* invalid */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_UNKNOWN \
+               UINT32_C(0x0)
+       /* IPv4 */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_IPV4 \
+               UINT32_C(0x4)
+       /* IPv6 */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_IPV6 \
+               UINT32_C(0x6)
+       uint8_t ip_protocol;
+       /*
+        * The value of protocol filed in IP header. Applies to UDP and
+        * TCP traffic. 6 - UDP 17 - TCP
+        */
+       /* invalid */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_PROTOCOL_UNKNOWN \
+               UINT32_C(0x0)
+       /* UDP */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_PROTOCOL_UDP \
+               UINT32_C(0x6)
+       /* TCP */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_PROTOCOL_TCP \
+               UINT32_C(0x11)
+       uint16_t dst_id;
+       /*
+        * If set, this value shall represent the Logical VNIC ID of the
+        * destination VNIC for the RX path and network port id of the
+        * destination port for the TX path.
+        */
+       uint16_t mirror_vnic_id;
+       /* Logical VNIC ID of the VNIC where traffic is mirrored. */
        uint8_t tunnel_type;
-       /* Tunnel Type. */
+       /*
+        * This value indicates the tunnel type for this filter. If this
+        * field is not specified, then the filter shall apply to both
+        * non-tunneled and tunneled packets. If this field conflicts
+        * with the tunnel_type specified in the l2_filter_id, then the
+        * HWRM shall return an error for this command.
+        */
+       /* Non-tunnel */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NONTUNNEL \
+               UINT32_C(0x0)
        /* Virtual eXtensible Local Area Network        (VXLAN) */
-       #define HWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_VXLAN \
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN \
                UINT32_C(0x1)
+       /*
+        * Network Virtualization Generic Routing
+        * Encapsulation        (NVGRE)
+        */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NVGRE \
+               UINT32_C(0x2)
+       /*
+        * Generic Routing Encapsulation        (GRE) inside
+        * Ethernet payload
+        */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_L2GRE \
+               UINT32_C(0x3)
+       /* IP in IP */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPIP \
+               UINT32_C(0x4)
        /* Generic Network Virtualization Encapsulation (Geneve) */
-       #define HWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_GENEVE \
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_GENEVE \
                UINT32_C(0x5)
-       uint8_t unused_0[7];
+       /* Multi-Protocol Lable Switching       (MPLS) */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_MPLS \
+               UINT32_C(0x6)
+       /* Stateless Transport Tunnel   (STT) */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_STT UINT32_C(0x7)
+       /*
+        * Generic Routing Encapsulation        (GRE) inside IP
+        * datagram payload
+        */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPGRE \
+               UINT32_C(0x8)
+       /* Any tunneled traffic */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL \
+               UINT32_C(0xff)
+       uint8_t pri_hint;
+       /*
+        * This hint is provided to help in placing the filter in the
+        * filter table.
+        */
+       /* No preference */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_NO_PREFER \
+               UINT32_C(0x0)
+       /* Above the given filter */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_ABOVE UINT32_C(0x1)
+       /* Below the given filter */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_BELOW UINT32_C(0x2)
+       /* As high as possible */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_HIGHEST \
+               UINT32_C(0x3)
+       /* As low as possible */
+       #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_LOWEST UINT32_C(0x4)
+       uint32_t src_ipaddr[4];
+       /*
+        * The value of source IP address to be used in filtering. For
+        * IPv4, first four bytes represent the IP address.
+        */
+       uint32_t src_ipaddr_mask[4];
+       /*
+        * The value of source IP address mask to be used in filtering.
+        * For IPv4, first four bytes represent the IP address mask.
+        */
+       uint32_t dst_ipaddr[4];
+       /*
+        * The value of destination IP address to be used in filtering.
+        * For IPv4, first four bytes represent the IP address.
+        */
+       uint32_t dst_ipaddr_mask[4];
+       /*
+        * The value of destination IP address mask to be used in
+        * filtering. For IPv4, first four bytes represent the IP
+        * address mask.
+        */
+       uint16_t src_port;
+       /*
+        * The value of source port to be used in filtering. Applies to
+        * UDP and TCP traffic.
+        */
+       uint16_t src_port_mask;
+       /*
+        * The value of source port mask to be used in filtering.
+        * Applies to UDP and TCP traffic.
+        */
+       uint16_t dst_port;
+       /*
+        * The value of destination port to be used in filtering.
+        * Applies to UDP and TCP traffic.
+        */
+       uint16_t dst_port_mask;
+       /*
+        * The value of destination port mask to be used in filtering.
+        * Applies to UDP and TCP traffic.
+        */
+       uint64_t ntuple_filter_id_hint;
+       /* This is the ID of the filter that goes along with the pri_hint. */
 } __attribute__((packed));
 
-/* Output      (16 bytes) */
-struct hwrm_tunnel_dst_port_query_output {
+/* Output      (24 bytes) */
+struct hwrm_cfa_ntuple_filter_alloc_output {
        uint16_t error_code;
        /*
         * Pass/Fail or error type Note: receiver to verify the in
@@ -9520,20 +9779,14 @@ struct hwrm_tunnel_dst_port_query_output {
         * byte of the response is a valid flag that will read as '1'
         * when the command has been completely written to memory.
         */
-       uint16_t tunnel_dst_port_id;
-       /*
-        * This field represents the identifier of L4 destination port
-        * used for the given tunnel type. This field is valid for
-        * specific tunnel types that use layer 4       (e.g. UDP) transports
-        * for tunneling.
-        */
-       uint16_t tunnel_dst_port_val;
+       uint64_t ntuple_filter_id;
+       /* This value is an opaque id into CFA data structures. */
+       uint32_t flow_id;
        /*
-        * This field represents the value of L4 destination port
-        * identified by tunnel_dst_port_id. This field is valid for
-        * specific tunnel types that use layer 4       (e.g. UDP) transports
-        * for tunneling. This field is in network byte order. A value
-        * of 0 means that the destination port is not configured.
+        * This is the ID of the flow associated with this filter. This
+        * value shall be used to match and associate the flow
+        * identifier returned in completion records. A value of
+        * 0xFFFFFFFF shall indicate no flow id.
         */
        uint8_t unused_0;
        uint8_t unused_1;
@@ -9549,24 +9802,10 @@ struct hwrm_tunnel_dst_port_query_output {
         */
 } __attribute__((packed));
 
-/* hwrm_tunnel_dst_port_alloc */
-/*
- * Description: This function is called by a driver to allocate l4 destination
- * port for a specific tunnel type. The destination port value is provided in
- * the input. If the HWRM supports only one global destination port for a tunnel
- * type, then the HWRM shall keep track of its usage as described below. # The
- * first caller that allocates a destination port shall always succeed and the
- * HWRM shall save the destination port configuration for that tunnel type and
- * increment the usage count to 1. # Subsequent callers allocating the same
- * destination port for that tunnel type shall succeed and the HWRM shall
- * increment the usage count for that port for each subsequent caller that
- * succeeds. # Any subsequent caller trying to allocate a different destination
- * port for that tunnel type shall fail until the usage count for the original
- * destination port goes to zero. # A caller that frees a port will cause the
- * usage count for that port to decrement.
- */
+/* hwrm_cfa_ntuple_filter_free */
+/* Description: Free an ntuple filter */
 /* Input       (24 bytes) */
-struct hwrm_tunnel_dst_port_alloc_input {
+struct hwrm_cfa_ntuple_filter_free_input {
        uint16_t req_type;
        /*
         * This value indicates what type of request this is. The format
@@ -9593,27 +9832,12 @@ struct hwrm_tunnel_dst_port_alloc_input {
         * when the request is complete. This area must be 16B aligned
         * and must be cleared to zero before the request is made.
         */
-       uint8_t tunnel_type;
-       /* Tunnel Type. */
-       /* Virtual eXtensible Local Area Network        (VXLAN) */
-       #define HWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_VXLAN UINT32_C(0x1)
-       /* Generic Network Virtualization Encapsulation (Geneve) */
-       #define HWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_GENEVE \
-               UINT32_C(0x5)
-       uint8_t unused_0;
-       uint16_t tunnel_dst_port_val;
-       /*
-        * This field represents the value of L4 destination port used
-        * for the given tunnel type. This field is valid for specific
-        * tunnel types that use layer 4        (e.g. UDP) transports for
-        * tunneling. This field is in network byte order. A value of 0
-        * shall fail the command.
-        */
-       uint32_t unused_1;
+       uint64_t ntuple_filter_id;
+       /* This value is an opaque id into CFA data structures. */
 } __attribute__((packed));
 
 /* Output      (16 bytes) */
-struct hwrm_tunnel_dst_port_alloc_output {
+struct hwrm_cfa_ntuple_filter_free_output {
        uint16_t error_code;
        /*
         * Pass/Fail or error type Note: receiver to verify the in
@@ -9629,17 +9853,10 @@ struct hwrm_tunnel_dst_port_alloc_output {
         * byte of the response is a valid flag that will read as '1'
         * when the command has been completely written to memory.
         */
-       uint16_t tunnel_dst_port_id;
-       /*
-        * Identifier of a tunnel L4 destination port value. Only
-        * applies to tunnel types that has l4 destination port
-        * parameters.
-        */
-       uint8_t unused_0;
+       uint32_t unused_0;
        uint8_t unused_1;
        uint8_t unused_2;
        uint8_t unused_3;
-       uint8_t unused_4;
        uint8_t valid;
        /*
         * This field is used in Output records to indicate that the
@@ -9651,13 +9868,13 @@ struct hwrm_tunnel_dst_port_alloc_output {
         */
 } __attribute__((packed));
 
-/* hwrm_tunnel_dst_port_free */
+/* hwrm_cfa_ntuple_filter_cfg */
 /*
- * Description: This function is called by a driver to free l4 destination port
- * for a specific tunnel type.
+ * Description: Configure an ntuple filter with a new destination VNIC and/or
+ * meter.
  */
-/* Input       (24 bytes) */
-struct hwrm_tunnel_dst_port_free_input {
+/* Input       (48 bytes) */
+struct hwrm_cfa_ntuple_filter_cfg_input {
        uint16_t req_type;
        /*
         * This value indicates what type of request this is. The format
@@ -9684,24 +9901,50 @@ struct hwrm_tunnel_dst_port_free_input {
         * when the request is complete. This area must be 16B aligned
         * and must be cleared to zero before the request is made.
         */
-       uint8_t tunnel_type;
-       /* Tunnel Type. */
-       /* Virtual eXtensible Local Area Network        (VXLAN) */
-       #define HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_VXLAN UINT32_C(0x1)
-       /* Generic Network Virtualization Encapsulation (Geneve) */
-       #define HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_GENEVE UINT32_C(0x5)
-       uint8_t unused_0;
-       uint16_t tunnel_dst_port_id;
+       uint32_t enables;
+       /* This bit must be '1' for the new_dst_id field to be configured. */
+       #define HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_ENABLES_NEW_DST_ID     \
+               UINT32_C(0x1)
        /*
-        * Identifier of a tunnel L4 destination port value. Only
-        * applies to tunnel types that has l4 destination port
-        * parameters.
+        * This bit must be '1' for the new_mirror_vnic_id field to be
+        * configured.
         */
-       uint32_t unused_1;
+       #define HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_ENABLES_NEW_MIRROR_VNIC_ID \
+               UINT32_C(0x2)
+       /*
+        * This bit must be '1' for the new_meter_instance_id field to
+        * be configured.
+        */
+       #define HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_ENABLES_NEW_METER_INSTANCE_ID \
+               UINT32_C(0x4)
+       uint32_t unused_0;
+       uint64_t ntuple_filter_id;
+       /* This value is an opaque id into CFA data structures. */
+       uint32_t new_dst_id;
+       /*
+        * If set, this value shall represent the new Logical VNIC ID of
+        * the destination VNIC for the RX path and new network port id
+        * of the destination port for the TX path.
+        */
+       uint32_t new_mirror_vnic_id;
+       /* New Logical VNIC ID of the VNIC where traffic is mirrored. */
+       uint16_t new_meter_instance_id;
+       /*
+        * New meter to attach to the flow. Specifying the invalid
+        * instance ID is used to remove any existing meter from the
+        * flow.
+        */
+       /*
+        * A value of 0xfff is considered invalid and
+        * implies the instance is not configured.
+        */
+       #define HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_NEW_METER_INSTANCE_ID_INVALID \
+               UINT32_C(0xffff)
+       uint16_t unused_1[3];
 } __attribute__((packed));
 
 /* Output      (16 bytes) */
-struct hwrm_tunnel_dst_port_free_output {
+struct hwrm_cfa_ntuple_filter_cfg_output {
        uint16_t error_code;
        /*
         * Pass/Fail or error type Note: receiver to verify the in
@@ -9732,13 +9975,19 @@ struct hwrm_tunnel_dst_port_free_output {
         */
 } __attribute__((packed));
 
-/* hwrm_stat_ctx_alloc */
+/* hwrm_cfa_em_flow_alloc */
 /*
- * Description: This command allocates and does basic preparation for a stat
- * context.
+ * Description: This is a generic Exact Match  (EM) flow that uses fields from
+ * L4/L3/L2 headers. The EM flows apply to transmit and receive traffic. All
+ * L2/L3/L4 header fields are specified in network byte order. For each EM flow,
+ * there is an associated set of actions specified. For tunneled packets, all
+ * L2/L3/L4 fields specified are fields of inner headers unless otherwise
+ * specified. # If a field specified in this command is not enabled as a valid
+ * field, then that field shall not be used in matching packet header fields
+ * against this EM flow entry.
  */
-/* Input       (32 bytes) */
-struct hwrm_stat_ctx_alloc_input {
+/* Input       (112 bytes) */
+struct hwrm_cfa_em_flow_alloc_input {
        uint16_t req_type;
        /*
         * This value indicates what type of request this is. The format
@@ -9765,16 +10014,842 @@ struct hwrm_stat_ctx_alloc_input {
         * when the request is complete. This area must be 16B aligned
         * and must be cleared to zero before the request is made.
         */
-       uint64_t stats_dma_addr;
-       /* This is the address for statistic block. */
-       uint32_t update_period_ms;
+       uint32_t flags;
        /*
-        * The statistic block update period in ms. e.g. 250ms, 500ms,
-        * 750ms, 1000ms. If update_period_ms is 0, then the stats
-        * update shall be never done and the DMA address shall not be
-        * used. In this case, the stat block can only be read by
-        * hwrm_stat_ctx_query command.
-        */
+        * Enumeration denoting the RX, TX type of the resource. This
+        * enumeration is used for resources that are similar for both
+        * TX and RX paths of the chip.
+        */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PATH UINT32_C(0x1)
+       /* tx path */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PATH_TX      \
+               (UINT32_C(0x0) << 0)
+       /* rx path */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PATH_RX      \
+               (UINT32_C(0x1) << 0)
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PATH_LAST \
+               CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PATH_RX
+       /*
+        * Setting of this flag indicates enabling of a byte counter for
+        * a given flow.
+        */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_BYTE_CTR     UINT32_C(0x2)
+       /*
+        * Setting of this flag indicates enabling of a packet counter
+        * for a given flow.
+        */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PKT_CTR      UINT32_C(0x4)
+       /*
+        * Setting of this flag indicates de-capsulation action for the
+        * given flow.
+        */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_DECAP        UINT32_C(0x8)
+       /*
+        * Setting of this flag indicates encapsulation action for the
+        * given flow.
+        */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_ENCAP        UINT32_C(0x10)
+       /*
+        * Setting of this flag indicates drop action. If this flag is
+        * not set, then it should be considered accept action.
+        */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_DROP UINT32_C(0x20)
+       /*
+        * Setting of this flag indicates that a meter is expected to be
+        * attached to this flow. This hint can be used when choosing
+        * the action record format required for the flow.
+        */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_METER        UINT32_C(0x40)
+       uint32_t enables;
+       /* This bit must be '1' for the l2_filter_id field to be configured. */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_L2_FILTER_ID UINT32_C(0x1)
+       /* This bit must be '1' for the tunnel_type field to be configured. */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_TUNNEL_TYPE UINT32_C(0x2)
+       /* This bit must be '1' for the tunnel_id field to be configured. */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_TUNNEL_ID UINT32_C(0x4)
+       /* This bit must be '1' for the src_macaddr field to be configured. */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_SRC_MACADDR UINT32_C(0x8)
+       /* This bit must be '1' for the dst_macaddr field to be configured. */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_DST_MACADDR UINT32_C(0x10)
+       /* This bit must be '1' for the ovlan_vid field to be configured. */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_OVLAN_VID UINT32_C(0x20)
+       /* This bit must be '1' for the ivlan_vid field to be configured. */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_IVLAN_VID UINT32_C(0x40)
+       /* This bit must be '1' for the ethertype field to be configured. */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_ETHERTYPE UINT32_C(0x80)
+       /* This bit must be '1' for the src_ipaddr field to be configured. */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_SRC_IPADDR UINT32_C(0x100)
+       /* This bit must be '1' for the dst_ipaddr field to be configured. */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_DST_IPADDR UINT32_C(0x200)
+       /* This bit must be '1' for the ipaddr_type field to be configured. */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_IPADDR_TYPE UINT32_C(0x400)
+       /* This bit must be '1' for the ip_protocol field to be configured. */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_IP_PROTOCOL UINT32_C(0x800)
+       /* This bit must be '1' for the src_port field to be configured. */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_SRC_PORT UINT32_C(0x1000)
+       /* This bit must be '1' for the dst_port field to be configured. */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_DST_PORT UINT32_C(0x2000)
+       /* This bit must be '1' for the dst_id field to be configured. */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_DST_ID     UINT32_C(0x4000)
+       /*
+        * This bit must be '1' for the mirror_vnic_id field to be
+        * configured.
+        */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_MIRROR_VNIC_ID     \
+               UINT32_C(0x8000)
+       /*
+        * This bit must be '1' for the encap_record_id field to be
+        * configured.
+        */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_ENCAP_RECORD_ID     \
+               UINT32_C(0x10000)
+       /*
+        * This bit must be '1' for the meter_instance_id field to be
+        * configured.
+        */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_METER_INSTANCE_ID  \
+               UINT32_C(0x20000)
+       uint64_t l2_filter_id;
+       /*
+        * This value identifies a set of CFA data structures used for
+        * an L2 context.
+        */
+       uint8_t tunnel_type;
+       /* Tunnel Type. */
+       /* Non-tunnel */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_NONTUNNEL \
+               UINT32_C(0x0)
+       /* Virtual eXtensible Local Area Network        (VXLAN) */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_VXLAN  UINT32_C(0x1)
+       /*
+        * Network Virtualization Generic Routing
+        * Encapsulation        (NVGRE)
+        */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_NVGRE  UINT32_C(0x2)
+       /*
+        * Generic Routing Encapsulation        (GRE) inside
+        * Ethernet payload
+        */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_L2GRE  UINT32_C(0x3)
+       /* IP in IP */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_IPIP   UINT32_C(0x4)
+       /* Generic Network Virtualization Encapsulation (Geneve) */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_GENEVE UINT32_C(0x5)
+       /* Multi-Protocol Lable Switching       (MPLS) */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_MPLS   UINT32_C(0x6)
+       /* Stateless Transport Tunnel   (STT) */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_STT    UINT32_C(0x7)
+       /*
+        * Generic Routing Encapsulation        (GRE) inside IP
+        * datagram payload
+        */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_IPGRE  UINT32_C(0x8)
+       /* Any tunneled traffic */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL \
+               UINT32_C(0xff)
+       uint8_t unused_0;
+       uint16_t unused_1;
+       uint32_t tunnel_id;
+       /*
+        * Tunnel identifier. Virtual Network Identifier        (VNI). Only
+        * valid with tunnel_types VXLAN, NVGRE, and Geneve. Only lower
+        * 24-bits of VNI field are used in setting up the filter.
+        */
+       uint8_t src_macaddr[6];
+       /*
+        * This value indicates the source MAC address in the Ethernet
+        * header.
+        */
+       uint16_t meter_instance_id;
+       /* The meter instance to attach to the flow. */
+       /*
+        * A value of 0xfff is considered invalid and
+        * implies the instance is not configured.
+        */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_METER_INSTANCE_ID_INVALID   \
+               UINT32_C(0xffff)
+       uint8_t dst_macaddr[6];
+       /*
+        * This value indicates the destination MAC address in the
+        * Ethernet header.
+        */
+       uint16_t ovlan_vid;
+       /*
+        * This value indicates the VLAN ID of the outer VLAN tag in the
+        * Ethernet header.
+        */
+       uint16_t ivlan_vid;
+       /*
+        * This value indicates the VLAN ID of the inner VLAN tag in the
+        * Ethernet header.
+        */
+       uint16_t ethertype;
+       /* This value indicates the ethertype in the Ethernet header. */
+       uint8_t ip_addr_type;
+       /*
+        * This value indicates the type of IP address. 4 - IPv4 6 -
+        * IPv6 All others are invalid.
+        */
+       /* invalid */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_ADDR_TYPE_UNKNOWN UINT32_C(0x0)
+       /* IPv4 */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_ADDR_TYPE_IPV4  UINT32_C(0x4)
+       /* IPv6 */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_ADDR_TYPE_IPV6  UINT32_C(0x6)
+       uint8_t ip_protocol;
+       /*
+        * The value of protocol filed in IP header. Applies to UDP and
+        * TCP traffic. 6 - UDP 17 - TCP
+        */
+       /* invalid */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_PROTOCOL_UNKNOWN UINT32_C(0x0)
+       /* UDP */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_PROTOCOL_UDP    UINT32_C(0x6)
+       /* TCP */
+       #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_PROTOCOL_TCP    UINT32_C(0x11)
+       uint8_t unused_2;
+       uint8_t unused_3;
+       uint32_t src_ipaddr[4];
+       /*
+        * The value of source IP address to be used in filtering. For
+        * IPv4, first four bytes represent the IP address.
+        */
+       uint32_t dst_ipaddr[4];
+       /*
+        * big_endian = True The value of destination IP address to be
+        * used in filtering. For IPv4, first four bytes represent the
+        * IP address.
+        */
+       uint16_t src_port;
+       /*
+        * The value of source port to be used in filtering. Applies to
+        * UDP and TCP traffic.
+        */
+       uint16_t dst_port;
+       /*
+        * The value of destination port to be used in filtering.
+        * Applies to UDP and TCP traffic.
+        */
+       uint16_t dst_id;
+       /*
+        * If set, this value shall represent the Logical VNIC ID of the
+        * destination VNIC for the RX path and network port id of the
+        * destination port for the TX path.
+        */
+       uint16_t mirror_vnic_id;
+       /* Logical VNIC ID of the VNIC where traffic is mirrored. */
+       uint32_t encap_record_id;
+       /* Logical ID of the encapsulation record. */
+       uint32_t unused_4;
+} __attribute__((packed));
+
+/* Output      (24 bytes) */
+struct hwrm_cfa_em_flow_alloc_output {
+       uint16_t error_code;
+       /*
+        * Pass/Fail or error type Note: receiver to verify the in
+        * parameters, and fail the call with an error when appropriate
+        */
+       uint16_t req_type;
+       /* This field returns the type of original request. */
+       uint16_t seq_id;
+       /* This field provides original sequence number of the command. */
+       uint16_t resp_len;
+       /*
+        * This field is the length of the response in bytes. The last
+        * byte of the response is a valid flag that will read as '1'
+        * when the command has been completely written to memory.
+        */
+       uint64_t em_filter_id;
+       /* This value is an opaque id into CFA data structures. */
+       uint32_t flow_id;
+       /*
+        * This is the ID of the flow associated with this filter. This
+        * value shall be used to match and associate the flow
+        * identifier returned in completion records. A value of
+        * 0xFFFFFFFF shall indicate no flow id.
+        */
+       uint8_t unused_0;
+       uint8_t unused_1;
+       uint8_t unused_2;
+       uint8_t valid;
+       /*
+        * This field is used in Output records to indicate that the
+        * output is completely written to RAM. This field should be
+        * read as '1' to indicate that the output has been completely
+        * written. When writing a command completion or response to an
+        * internal processor, the order of writes has to be such that
+        * this field is written last.
+        */
+} __attribute__((packed));
+
+/* hwrm_cfa_em_flow_free */
+/* Description: Free an EM flow table entry */
+/* Input       (24 bytes) */
+struct hwrm_cfa_em_flow_free_input {
+       uint16_t req_type;
+       /*
+        * This value indicates what type of request this is. The format
+        * for the rest of the command is determined by this field.
+        */
+       uint16_t cmpl_ring;
+       /*
+        * This value indicates the what completion ring the request
+        * will be optionally completed on. If the value is -1, then no
+        * CR completion will be generated. Any other value must be a
+        * valid CR ring_id value for this function.
+        */
+       uint16_t seq_id;
+       /* This value indicates the command sequence number. */
+       uint16_t target_id;
+       /*
+        * Target ID of this command. 0x0 - 0xFFF8 - Used for function
+        * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
+        * - HWRM
+        */
+       uint64_t resp_addr;
+       /*
+        * This is the host address where the response will be written
+        * when the request is complete. This area must be 16B aligned
+        * and must be cleared to zero before the request is made.
+        */
+       uint64_t em_filter_id;
+       /* This value is an opaque id into CFA data structures. */
+} __attribute__((packed));
+
+/* Output      (16 bytes) */
+struct hwrm_cfa_em_flow_free_output {
+       uint16_t error_code;
+       /*
+        * Pass/Fail or error type Note: receiver to verify the in
+        * parameters, and fail the call with an error when appropriate
+        */
+       uint16_t req_type;
+       /* This field returns the type of original request. */
+       uint16_t seq_id;
+       /* This field provides original sequence number of the command. */
+       uint16_t resp_len;
+       /*
+        * This field is the length of the response in bytes. The last
+        * byte of the response is a valid flag that will read as '1'
+        * when the command has been completely written to memory.
+        */
+       uint32_t unused_0;
+       uint8_t unused_1;
+       uint8_t unused_2;
+       uint8_t unused_3;
+       uint8_t valid;
+       /*
+        * This field is used in Output records to indicate that the
+        * output is completely written to RAM. This field should be
+        * read as '1' to indicate that the output has been completely
+        * written. When writing a command completion or response to an
+        * internal processor, the order of writes has to be such that
+        * this field is written last.
+        */
+} __attribute__((packed));
+
+/* hwrm_cfa_em_flow_cfg */
+/*
+ * Description: Configure an EM flow with a new destination VNIC and/or meter.
+ */
+/* Input       (48 bytes) */
+struct hwrm_cfa_em_flow_cfg_input {
+       uint16_t req_type;
+       /*
+        * This value indicates what type of request this is. The format
+        * for the rest of the command is determined by this field.
+        */
+       uint16_t cmpl_ring;
+       /*
+        * This value indicates the what completion ring the request
+        * will be optionally completed on. If the value is -1, then no
+        * CR completion will be generated. Any other value must be a
+        * valid CR ring_id value for this function.
+        */
+       uint16_t seq_id;
+       /* This value indicates the command sequence number. */
+       uint16_t target_id;
+       /*
+        * Target ID of this command. 0x0 - 0xFFF8 - Used for function
+        * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
+        * - HWRM
+        */
+       uint64_t resp_addr;
+       /*
+        * This is the host address where the response will be written
+        * when the request is complete. This area must be 16B aligned
+        * and must be cleared to zero before the request is made.
+        */
+       uint32_t enables;
+       /* This bit must be '1' for the new_dst_id field to be configured. */
+       #define HWRM_CFA_EM_FLOW_CFG_INPUT_ENABLES_NEW_DST_ID   UINT32_C(0x1)
+       /*
+        * This bit must be '1' for the new_mirror_vnic_id field to be
+        * configured.
+        */
+       #define HWRM_CFA_EM_FLOW_CFG_INPUT_ENABLES_NEW_MIRROR_VNIC_ID   \
+               UINT32_C(0x2)
+       /*
+        * This bit must be '1' for the new_meter_instance_id field to
+        * be configured.
+        */
+       #define HWRM_CFA_EM_FLOW_CFG_INPUT_ENABLES_NEW_METER_INSTANCE_ID  \
+               UINT32_C(0x4)
+       uint32_t unused_0;
+       uint64_t em_filter_id;
+       /* This value is an opaque id into CFA data structures. */
+       uint32_t new_dst_id;
+       /*
+        * If set, this value shall represent the new Logical VNIC ID of
+        * the destination VNIC for the RX path and network port id of
+        * the destination port for the TX path.
+        */
+       uint32_t new_mirror_vnic_id;
+       /* New Logical VNIC ID of the VNIC where traffic is mirrored. */
+       uint16_t new_meter_instance_id;
+       /*
+        * New meter to attach to the flow. Specifying the invalid
+        * instance ID is used to remove any existing meter from the
+        * flow.
+        */
+       /*
+        * A value of 0xfff is considered invalid and
+        * implies the instance is not configured.
+        */
+       #define HWRM_CFA_EM_FLOW_CFG_INPUT_NEW_METER_INSTANCE_ID_INVALID \
+               UINT32_C(0xffff)
+       uint16_t unused_1[3];
+} __attribute__((packed));
+
+/* Output      (16 bytes) */
+struct hwrm_cfa_em_flow_cfg_output {
+       uint16_t error_code;
+       /*
+        * Pass/Fail or error type Note: receiver to verify the in
+        * parameters, and fail the call with an error when appropriate
+        */
+       uint16_t req_type;
+       /* This field returns the type of original request. */
+       uint16_t seq_id;
+       /* This field provides original sequence number of the command. */
+       uint16_t resp_len;
+       /*
+        * This field is the length of the response in bytes. The last
+        * byte of the response is a valid flag that will read as '1'
+        * when the command has been completely written to memory.
+        */
+       uint32_t unused_0;
+       uint8_t unused_1;
+       uint8_t unused_2;
+       uint8_t unused_3;
+       uint8_t valid;
+       /*
+        * This field is used in Output records to indicate that the
+        * output is completely written to RAM. This field should be
+        * read as '1' to indicate that the output has been completely
+        * written. When writing a command completion or response to an
+        * internal processor, the order of writes has to be such that
+        * this field is written last.
+        */
+} __attribute__((packed));
+
+
+/* hwrm_cfa_vlan_antispoof_cfg */
+/* Description: Configures vlan anti-spoof filters for VF. */
+/* Input (32 bytes) */
+struct hwrm_cfa_vlan_antispoof_cfg_input {
+       uint16_t req_type;
+       /*
+        * This value indicates what type of request this is. The format for the
+        * rest of the command is determined by this field.
+        */
+       uint16_t cmpl_ring;
+       /*
+        * This value indicates the what completion ring the request will be
+        * optionally completed on. If the value is -1, then no CR completion
+        * will be generated. Any other value must be a valid CR ring_id value
+        * for this function.
+        */
+       uint16_t seq_id;
+       /* This value indicates the command sequence number. */
+       uint16_t target_id;
+       /*
+        * Target ID of this command. 0x0 - 0xFFF8 - Used for function ids
+        * 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF - HWRM
+        */
+       uint64_t resp_addr;
+       /*
+        * This is the host address where the response will be written when the
+        * request is complete. This area must be 16B aligned and must be
+        * cleared to zero before the request is made.
+        */
+       uint16_t fid;
+       /*
+        * Function ID of the function that is being configured. Only valid for
+        * a VF FID configured by the PF.
+        */
+       uint8_t unused_0;
+       uint8_t unused_1;
+       uint32_t num_vlan_entries;
+       /* Number of VLAN entries in the vlan_tag_mask_tbl. */
+       uint64_t vlan_tag_mask_tbl_addr;
+       /*
+        * The vlan_tag_mask_tbl_addr is the DMA address of the VLAN antispoof
+        * table. Each table entry contains the 16-bit TPID (0x8100 or 0x88a8
+        * only), 16-bit VLAN ID, and a 16-bit mask, all in network order to
+        * match hwrm_cfa_l2_set_rx_mask. For an individual VLAN entry, the mask
+        * value should be 0xfff for the 12-bit VLAN ID.
+        */
+};
+
+/* Output (16 bytes) */
+struct hwrm_cfa_vlan_antispoof_cfg_output {
+       uint16_t error_code;
+       /*
+        * Pass/Fail or error type Note: receiver to verify the in parameters,
+        * and fail the call with an error when appropriate
+        */
+       uint16_t req_type;
+       /* This field returns the type of original request. */
+       uint16_t seq_id;
+       /* This field provides original sequence number of the command. */
+       uint16_t resp_len;
+       /*
+        * This field is the length of the response in bytes. The last byte of
+        * the response is a valid flag that will read as '1' when the command
+        * has been completely written to memory.
+        */
+       uint32_t unused_0;
+       uint8_t unused_1;
+       uint8_t unused_2;
+       uint8_t unused_3;
+       uint8_t valid;
+       /*
+        * This field is used in Output records to indicate that the output is
+        * completely written to RAM. This field should be read as '1' to
+        * indicate that the output has been completely written. When writing a
+        * command completion or response to an internal processor, the order of
+        * writes has to be such that this field is written last.
+        */
+};
+
+/* hwrm_tunnel_dst_port_query */
+/*
+ * Description: This function is called by a driver to query tunnel type
+ * specific destination port configuration.
+ */
+/* Input       (24 bytes) */
+struct hwrm_tunnel_dst_port_query_input {
+       uint16_t req_type;
+       /*
+        * This value indicates what type of request this is. The format
+        * for the rest of the command is determined by this field.
+        */
+       uint16_t cmpl_ring;
+       /*
+        * This value indicates the what completion ring the request
+        * will be optionally completed on. If the value is -1, then no
+        * CR completion will be generated. Any other value must be a
+        * valid CR ring_id value for this function.
+        */
+       uint16_t seq_id;
+       /* This value indicates the command sequence number. */
+       uint16_t target_id;
+       /*
+        * Target ID of this command. 0x0 - 0xFFF8 - Used for function
+        * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
+        * - HWRM
+        */
+       uint64_t resp_addr;
+       /*
+        * This is the host address where the response will be written
+        * when the request is complete. This area must be 16B aligned
+        * and must be cleared to zero before the request is made.
+        */
+       uint8_t tunnel_type;
+       /* Tunnel Type. */
+       /* Virtual eXtensible Local Area Network        (VXLAN) */
+       #define HWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_VXLAN \
+               UINT32_C(0x1)
+       /* Generic Network Virtualization Encapsulation (Geneve) */
+       #define HWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_GENEVE \
+               UINT32_C(0x5)
+       uint8_t unused_0[7];
+} __attribute__((packed));
+
+/* Output      (16 bytes) */
+struct hwrm_tunnel_dst_port_query_output {
+       uint16_t error_code;
+       /*
+        * Pass/Fail or error type Note: receiver to verify the in
+        * parameters, and fail the call with an error when appropriate
+        */
+       uint16_t req_type;
+       /* This field returns the type of original request. */
+       uint16_t seq_id;
+       /* This field provides original sequence number of the command. */
+       uint16_t resp_len;
+       /*
+        * This field is the length of the response in bytes. The last
+        * byte of the response is a valid flag that will read as '1'
+        * when the command has been completely written to memory.
+        */
+       uint16_t tunnel_dst_port_id;
+       /*
+        * This field represents the identifier of L4 destination port
+        * used for the given tunnel type. This field is valid for
+        * specific tunnel types that use layer 4       (e.g. UDP) transports
+        * for tunneling.
+        */
+       uint16_t tunnel_dst_port_val;
+       /*
+        * This field represents the value of L4 destination port
+        * identified by tunnel_dst_port_id. This field is valid for
+        * specific tunnel types that use layer 4       (e.g. UDP) transports
+        * for tunneling. This field is in network byte order. A value
+        * of 0 means that the destination port is not configured.
+        */
+       uint8_t unused_0;
+       uint8_t unused_1;
+       uint8_t unused_2;
+       uint8_t valid;
+       /*
+        * This field is used in Output records to indicate that the
+        * output is completely written to RAM. This field should be
+        * read as '1' to indicate that the output has been completely
+        * written. When writing a command completion or response to an
+        * internal processor, the order of writes has to be such that
+        * this field is written last.
+        */
+} __attribute__((packed));
+
+/* hwrm_tunnel_dst_port_alloc */
+/*
+ * Description: This function is called by a driver to allocate l4 destination
+ * port for a specific tunnel type. The destination port value is provided in
+ * the input. If the HWRM supports only one global destination port for a tunnel
+ * type, then the HWRM shall keep track of its usage as described below. # The
+ * first caller that allocates a destination port shall always succeed and the
+ * HWRM shall save the destination port configuration for that tunnel type and
+ * increment the usage count to 1. # Subsequent callers allocating the same
+ * destination port for that tunnel type shall succeed and the HWRM shall
+ * increment the usage count for that port for each subsequent caller that
+ * succeeds. # Any subsequent caller trying to allocate a different destination
+ * port for that tunnel type shall fail until the usage count for the original
+ * destination port goes to zero. # A caller that frees a port will cause the
+ * usage count for that port to decrement.
+ */
+/* Input       (24 bytes) */
+struct hwrm_tunnel_dst_port_alloc_input {
+       uint16_t req_type;
+       /*
+        * This value indicates what type of request this is. The format
+        * for the rest of the command is determined by this field.
+        */
+       uint16_t cmpl_ring;
+       /*
+        * This value indicates the what completion ring the request
+        * will be optionally completed on. If the value is -1, then no
+        * CR completion will be generated. Any other value must be a
+        * valid CR ring_id value for this function.
+        */
+       uint16_t seq_id;
+       /* This value indicates the command sequence number. */
+       uint16_t target_id;
+       /*
+        * Target ID of this command. 0x0 - 0xFFF8 - Used for function
+        * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
+        * - HWRM
+        */
+       uint64_t resp_addr;
+       /*
+        * This is the host address where the response will be written
+        * when the request is complete. This area must be 16B aligned
+        * and must be cleared to zero before the request is made.
+        */
+       uint8_t tunnel_type;
+       /* Tunnel Type. */
+       /* Virtual eXtensible Local Area Network        (VXLAN) */
+       #define HWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_VXLAN UINT32_C(0x1)
+       /* Generic Network Virtualization Encapsulation (Geneve) */
+       #define HWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_GENEVE \
+               UINT32_C(0x5)
+       uint8_t unused_0;
+       uint16_t tunnel_dst_port_val;
+       /*
+        * This field represents the value of L4 destination port used
+        * for the given tunnel type. This field is valid for specific
+        * tunnel types that use layer 4        (e.g. UDP) transports for
+        * tunneling. This field is in network byte order. A value of 0
+        * shall fail the command.
+        */
+       uint32_t unused_1;
+} __attribute__((packed));
+
+/* Output      (16 bytes) */
+struct hwrm_tunnel_dst_port_alloc_output {
+       uint16_t error_code;
+       /*
+        * Pass/Fail or error type Note: receiver to verify the in
+        * parameters, and fail the call with an error when appropriate
+        */
+       uint16_t req_type;
+       /* This field returns the type of original request. */
+       uint16_t seq_id;
+       /* This field provides original sequence number of the command. */
+       uint16_t resp_len;
+       /*
+        * This field is the length of the response in bytes. The last
+        * byte of the response is a valid flag that will read as '1'
+        * when the command has been completely written to memory.
+        */
+       uint16_t tunnel_dst_port_id;
+       /*
+        * Identifier of a tunnel L4 destination port value. Only
+        * applies to tunnel types that has l4 destination port
+        * parameters.
+        */
+       uint8_t unused_0;
+       uint8_t unused_1;
+       uint8_t unused_2;
+       uint8_t unused_3;
+       uint8_t unused_4;
+       uint8_t valid;
+       /*
+        * This field is used in Output records to indicate that the
+        * output is completely written to RAM. This field should be
+        * read as '1' to indicate that the output has been completely
+        * written. When writing a command completion or response to an
+        * internal processor, the order of writes has to be such that
+        * this field is written last.
+        */
+} __attribute__((packed));
+
+/* hwrm_tunnel_dst_port_free */
+/*
+ * Description: This function is called by a driver to free l4 destination port
+ * for a specific tunnel type.
+ */
+/* Input       (24 bytes) */
+struct hwrm_tunnel_dst_port_free_input {
+       uint16_t req_type;
+       /*
+        * This value indicates what type of request this is. The format
+        * for the rest of the command is determined by this field.
+        */
+       uint16_t cmpl_ring;
+       /*
+        * This value indicates the what completion ring the request
+        * will be optionally completed on. If the value is -1, then no
+        * CR completion will be generated. Any other value must be a
+        * valid CR ring_id value for this function.
+        */
+       uint16_t seq_id;
+       /* This value indicates the command sequence number. */
+       uint16_t target_id;
+       /*
+        * Target ID of this command. 0x0 - 0xFFF8 - Used for function
+        * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
+        * - HWRM
+        */
+       uint64_t resp_addr;
+       /*
+        * This is the host address where the response will be written
+        * when the request is complete. This area must be 16B aligned
+        * and must be cleared to zero before the request is made.
+        */
+       uint8_t tunnel_type;
+       /* Tunnel Type. */
+       /* Virtual eXtensible Local Area Network        (VXLAN) */
+       #define HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_VXLAN UINT32_C(0x1)
+       /* Generic Network Virtualization Encapsulation (Geneve) */
+       #define HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_GENEVE UINT32_C(0x5)
+       uint8_t unused_0;
+       uint16_t tunnel_dst_port_id;
+       /*
+        * Identifier of a tunnel L4 destination port value. Only
+        * applies to tunnel types that has l4 destination port
+        * parameters.
+        */
+       uint32_t unused_1;
+} __attribute__((packed));
+
+/* Output      (16 bytes) */
+struct hwrm_tunnel_dst_port_free_output {
+       uint16_t error_code;
+       /*
+        * Pass/Fail or error type Note: receiver to verify the in
+        * parameters, and fail the call with an error when appropriate
+        */
+       uint16_t req_type;
+       /* This field returns the type of original request. */
+       uint16_t seq_id;
+       /* This field provides original sequence number of the command. */
+       uint16_t resp_len;
+       /*
+        * This field is the length of the response in bytes. The last
+        * byte of the response is a valid flag that will read as '1'
+        * when the command has been completely written to memory.
+        */
+       uint32_t unused_0;
+       uint8_t unused_1;
+       uint8_t unused_2;
+       uint8_t unused_3;
+       uint8_t valid;
+       /*
+        * This field is used in Output records to indicate that the
+        * output is completely written to RAM. This field should be
+        * read as '1' to indicate that the output has been completely
+        * written. When writing a command completion or response to an
+        * internal processor, the order of writes has to be such that
+        * this field is written last.
+        */
+} __attribute__((packed));
+
+/* hwrm_stat_ctx_alloc */
+/*
+ * Description: This command allocates and does basic preparation for a stat
+ * context.
+ */
+/* Input       (32 bytes) */
+struct hwrm_stat_ctx_alloc_input {
+       uint16_t req_type;
+       /*
+        * This value indicates what type of request this is. The format
+        * for the rest of the command is determined by this field.
+        */
+       uint16_t cmpl_ring;
+       /*
+        * This value indicates the what completion ring the request
+        * will be optionally completed on. If the value is -1, then no
+        * CR completion will be generated. Any other value must be a
+        * valid CR ring_id value for this function.
+        */
+       uint16_t seq_id;
+       /* This value indicates the command sequence number. */
+       uint16_t target_id;
+       /*
+        * Target ID of this command. 0x0 - 0xFFF8 - Used for function
+        * ids 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF
+        * - HWRM
+        */
+       uint64_t resp_addr;
+       /*
+        * This is the host address where the response will be written
+        * when the request is complete. This area must be 16B aligned
+        * and must be cleared to zero before the request is made.
+        */
+       uint64_t stats_dma_addr;
+       /* This is the address for statistic block. */
+       uint32_t update_period_ms;
+       /*
+        * The statistic block update period in ms. e.g. 250ms, 500ms,
+        * 750ms, 1000ms. If update_period_ms is 0, then the stats
+        * update shall be never done and the DMA address shall not be
+        * used. In this case, the stat block can only be read by
+        * hwrm_stat_ctx_query command.
+        */
        uint8_t stat_ctx_flags;
        /*
         * This field is used to specify statistics context specific
@@ -10240,6 +11315,144 @@ struct hwrm_reject_fwd_resp_output {
         */
 } __attribute__((packed));
 
+/* hwrm_nvm_get_dir_entries */
+/* Input (24 bytes) */
+struct hwrm_nvm_get_dir_entries_input {
+       uint16_t req_type;
+       uint16_t cmpl_ring;
+       uint16_t seq_id;
+       uint16_t target_id;
+       uint64_t resp_addr;
+       uint64_t host_dest_addr;
+} __attribute__((packed));
+
+/* Output (16 bytes) */
+struct hwrm_nvm_get_dir_entries_output {
+       uint16_t error_code;
+       uint16_t req_type;
+       uint16_t seq_id;
+       uint16_t resp_len;
+       uint32_t unused_0;
+       uint8_t unused_1;
+       uint8_t unused_2;
+       uint8_t unused_3;
+       uint8_t valid;
+} __attribute__((packed));
+
+
+/* hwrm_nvm_erase_dir_entry */
+/* Input (24 bytes) */
+struct hwrm_nvm_erase_dir_entry_input {
+       uint16_t req_type;
+       uint16_t cmpl_ring;
+       uint16_t seq_id;
+       uint16_t target_id;
+       uint64_t resp_addr;
+       uint16_t dir_idx;
+       uint16_t unused_0[3];
+};
+
+/* Output (16 bytes) */
+struct hwrm_nvm_erase_dir_entry_output {
+       uint16_t error_code;
+       uint16_t req_type;
+       uint16_t seq_id;
+       uint16_t resp_len;
+       uint32_t unused_0;
+       uint8_t unused_1;
+       uint8_t unused_2;
+       uint8_t unused_3;
+       uint8_t valid;
+};
+
+/* hwrm_nvm_get_dir_info */
+/* Input (16 bytes) */
+struct hwrm_nvm_get_dir_info_input {
+       uint16_t req_type;
+       uint16_t cmpl_ring;
+       uint16_t seq_id;
+       uint16_t target_id;
+       uint64_t resp_addr;
+} __attribute__((packed));
+
+/* Output (24 bytes) */
+struct hwrm_nvm_get_dir_info_output {
+       uint16_t error_code;
+       uint16_t req_type;
+       uint16_t seq_id;
+       uint16_t resp_len;
+       uint32_t entries;
+       uint32_t entry_length;
+       uint32_t unused_0;
+       uint8_t unused_1;
+       uint8_t unused_2;
+       uint8_t unused_3;
+       uint8_t valid;
+} __attribute__((packed));
+
+
+/* hwrm_nvm_write */
+/* Input (48 bytes) */
+struct hwrm_nvm_write_input {
+       uint16_t req_type;
+       uint16_t cmpl_ring;
+       uint16_t seq_id;
+       uint16_t target_id;
+       uint64_t resp_addr;
+       uint64_t host_src_addr;
+       uint16_t dir_type;
+       uint16_t dir_ordinal;
+       uint16_t dir_ext;
+       uint16_t dir_attr;
+       uint32_t dir_data_length;
+       uint16_t option;
+       uint16_t flags;
+       #define NVM_WRITE_REQ_FLAGS_KEEP_ORIG_ACTIVE_IMG            0x1UL
+       uint32_t dir_item_length;
+       uint32_t unused_0;
+};
+
+/* Output (16 bytes) */
+struct hwrm_nvm_write_output {
+       uint16_t error_code;
+       uint16_t req_type;
+       uint16_t seq_id;
+       uint16_t resp_len;
+       uint32_t dir_item_length;
+       uint16_t dir_idx;
+       uint8_t unused_0;
+       uint8_t valid;
+};
+/* hwrm_nvm_read */
+/* Input (40 bytes) */
+struct hwrm_nvm_read_input {
+       uint16_t req_type;
+       uint16_t cmpl_ring;
+       uint16_t seq_id;
+       uint16_t target_id;
+       uint64_t resp_addr;
+       uint64_t host_dest_addr;
+       uint16_t dir_idx;
+       uint8_t unused_0;
+       uint8_t unused_1;
+       uint32_t offset;
+       uint32_t len;
+       uint32_t unused_2;
+} __attribute__((packed));
+
+/* Output (16 bytes) */
+struct hwrm_nvm_read_output {
+       uint16_t error_code;
+       uint16_t req_type;
+       uint16_t seq_id;
+       uint16_t resp_len;
+       uint32_t unused_0;
+       uint8_t unused_1;
+       uint8_t unused_2;
+       uint8_t unused_3;
+       uint8_t valid;
+} __attribute__((packed));
+
 /* Hardware Resource Manager Specification */
 /* Description: This structure is used to specify port description. */
 /*
@@ -10297,6 +11510,16 @@ struct output {
         */
 } __attribute__((packed));
 
+/* Short Command Structure (16 bytes) */
+struct hwrm_short_input {
+       uint16_t req_type;
+       uint16_t signature;
+       #define HWRM_SHORT_REQ_SIGNATURE_SHORT_CMD      (UINT32_C(0x4321))
+       uint16_t unused_0;
+       uint16_t size;
+       uint64_t req_addr;
+} __attribute__((packed));
+
 #define HWRM_GET_HWRM_ERROR_CODE(arg) \
        { \
                typeof(arg) x = (arg); \