New upstream version 18.11-rc1
[deb_dpdk.git] / drivers / net / qede / base / ecore_hsi_common.h
index 5c2a08f..6d4a4dd 100644 (file)
@@ -1,9 +1,7 @@
-/*
- * Copyright (c) 2016 QLogic Corporation.
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright (c) 2016 - 2018 Cavium Inc.
  * All rights reserved.
- * www.qlogic.com
- *
- * See LICENSE.qede_pmd for copyright and licensing details.
+ * www.cavium.com
  */
 
 #ifndef __ECORE_HSI_COMMON__
@@ -381,7 +379,7 @@ struct e4_xstorm_core_conn_ag_ctx {
        __le16 reserved16 /* physical_q2 */;
        __le16 tx_bd_cons /* word3 */;
        __le16 tx_bd_or_spq_prod /* word4 */;
-       __le16 word5 /* word5 */;
+       __le16 updated_qm_pq_id /* word5 */;
        __le16 conn_dpi /* conn_dpi */;
        u8 byte3 /* byte3 */;
        u8 byte4 /* byte4 */;
@@ -618,7 +616,7 @@ struct ustorm_core_conn_st_ctx {
 /*
  * core connection context
  */
-struct core_conn_context {
+struct e4_core_conn_context {
 /* ystorm storm context */
        struct ystorm_core_conn_st_ctx ystorm_st_context;
        struct regpair ystorm_st_padding[2] /* padding */;
@@ -661,6 +659,7 @@ enum core_event_opcode {
        CORE_EVENT_RX_QUEUE_START,
        CORE_EVENT_RX_QUEUE_STOP,
        CORE_EVENT_RX_QUEUE_FLUSH,
+       CORE_EVENT_TX_QUEUE_UPDATE,
        MAX_CORE_EVENT_OPCODE
 };
 
@@ -745,6 +744,7 @@ enum core_ramrod_cmd_id {
        CORE_RAMROD_RX_QUEUE_STOP /* RX Queue Stop Ramrod */,
        CORE_RAMROD_TX_QUEUE_STOP /* TX Queue Stop Ramrod */,
        CORE_RAMROD_RX_QUEUE_FLUSH /* RX Flush queue Ramrod */,
+       CORE_RAMROD_TX_QUEUE_UPDATE /* TX Queue Update Ramrod */,
        MAX_CORE_RAMROD_CMD_ID
 };
 
@@ -858,7 +858,8 @@ struct core_rx_gsi_offload_cqe {
        __le16 src_mac_addrlo /* lo 2 bytes of source mac address */;
 /* These are the lower 16 bit of QP id in RoCE BTH header */
        __le16 qp_id;
-       __le32 gid_dst[4] /* Gid destination address */;
+       __le32 src_qp /* Source QP from DETH header */;
+       __le32 reserved[3];
 };
 
 /*
@@ -899,7 +900,12 @@ struct core_rx_start_ramrod_data {
        u8 drop_ttl0_flg /* drop packet with ttl0 if set */;
        __le16 num_of_pbl_pages /* Num of pages in CQE PBL */;
 /* if set, 802.1q tags will be removed and copied to CQE */
-       u8 inner_vlan_removal_en;
+/* if set, 802.1q tags will be removed and copied to CQE */
+       u8 inner_vlan_stripping_en;
+/* if set and inner vlan does not exist, the outer vlan will copied to CQE as
+ * inner vlan. should be used in MF_OVLAN mode only.
+ */
+       u8 report_outer_vlan;
        u8 queue_id /* Light L2 RX Queue ID */;
        u8 main_func_queue /* Is this the main queue for the PF */;
 /* Duplicate broadcast packets to LL2 main queue in mf_si mode. Valid if
@@ -916,7 +922,11 @@ struct core_rx_start_ramrod_data {
        struct core_rx_action_on_error action_on_error;
 /* set when in GSI offload mode on ROCE connection */
        u8 gsi_offload_flag;
-       u8 reserved[7];
+/* If set, the inner vlan (802.1q tag) priority that is written to cqe will be
+ * zero out, used for TenantDcb
+ */
+       u8 wipe_inner_vlan_pri_en;
+       u8 reserved[5];
 };
 
 
@@ -938,48 +948,53 @@ struct core_rx_stop_ramrod_data {
 struct core_tx_bd_data {
        __le16 as_bitfield;
 /* Do not allow additional VLAN manipulations on this packet (DCB) */
-#define CORE_TX_BD_DATA_FORCE_VLAN_MODE_MASK      0x1
-#define CORE_TX_BD_DATA_FORCE_VLAN_MODE_SHIFT     0
-/* Insert VLAN into packet */
-#define CORE_TX_BD_DATA_VLAN_INSERTION_MASK       0x1
-#define CORE_TX_BD_DATA_VLAN_INSERTION_SHIFT      1
+#define CORE_TX_BD_DATA_FORCE_VLAN_MODE_MASK         0x1
+#define CORE_TX_BD_DATA_FORCE_VLAN_MODE_SHIFT        0
+/* Insert VLAN into packet. Cannot be set for LB packets
+ * (tx_dst == CORE_TX_DEST_LB)
+ */
+#define CORE_TX_BD_DATA_VLAN_INSERTION_MASK          0x1
+#define CORE_TX_BD_DATA_VLAN_INSERTION_SHIFT         1
 /* This is the first BD of the packet (for debug) */
-#define CORE_TX_BD_DATA_START_BD_MASK             0x1
-#define CORE_TX_BD_DATA_START_BD_SHIFT            2
+#define CORE_TX_BD_DATA_START_BD_MASK                0x1
+#define CORE_TX_BD_DATA_START_BD_SHIFT               2
 /* Calculate the IP checksum for the packet */
-#define CORE_TX_BD_DATA_IP_CSUM_MASK              0x1
-#define CORE_TX_BD_DATA_IP_CSUM_SHIFT             3
+#define CORE_TX_BD_DATA_IP_CSUM_MASK                 0x1
+#define CORE_TX_BD_DATA_IP_CSUM_SHIFT                3
 /* Calculate the L4 checksum for the packet */
-#define CORE_TX_BD_DATA_L4_CSUM_MASK              0x1
-#define CORE_TX_BD_DATA_L4_CSUM_SHIFT             4
+#define CORE_TX_BD_DATA_L4_CSUM_MASK                 0x1
+#define CORE_TX_BD_DATA_L4_CSUM_SHIFT                4
 /* Packet is IPv6 with extensions */
-#define CORE_TX_BD_DATA_IPV6_EXT_MASK             0x1
-#define CORE_TX_BD_DATA_IPV6_EXT_SHIFT            5
+#define CORE_TX_BD_DATA_IPV6_EXT_MASK                0x1
+#define CORE_TX_BD_DATA_IPV6_EXT_SHIFT               5
 /* If IPv6+ext, and if l4_csum is 1, than this field indicates L4 protocol:
  * 0-TCP, 1-UDP
  */
-#define CORE_TX_BD_DATA_L4_PROTOCOL_MASK          0x1
-#define CORE_TX_BD_DATA_L4_PROTOCOL_SHIFT         6
+#define CORE_TX_BD_DATA_L4_PROTOCOL_MASK             0x1
+#define CORE_TX_BD_DATA_L4_PROTOCOL_SHIFT            6
 /* The pseudo checksum mode to place in the L4 checksum field. Required only
  * when IPv6+ext and l4_csum is set. (use enum core_l4_pseudo_checksum_mode)
  */
-#define CORE_TX_BD_DATA_L4_PSEUDO_CSUM_MODE_MASK  0x1
-#define CORE_TX_BD_DATA_L4_PSEUDO_CSUM_MODE_SHIFT 7
+#define CORE_TX_BD_DATA_L4_PSEUDO_CSUM_MODE_MASK     0x1
+#define CORE_TX_BD_DATA_L4_PSEUDO_CSUM_MODE_SHIFT    7
 /* Number of BDs that make up one packet - width wide enough to present
  * CORE_LL2_TX_MAX_BDS_PER_PACKET
  */
-#define CORE_TX_BD_DATA_NBDS_MASK                 0xF
-#define CORE_TX_BD_DATA_NBDS_SHIFT                8
+#define CORE_TX_BD_DATA_NBDS_MASK                    0xF
+#define CORE_TX_BD_DATA_NBDS_SHIFT                   8
 /* Use roce_flavor enum - Differentiate between Roce flavors is valid when
  * connType is ROCE (use enum core_roce_flavor_type)
  */
-#define CORE_TX_BD_DATA_ROCE_FLAV_MASK            0x1
-#define CORE_TX_BD_DATA_ROCE_FLAV_SHIFT           12
+#define CORE_TX_BD_DATA_ROCE_FLAV_MASK               0x1
+#define CORE_TX_BD_DATA_ROCE_FLAV_SHIFT              12
 /* Calculate ip length */
-#define CORE_TX_BD_DATA_IP_LEN_MASK               0x1
-#define CORE_TX_BD_DATA_IP_LEN_SHIFT              13
-#define CORE_TX_BD_DATA_RESERVED0_MASK            0x3
-#define CORE_TX_BD_DATA_RESERVED0_SHIFT           14
+#define CORE_TX_BD_DATA_IP_LEN_MASK                  0x1
+#define CORE_TX_BD_DATA_IP_LEN_SHIFT                 13
+/* disables the STAG insertion, relevant only in MF OVLAN mode. */
+#define CORE_TX_BD_DATA_DISABLE_STAG_INSERTION_MASK  0x1
+#define CORE_TX_BD_DATA_DISABLE_STAG_INSERTION_SHIFT 14
+#define CORE_TX_BD_DATA_RESERVED0_MASK               0x1
+#define CORE_TX_BD_DATA_RESERVED0_SHIFT              15
 };
 
 /*
@@ -1033,7 +1048,11 @@ struct core_tx_start_ramrod_data {
        __le16 qm_pq_id /* QM PQ ID */;
 /* set when in GSI offload mode on ROCE connection */
        u8 gsi_offload_flag;
-       u8 resrved[3];
+/* vport id of the current connection, used to access non_rdma_in_to_in_pri_map
+ * which is per vport
+ */
+       u8 vport_id;
+       u8 resrved[2];
 };
 
 
@@ -1045,15 +1064,26 @@ struct core_tx_stop_ramrod_data {
 };
 
 
+/*
+ * Ramrod data for tx queue update ramrod
+ */
+struct core_tx_update_ramrod_data {
+       u8 update_qm_pq_id_flg /* Flag to Update QM PQ ID */;
+       u8 reserved0;
+       __le16 qm_pq_id /* Updated QM PQ ID */;
+       __le32 reserved1[1];
+};
+
+
 /*
  * Enum flag for what type of dcb data to update
  */
 enum dcb_dscp_update_mode {
-/* use when no change should be done to dcb data */
+/* use when no change should be done to DCB data */
        DONT_UPDATE_DCB_DSCP,
-       UPDATE_DCB /* use to update only l2 (vlan) priority */,
-       UPDATE_DSCP /* use to update only l3 dscp */,
-       UPDATE_DCB_DSCP /* update vlan pri and dscp */,
+       UPDATE_DCB /* use to update only L2 (vlan) priority */,
+       UPDATE_DSCP /* use to update only IP DSCP */,
+       UPDATE_DCB_DSCP /* update vlan pri and DSCP */,
        MAX_DCB_DSCP_UPDATE_FLAG
 };
 
@@ -1149,6 +1179,25 @@ struct eth_rx_rate_limit {
 };
 
 
+/* Update RSS indirection table entry command. One outstanding command supported
+ * per PF.
+ */
+struct eth_tstorm_rss_update_data {
+/* Valid flag. Driver must set this flag, FW clear valid flag when ready for new
+ * RSS update command.
+ */
+       u8 valid;
+/* Global VPORT ID. If RSS is disable for VPORT, RSS update command will be
+ * ignored.
+ */
+       u8 vport_id;
+       u8 ind_table_index /* RSS indirect table index that will be updated. */;
+       u8 reserved;
+       __le16 ind_table_value /* RSS indirect table new value. */;
+       __le16 reserved1 /* reserved. */;
+};
+
+
 struct eth_ustorm_per_pf_stat {
 /* number of total ucast bytes received on loopback port without errors */
        struct regpair rcv_lb_ucast_bytes;
@@ -1181,6 +1230,63 @@ struct eth_ustorm_per_queue_stat {
 };
 
 
+/*
+ * Event Ring VF-PF Channel data
+ */
+struct vf_pf_channel_eqe_data {
+       struct regpair msg_addr /* VF-PF message address */;
+};
+
+/*
+ * Event Ring malicious VF data
+ */
+struct malicious_vf_eqe_data {
+       u8 vf_id /* Malicious VF ID */;
+       u8 err_id /* Malicious VF error (use enum malicious_vf_error_id) */;
+       __le16 reserved[3];
+};
+
+/*
+ * Event Ring initial cleanup data
+ */
+struct initial_cleanup_eqe_data {
+       u8 vf_id /* VF ID */;
+       u8 reserved[7];
+};
+
+/*
+ * Event Data Union
+ */
+union event_ring_data {
+       u8 bytes[8] /* Byte Array */;
+       struct vf_pf_channel_eqe_data vf_pf_channel /* VF-PF Channel data */;
+       struct iscsi_eqe_data iscsi_info /* Dedicated fields to iscsi data */;
+/* Dedicated fields to iscsi connect done results */
+       struct iscsi_connect_done_results iscsi_conn_done_info;
+       struct malicious_vf_eqe_data malicious_vf /* Malicious VF data */;
+/* VF Initial Cleanup data */
+       struct initial_cleanup_eqe_data vf_init_cleanup;
+};
+
+
+/*
+ * Event Ring Entry
+ */
+struct event_ring_entry {
+       u8 protocol_id /* Event Protocol ID (use enum protocol_type) */;
+       u8 opcode /* Event Opcode */;
+       __le16 reserved0 /* Reserved */;
+       __le16 echo /* Echo value from ramrod data on the host */;
+       u8 fw_return_code /* FW return code for SP ramrods */;
+       u8 flags;
+/* 0: synchronous EQE - a completion of SP message. 1: asynchronous EQE */
+#define EVENT_RING_ENTRY_ASYNC_MASK      0x1
+#define EVENT_RING_ENTRY_ASYNC_SHIFT     0
+#define EVENT_RING_ENTRY_RESERVED1_MASK  0x7F
+#define EVENT_RING_ENTRY_RESERVED1_SHIFT 1
+       union event_ring_data data;
+};
+
 /*
  * Event Ring Next Page Address
  */
@@ -1210,6 +1316,23 @@ enum fw_flow_ctrl_mode {
 };
 
 
+/*
+ * GFT profile type.
+ */
+enum gft_profile_type {
+/* tunnel type, inner 4 tuple, IP type and L4 type match. */
+       GFT_PROFILE_TYPE_4_TUPLE,
+/* tunnel type, inner L4 destination port, IP type and L4 type match. */
+       GFT_PROFILE_TYPE_L4_DST_PORT,
+/* tunnel type, inner IP destination address and IP type match. */
+       GFT_PROFILE_TYPE_IP_DST_ADDR,
+/* tunnel type, inner IP source address and IP type match. */
+       GFT_PROFILE_TYPE_IP_SRC_ADDR,
+       GFT_PROFILE_TYPE_TUNNEL_TYPE /* tunnel type and outer IP type match. */,
+       MAX_GFT_PROFILE_TYPE
+};
+
+
 /*
  * Major and Minor hsi Versions
  */
@@ -1310,6 +1433,35 @@ struct mstorm_vf_zone {
 };
 
 
+/*
+ * vlan header including TPID and TCI fields
+ */
+struct vlan_header {
+       __le16 tpid /* Tag Protocol Identifier */;
+       __le16 tci /* Tag Control Information */;
+};
+
+/*
+ * outer tag configurations
+ */
+struct outer_tag_config_struct {
+/* Enables updating S-tag priority from inner tag or DCB. Should be 1 for Bette
+ * Davis, UFP with Host Control mode, and UFP with DCB over base interface.
+ * else - 0.
+ */
+       u8 enable_stag_pri_change;
+/* If inner_to_outer_pri_map is initialize then set pri_map_valid */
+       u8 pri_map_valid;
+       u8 reserved[2];
+/* In case mf_mode is MF_OVLAN, this field specifies the outer tag protocol
+ * identifier and outer tag control information
+ */
+       struct vlan_header outer_tag;
+/* Map from inner to outer priority. Set pri_map_valid when init map */
+       u8 inner_to_outer_pri_map[8];
+};
+
+
 /*
  * personality per PF
  */
@@ -1338,6 +1490,10 @@ struct pf_start_tunnel_config {
  * FW will use a default port
  */
        u8 set_geneve_udp_port_flg;
+/* Set no-innet-L2 VXLAN tunnel UDP destination port to
+ * no_inner_l2_vxlan_udp_port. If not set - FW will use a default port
+ */
+       u8 set_no_inner_l2_vxlan_udp_port_flg;
        u8 tunnel_clss_vxlan /* Rx classification scheme for VXLAN tunnel. */;
 /* Rx classification scheme for l2 GENEVE tunnel. */
        u8 tunnel_clss_l2geneve;
@@ -1345,11 +1501,15 @@ struct pf_start_tunnel_config {
        u8 tunnel_clss_ipgeneve;
        u8 tunnel_clss_l2gre /* Rx classification scheme for l2 GRE tunnel. */;
        u8 tunnel_clss_ipgre /* Rx classification scheme for ip GRE tunnel. */;
-       u8 reserved;
 /* VXLAN tunnel UDP destination port. Valid if set_vxlan_udp_port_flg=1 */
        __le16 vxlan_udp_port;
 /* GENEVE tunnel UDP destination port. Valid if set_geneve_udp_port_flg=1 */
        __le16 geneve_udp_port;
+/* no-innet-L2 VXLAN  tunnel UDP destination port. Valid if
+ * set_no_inner_l2_vxlan_udp_port_flg=1
+ */
+       __le16 no_inner_l2_vxlan_udp_port;
+       __le16 reserved[3];
 };
 
 /*
@@ -1361,7 +1521,6 @@ struct pf_start_ramrod_data {
        struct regpair consolid_q_pbl_addr;
 /* tunnel configuration. */
        struct pf_start_tunnel_config tunnel_config;
-       __le32 reserved;
        __le16 event_ring_sb_id /* Status block ID */;
 /* All VfIds owned by Pf will be from baseVfId till baseVfId+numVfs */
        u8 base_vf_id;
@@ -1381,30 +1540,28 @@ struct pf_start_ramrod_data {
        u8 integ_phase /* Integration phase */;
 /* If set, inter-pf tx switching is allowed in Switch Independent func mode */
        u8 allow_npar_tx_switching;
-/* Map from inner to outer priority. Set pri_map_valid when init map */
-       u8 inner_to_outer_pri_map[8];
-/* If inner_to_outer_pri_map is initialize then set pri_map_valid */
-       u8 pri_map_valid;
-/* In case mf_mode is MF_OVLAN, this field specifies the outer vlan
- * (lower 16 bits) and ethType to use (higher 16 bits)
- */
-       __le32 outer_tag;
+       u8 reserved0;
 /* FP HSI version to be used by FW */
        struct hsi_fp_ver_struct hsi_fp_ver;
+/* Outer tag configurations */
+       struct outer_tag_config_struct outer_tag_config;
 };
 
 
 
 /*
- * Data for port update ramrod
+ * Per protocol DCB data
  */
 struct protocol_dcb_data {
-       u8 dcb_enable_flag /* dcbEnable flag value */;
-       u8 dscp_enable_flag /* If set use dscp value */;
-       u8 dcb_priority /* dcbPri flag value */;
-       u8 dcb_tc /* dcb TC value */;
-       u8 dscp_val /* dscp value to write if dscp_enable_flag is set */;
-       u8 reserved0;
+       u8 dcb_enable_flag /* Enable DCB */;
+       u8 dscp_enable_flag /* Enable updating DSCP value */;
+       u8 dcb_priority /* DCB priority */;
+       u8 dcb_tc /* DCB TC */;
+       u8 dscp_val /* DSCP value to write if dscp_enable_flag is set */;
+/* When DCB is enabled - if this flag is set, dont add VLAN 0 tag to untagged
+ * frames
+ */
+       u8 dcb_dont_add_vlan0;
 };
 
 /*
@@ -1425,6 +1582,8 @@ struct pf_update_tunnel_config {
        u8 set_vxlan_udp_port_flg;
 /* Update GENEVE tunnel UDP destination port. */
        u8 set_geneve_udp_port_flg;
+/* Update no-innet-L2 VXLAN  tunnel UDP destination port. */
+       u8 set_no_inner_l2_vxlan_udp_port_flg;
        u8 tunnel_clss_vxlan /* Classification scheme for VXLAN tunnel. */;
 /* Classification scheme for l2 GENEVE tunnel. */
        u8 tunnel_clss_l2geneve;
@@ -1432,24 +1591,31 @@ struct pf_update_tunnel_config {
        u8 tunnel_clss_ipgeneve;
        u8 tunnel_clss_l2gre /* Classification scheme for l2 GRE tunnel. */;
        u8 tunnel_clss_ipgre /* Classification scheme for ip GRE tunnel. */;
+       u8 reserved;
        __le16 vxlan_udp_port /* VXLAN tunnel UDP destination port. */;
        __le16 geneve_udp_port /* GENEVE tunnel UDP destination port. */;
-       __le16 reserved;
+/* no-innet-L2 VXLAN  tunnel UDP destination port. */
+       __le16 no_inner_l2_vxlan_udp_port;
+       __le16 reserved1[3];
 };
 
 /*
  * Data for port update ramrod
  */
 struct pf_update_ramrod_data {
-       u8 pf_id;
-       u8 update_eth_dcb_data_mode /* Update Eth DCB  data indication */;
-       u8 update_fcoe_dcb_data_mode /* Update FCOE DCB  data indication */;
-       u8 update_iscsi_dcb_data_mode /* Update iSCSI DCB  data indication */;
+/* Update Eth DCB  data indication (use enum dcb_dscp_update_mode) */
+       u8 update_eth_dcb_data_mode;
+/* Update FCOE DCB  data indication (use enum dcb_dscp_update_mode) */
+       u8 update_fcoe_dcb_data_mode;
+/* Update iSCSI DCB  data indication (use enum dcb_dscp_update_mode) */
+       u8 update_iscsi_dcb_data_mode;
        u8 update_roce_dcb_data_mode /* Update ROCE DCB  data indication */;
 /* Update RROCE (RoceV2) DCB  data indication */
        u8 update_rroce_dcb_data_mode;
        u8 update_iwarp_dcb_data_mode /* Update IWARP DCB  data indication */;
        u8 update_mf_vlan_flag /* Update MF outer vlan Id */;
+/* Update Enable STAG Priority Change indication */
+       u8 update_enable_stag_pri_change;
        struct protocol_dcb_data eth_dcb_data /* core eth related fields */;
        struct protocol_dcb_data fcoe_dcb_data /* core fcoe related fields */;
 /* core iscsi related fields */
@@ -1460,7 +1626,12 @@ struct pf_update_ramrod_data {
 /* core iwarp related fields */
        struct protocol_dcb_data iwarp_dcb_data;
        __le16 mf_vlan /* new outer vlan id value */;
-       __le16 reserved;
+/* enables updating S-tag priority from inner tag or DCB. Should be 1 for Bette
+ * Davis, UFP with Host Control mode, and UFP with DCB over base interface.
+ * else - 0
+ */
+       u8 enable_stag_pri_change;
+       u8 reserved;
 /* tunnel configuration. */
        struct pf_update_tunnel_config tunnel_config;
 };
@@ -1555,6 +1726,13 @@ struct rl_update_ramrod_data {
 /* ID of last RL, that will be updated. If clear, single RL will updated. */
        u8 rl_id_last;
        u8 rl_dc_qcn_flg /* If set, RL will used for DCQCN. */;
+/* If set, alpha will be reset to 1 when the state machine is idle. */
+       u8 dcqcn_reset_alpha_on_idle;
+/* Byte counter threshold to change rate increase stage. */
+       u8 rl_bc_stage_th;
+/* Timer threshold to change rate increase stage. */
+       u8 rl_timer_stage_th;
+       u8 reserved1;
        __le32 rl_bc_rate /* Byte Counter Limit. */;
        __le16 rl_max_rate /* Maximum rate in 1.6 Mbps resolution. */;
        __le16 rl_r_ai /* Active increase rate. */;
@@ -1563,7 +1741,7 @@ struct rl_update_ramrod_data {
        __le32 dcqcn_k_us /* DCQCN Alpha update interval. */;
        __le32 dcqcn_timeuot_us /* DCQCN timeout. */;
        __le32 qcn_timeuot_us /* QCN timeout. */;
-       __le32 reserved[2];
+       __le32 reserved2;
 };
 
 
@@ -1620,6 +1798,7 @@ struct tstorm_per_port_stat {
        struct regpair eth_vxlan_tunn_filter_discard;
 /* GENEVE dropped packets */
        struct regpair eth_geneve_tunn_filter_discard;
+       struct regpair eth_gft_drop_pkt /* GFT dropped packets */;
 };
 
 
@@ -1745,6 +1924,7 @@ enum vf_zone_size_mode {
 
 
 
+
 /*
  * Attentions status block
  */
@@ -1757,17 +1937,6 @@ struct atten_status_block {
 };
 
 
-/*
- * Igu cleanup bit values to distinguish between clean or producer consumer
- * update.
- */
-enum command_type_bit {
-       IGU_COMMAND_TYPE_NOP = 0,
-       IGU_COMMAND_TYPE_SET = 1,
-       MAX_COMMAND_TYPE_BIT
-};
-
-
 /*
  * DMAE command
  */
@@ -2021,6 +2190,53 @@ struct e4_ystorm_core_conn_ag_ctx {
 };
 
 
+struct fw_asserts_ram_section {
+/* The offset of the section in the RAM in RAM lines (64-bit units) */
+       __le16 section_ram_line_offset;
+/* The size of the section in RAM lines (64-bit units) */
+       __le16 section_ram_line_size;
+/* The offset of the asserts list within the section in dwords */
+       u8 list_dword_offset;
+/* The size of an assert list element in dwords */
+       u8 list_element_dword_size;
+       u8 list_num_elements /* The number of elements in the asserts list */;
+/* The offset of the next list index field within the section in dwords */
+       u8 list_next_index_dword_offset;
+};
+
+
+struct fw_ver_num {
+       u8 major /* Firmware major version number */;
+       u8 minor /* Firmware minor version number */;
+       u8 rev /* Firmware revision version number */;
+       u8 eng /* Firmware engineering version number (for bootleg versions) */;
+};
+
+struct fw_ver_info {
+       __le16 tools_ver /* Tools version number */;
+       u8 image_id /* FW image ID (e.g. main, l2b, kuku) */;
+       u8 reserved1;
+       struct fw_ver_num num /* FW version number */;
+       __le32 timestamp /* FW Timestamp in unix time  (sec. since 1970) */;
+       __le32 reserved2;
+};
+
+struct fw_info {
+       struct fw_ver_info ver /* FW version information */;
+/* Info regarding the FW asserts section in the Storm RAM */
+       struct fw_asserts_ram_section fw_asserts_section;
+};
+
+
+struct fw_info_location {
+       __le32 grc_addr /* GRC address where the fw_info struct is located. */;
+/* Size of the fw_info structure (thats located at the grc_addr). */
+       __le32 size;
+};
+
+
+
+
 /*
  * IGU cleanup command
  */
@@ -2200,23 +2416,23 @@ struct qm_rf_opportunistic_mask {
 /*
  * QM hardware structure of QM map memory
  */
-struct qm_rf_pq_map {
+struct qm_rf_pq_map_e4 {
        __le32 reg;
-#define QM_RF_PQ_MAP_PQ_VALID_MASK          0x1 /* PQ active */
-#define QM_RF_PQ_MAP_PQ_VALID_SHIFT         0
-#define QM_RF_PQ_MAP_RL_ID_MASK             0xFF /* RL ID */
-#define QM_RF_PQ_MAP_RL_ID_SHIFT            1
+#define QM_RF_PQ_MAP_E4_PQ_VALID_MASK          0x1 /* PQ active */
+#define QM_RF_PQ_MAP_E4_PQ_VALID_SHIFT         0
+#define QM_RF_PQ_MAP_E4_RL_ID_MASK             0xFF /* RL ID */
+#define QM_RF_PQ_MAP_E4_RL_ID_SHIFT            1
 /* the first PQ associated with the VPORT and VOQ of this PQ */
-#define QM_RF_PQ_MAP_VP_PQ_ID_MASK          0x1FF
-#define QM_RF_PQ_MAP_VP_PQ_ID_SHIFT         9
-#define QM_RF_PQ_MAP_VOQ_MASK               0x1F /* VOQ */
-#define QM_RF_PQ_MAP_VOQ_SHIFT              18
-#define QM_RF_PQ_MAP_WRR_WEIGHT_GROUP_MASK  0x3 /* WRR weight */
-#define QM_RF_PQ_MAP_WRR_WEIGHT_GROUP_SHIFT 23
-#define QM_RF_PQ_MAP_RL_VALID_MASK          0x1 /* RL active */
-#define QM_RF_PQ_MAP_RL_VALID_SHIFT         25
-#define QM_RF_PQ_MAP_RESERVED_MASK          0x3F
-#define QM_RF_PQ_MAP_RESERVED_SHIFT         26
+#define QM_RF_PQ_MAP_E4_VP_PQ_ID_MASK          0x1FF
+#define QM_RF_PQ_MAP_E4_VP_PQ_ID_SHIFT         9
+#define QM_RF_PQ_MAP_E4_VOQ_MASK               0x1F /* VOQ */
+#define QM_RF_PQ_MAP_E4_VOQ_SHIFT              18
+#define QM_RF_PQ_MAP_E4_WRR_WEIGHT_GROUP_MASK  0x3 /* WRR weight */
+#define QM_RF_PQ_MAP_E4_WRR_WEIGHT_GROUP_SHIFT 23
+#define QM_RF_PQ_MAP_E4_RL_VALID_MASK          0x1 /* RL active */
+#define QM_RF_PQ_MAP_E4_RL_VALID_SHIFT         25
+#define QM_RF_PQ_MAP_E4_RESERVED_MASK          0x3F
+#define QM_RF_PQ_MAP_E4_RESERVED_SHIFT         26
 };