net/ice/base: align macro names to specification
[dpdk.git] / drivers / net / ice / base / ice_type.h
index 9773a54..4c84466 100644 (file)
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2001-2019
+ * Copyright(c) 2001-2020 Intel Corporation
  */
 
 #ifndef _ICE_TYPE_H_
 
 #define IS_ASCII(_ch)  ((_ch) < 0x80)
 
+#define STRUCT_HACK_VAR_LEN
+/**
+ * ice_struct_size - size of struct with C99 flexible array member
+ * @ptr: pointer to structure
+ * @field: flexible array member (last member of the structure)
+ * @num: number of elements of that flexible array member
+ */
+#define ice_struct_size(ptr, field, num) \
+       (sizeof(*(ptr)) + sizeof(*(ptr)->field) * (num))
+
+#ifndef FLEX_ARRAY_SIZE
+#define FLEX_ARRAY_SIZE(_ptr, _mem, cnt) ((cnt) * sizeof(_ptr->_mem[0]))
+#endif /* FLEX_ARRAY_SIZE */
+
 #include "ice_status.h"
 #include "ice_hw_autogen.h"
 #include "ice_devids.h"
@@ -43,6 +57,7 @@
 #include "ice_lan_tx_rx.h"
 #include "ice_flex_type.h"
 #include "ice_protocol_type.h"
+#include "ice_vlan_mode.h"
 
 /**
  * ice_is_pow2 - check if integer value is a power of 2
@@ -96,6 +111,7 @@ static inline u32 ice_round_to_num(u32 N, u32 R)
 #define ICE_HI_DWORD(x)                ((u32)((((x) >> 16) >> 16) & 0xFFFFFFFF))
 #define ICE_LO_DWORD(x)                ((u32)((x) & 0xFFFFFFFF))
 #define ICE_HI_WORD(x)         ((u16)(((x) >> 16) & 0xFFFF))
+#define ICE_LO_WORD(x)         ((u16)((x) & 0xFFFF))
 
 /* debug masks - set these bits in hw->debug_mask to control output */
 #define ICE_DBG_TRACE          BIT_ULL(0) /* for function-trace only */
@@ -116,6 +132,7 @@ static inline u32 ice_round_to_num(u32 N, u32 R)
 
 #define ICE_DBG_PKG            BIT_ULL(16)
 #define ICE_DBG_RES            BIT_ULL(17)
+#define ICE_DBG_ACL            BIT_ULL(18)
 #define ICE_DBG_AQ_MSG         BIT_ULL(24)
 #define ICE_DBG_AQ_DESC                BIT_ULL(25)
 #define ICE_DBG_AQ_DESC_BUF    BIT_ULL(26)
@@ -165,6 +182,7 @@ enum ice_fc_mode {
        ICE_FC_RX_PAUSE,
        ICE_FC_TX_PAUSE,
        ICE_FC_FULL,
+       ICE_FC_AUTO,
        ICE_FC_PFC,
        ICE_FC_DFLT
 };
@@ -201,6 +219,7 @@ enum ice_set_fc_aq_failures {
 /* MAC types */
 enum ice_mac_type {
        ICE_MAC_UNKNOWN = 0,
+       ICE_MAC_E810,
        ICE_MAC_GENERIC,
 };
 
@@ -211,6 +230,7 @@ enum ice_media_type {
        ICE_MEDIA_BASET,
        ICE_MEDIA_BACKPLANE,
        ICE_MEDIA_DA,
+       ICE_MEDIA_AUI,
 };
 
 /* Software VSI types. */
@@ -288,11 +308,28 @@ enum ice_fltr_ptype {
        ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_TCP,
        ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_ICMP,
        ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_OTHER,
+       ICE_FLTR_PTYPE_NONF_IPV6_GTPU_IPV6_OTHER,
+       ICE_FLTR_PTYPE_NONF_IPV4_GTPU_EH_IPV4_OTHER,
+       ICE_FLTR_PTYPE_NONF_IPV6_GTPU_EH_IPV6_OTHER,
+       ICE_FLTR_PTYPE_NONF_IPV4_L2TPV3,
+       ICE_FLTR_PTYPE_NONF_IPV6_L2TPV3,
+       ICE_FLTR_PTYPE_NONF_IPV4_ESP,
+       ICE_FLTR_PTYPE_NONF_IPV6_ESP,
+       ICE_FLTR_PTYPE_NONF_IPV4_AH,
+       ICE_FLTR_PTYPE_NONF_IPV6_AH,
+       ICE_FLTR_PTYPE_NONF_IPV4_NAT_T_ESP,
+       ICE_FLTR_PTYPE_NONF_IPV6_NAT_T_ESP,
+       ICE_FLTR_PTYPE_NONF_IPV4_PFCP_NODE,
+       ICE_FLTR_PTYPE_NONF_IPV4_PFCP_SESSION,
+       ICE_FLTR_PTYPE_NONF_IPV6_PFCP_NODE,
+       ICE_FLTR_PTYPE_NONF_IPV6_PFCP_SESSION,
+       ICE_FLTR_PTYPE_NON_IP_L2,
        ICE_FLTR_PTYPE_FRAG_IPV4,
        ICE_FLTR_PTYPE_NONF_IPV6_UDP,
        ICE_FLTR_PTYPE_NONF_IPV6_TCP,
        ICE_FLTR_PTYPE_NONF_IPV6_SCTP,
        ICE_FLTR_PTYPE_NONF_IPV6_OTHER,
+       ICE_FLTR_PTYPE_NONF_IPV4_UDP_VXLAN,
        ICE_FLTR_PTYPE_MAX,
 };
 
@@ -384,6 +421,12 @@ struct ice_hw_common_caps {
        u8 apm_wol_support;
        u8 acpi_prog_mthd;
        u8 proxy_support;
+       bool sec_rev_disabled;
+       bool update_disabled;
+       bool nvm_unified_update;
+#define ICE_NVM_MGMT_SEC_REV_DISABLED          BIT(0)
+#define ICE_NVM_MGMT_UPDATE_DISABLED           BIT(1)
+#define ICE_NVM_MGMT_UNIFIED_UPD_SUPPORT       BIT(3)
 };
 
 /* Function specific capabilities */
@@ -471,13 +514,83 @@ struct ice_fc_info {
        enum ice_fc_mode req_mode;      /* FC mode requested by caller */
 };
 
-/* NVM Information */
+/* Option ROM version information */
+struct ice_orom_info {
+       u8 major;                       /* Major version of OROM */
+       u8 patch;                       /* Patch version of OROM */
+       u16 build;                      /* Build version of OROM */
+       u32 srev;                       /* Security revision */
+};
+
+/* NVM version information */
 struct ice_nvm_info {
-       u32 eetrack;                    /* NVM data version */
-       u32 oem_ver;                    /* OEM version info */
+       u32 eetrack;
+       u32 srev;
+       u8 major;
+       u8 minor;
+};
+
+/* Enumeration of possible flash banks for the NVM, OROM, and Netlist modules
+ * of the flash image.
+ */
+enum ice_flash_bank {
+       ICE_INVALID_FLASH_BANK,
+       ICE_1ST_FLASH_BANK,
+       ICE_2ND_FLASH_BANK,
+};
+
+/* Enumeration of which flash bank is desired to read from, either the active
+ * bank or the inactive bank. Used to abstract 1st and 2nd bank notion from
+ * code which just wants to read the active or inactive flash bank.
+ */
+enum ice_bank_select {
+       ICE_ACTIVE_FLASH_BANK,
+       ICE_INACTIVE_FLASH_BANK,
+};
+
+/* information for accessing NVM, OROM, and Netlist flash banks */
+struct ice_bank_info {
+       u32 nvm_ptr;                            /* Pointer to 1st NVM bank */
+       u32 nvm_size;                           /* Size of NVM bank */
+       u32 orom_ptr;                           /* Pointer to 1st OROM bank */
+       u32 orom_size;                          /* Size of OROM bank */
+       u32 netlist_ptr;                        /* Pointer to 1st Netlist bank */
+       u32 netlist_size;                       /* Size of Netlist bank */
+       enum ice_flash_bank nvm_bank;           /* Active NVM bank */
+       enum ice_flash_bank orom_bank;          /* Active OROM bank */
+       enum ice_flash_bank netlist_bank;       /* Active Netlist bank */
+};
+
+/* Flash Chip Information */
+struct ice_flash_info {
+       struct ice_orom_info orom;      /* Option ROM version info */
+       struct ice_nvm_info nvm;        /* NVM version information */
+       struct ice_bank_info banks;     /* Flash Bank information */
        u16 sr_words;                   /* Shadow RAM size in words */
-       u16 ver;                        /* dev starter version */
-       u8 blank_nvm_mode;              /* is NVM empty (no FW present)*/
+       u32 flash_size;                 /* Size of available flash in bytes */
+       u8 blank_nvm_mode;              /* is NVM empty (no FW present) */
+};
+
+struct ice_link_default_override_tlv {
+       u8 options;
+#define ICE_LINK_OVERRIDE_OPT_M                0x3F
+#define ICE_LINK_OVERRIDE_STRICT_MODE  BIT(0)
+#define ICE_LINK_OVERRIDE_EPCT_DIS     BIT(1)
+#define ICE_LINK_OVERRIDE_PORT_DIS     BIT(2)
+#define ICE_LINK_OVERRIDE_EN           BIT(3)
+#define ICE_LINK_OVERRIDE_AUTO_LINK_DIS        BIT(4)
+#define ICE_LINK_OVERRIDE_EEE_EN       BIT(5)
+       u8 phy_config;
+#define ICE_LINK_OVERRIDE_PHY_CFG_S    8
+#define ICE_LINK_OVERRIDE_PHY_CFG_M    (0xC3 << ICE_LINK_OVERRIDE_PHY_CFG_S)
+#define ICE_LINK_OVERRIDE_PAUSE_M      0x3
+#define ICE_LINK_OVERRIDE_LESM_EN      BIT(6)
+#define ICE_LINK_OVERRIDE_AUTO_FEC_EN  BIT(7)
+       u8 fec_options;
+#define ICE_LINK_OVERRIDE_FEC_OPT_M    0xFF
+       u8 rsvd1;
+       u64 phy_type_low;
+       u64 phy_type_high;
 };
 
 #define ICE_NVM_VER_LEN        32
@@ -524,7 +637,7 @@ struct ice_sched_node {
 #define ICE_TXSCHED_GET_EIR_BWALLOC(x) \
        LE16_TO_CPU((x)->info.eir_bw.bw_alloc)
 
-struct ice_sched_rl_profle {
+struct ice_sched_rl_profile {
        u32 rate; /* In Kbps */
        struct ice_aqc_rl_profile_elem info;
 };
@@ -556,7 +669,7 @@ enum ice_rl_type {
 #define ICE_SCHED_NO_BW_WT             0
 #define ICE_SCHED_DFLT_RL_PROF_ID      0
 #define ICE_SCHED_NO_SHARED_RL_PROF_ID 0xFFFF
-#define ICE_SCHED_DFLT_BW_WT           1
+#define ICE_SCHED_DFLT_BW_WT           4
 #define ICE_SCHED_INVAL_PROF_ID                0xFFFF
 #define ICE_SCHED_DFLT_BURST_SIZE      (15 * 1024)     /* in bytes (15k) */
 
@@ -661,19 +774,20 @@ struct ice_dcb_app_priority_table {
        u8 selector;
 };
 
-#define ICE_MAX_USER_PRIORITY  8
-#define ICE_DCBX_MAX_APPS      32
-#define ICE_LLDPDU_SIZE                1500
-#define ICE_TLV_STATUS_OPER    0x1
-#define ICE_TLV_STATUS_SYNC    0x2
-#define ICE_TLV_STATUS_ERR     0x4
-#define ICE_APP_PROT_ID_FCOE   0x8906
-#define ICE_APP_PROT_ID_ISCSI  0x0cbc
-#define ICE_APP_PROT_ID_FIP    0x8914
-#define ICE_APP_SEL_ETHTYPE    0x1
-#define ICE_APP_SEL_TCPIP      0x2
-#define ICE_CEE_APP_SEL_ETHTYPE        0x0
-#define ICE_CEE_APP_SEL_TCPIP  0x1
+#define ICE_MAX_USER_PRIORITY          8
+#define ICE_DCBX_MAX_APPS              32
+#define ICE_LLDPDU_SIZE                        1500
+#define ICE_TLV_STATUS_OPER            0x1
+#define ICE_TLV_STATUS_SYNC            0x2
+#define ICE_TLV_STATUS_ERR             0x4
+#define ICE_APP_PROT_ID_FCOE           0x8906
+#define ICE_APP_PROT_ID_ISCSI          0x0cbc
+#define ICE_APP_PROT_ID_ISCSI_860      0x035c
+#define ICE_APP_PROT_ID_FIP            0x8914
+#define ICE_APP_SEL_ETHTYPE            0x1
+#define ICE_APP_SEL_TCPIP              0x2
+#define ICE_CEE_APP_SEL_ETHTYPE                0x0
+#define ICE_CEE_APP_SEL_TCPIP          0x1
 
 struct ice_dcbx_cfg {
        u32 numapps;
@@ -689,6 +803,14 @@ struct ice_dcbx_cfg {
 #define ICE_DCBX_APPS_NON_WILLING      0x1
 };
 
+struct ice_qos_cfg {
+       struct ice_dcbx_cfg local_dcbx_cfg;     /* Oper/Local Cfg */
+       struct ice_dcbx_cfg desired_dcbx_cfg;   /* CEE Desired Cfg */
+       struct ice_dcbx_cfg remote_dcbx_cfg;    /* Peer Cfg */
+       u8 dcbx_status : 3;                     /* see ICE_DCBX_STATUS_DIS */
+       u8 is_sw_lldp : 1;
+};
+
 struct ice_port_info {
        struct ice_sched_node *root;    /* Root Node per Port */
        struct ice_hw *hw;              /* back pointer to HW instance */
@@ -710,16 +832,9 @@ struct ice_port_info {
        struct ice_lock sched_lock;     /* protect access to TXSched tree */
        struct ice_sched_node *
                sib_head[ICE_MAX_TRAFFIC_CLASS][ICE_AQC_TOPO_MAX_LEVEL_NUM];
-       /* List contain profile ID(s) and other params per layer */
-       struct LIST_HEAD_TYPE rl_prof_list[ICE_AQC_TOPO_MAX_LEVEL_NUM];
+       struct ice_bw_type_info root_node_bw_t_info;
        struct ice_bw_type_info tc_node_bw_t_info[ICE_MAX_TRAFFIC_CLASS];
-       struct ice_dcbx_cfg local_dcbx_cfg;     /* Oper/Local Cfg */
-       /* DCBX info */
-       struct ice_dcbx_cfg remote_dcbx_cfg;    /* Peer Cfg */
-       struct ice_dcbx_cfg desired_dcbx_cfg;   /* CEE Desired Cfg */
-       /* LLDP/DCBX Status */
-       u8 dcbx_status:3;               /* see ICE_DCBX_STATUS_DIS */
-       u8 is_sw_lldp:1;
+       struct ice_qos_cfg qos_cfg;
        u8 is_vf:1;
 };
 
@@ -727,6 +842,7 @@ struct ice_switch_info {
        struct LIST_HEAD_TYPE vsi_list_map_head;
        struct ice_sw_recipe *recp_list;
        u16 prof_res_bm_init;
+       u16 max_used_prof_index;
 
        ice_declare_bitmap(prof_res_bm[ICE_MAX_NUM_PROFILES], ICE_MAX_FV_WORDS);
 };
@@ -741,6 +857,8 @@ struct ice_hw {
        struct ice_sched_rl_profile **cir_profiles;
        struct ice_sched_rl_profile **eir_profiles;
        struct ice_sched_rl_profile **srl_profiles;
+       /* PSM clock frequency for calculating RL profile params */
+       u32 psm_clk_freq;
        u64 debug_mask;         /* BITMAP for debug mask */
        enum ice_mac_type mac_type;
 
@@ -757,18 +875,20 @@ struct ice_hw {
        u16 max_burst_size;     /* driver sets this value */
 
        /* Tx Scheduler values */
-       u16 num_tx_sched_layers;
-       u16 num_tx_sched_phys_layers;
+       u8 num_tx_sched_layers;
+       u8 num_tx_sched_phys_layers;
        u8 flattened_layers;
        u8 max_cgds;
        u8 sw_entry_point_layer;
        u16 max_children[ICE_AQC_TOPO_MAX_LEVEL_NUM];
        struct LIST_HEAD_TYPE agg_list; /* lists all aggregator */
+       /* List contain profile ID(s) and other params per layer */
+       struct LIST_HEAD_TYPE rl_prof_list[ICE_AQC_TOPO_MAX_LEVEL_NUM];
        struct ice_vsi_ctx *vsi_ctx[ICE_MAX_VSI];
        u8 evb_veb;             /* true for VEB, false for VEPA */
        u8 reset_ongoing;       /* true if HW is in reset, false otherwise */
        struct ice_bus_info bus;
-       struct ice_nvm_info nvm;
+       struct ice_flash_info flash;
        struct ice_hw_dev_caps dev_caps;        /* device capabilities */
        struct ice_hw_func_caps func_caps;      /* function capabilities */
 
@@ -777,6 +897,11 @@ struct ice_hw {
        /* Control Queue info */
        struct ice_ctl_q_info adminq;
        struct ice_ctl_q_info mailboxq;
+       /* Additional function to send AdminQ command */
+       int (*aq_send_cmd_fn)(void *param, struct ice_aq_desc *desc,
+                             void *buf, u16 buf_size);
+       void *aq_send_cmd_param;
+       u8 dcf_enabled;         /* Device Config Function */
 
        u8 api_branch;          /* API branch version */
        u8 api_maj_ver;         /* API major version */
@@ -809,20 +934,29 @@ struct ice_hw {
 
        u8 ucast_shared;        /* true if VSIs can share unicast addr */
 
+#define ICE_PHY_PER_NAC                1
+#define ICE_MAX_QUAD           2
+#define ICE_NUM_QUAD_TYPE      2
+#define ICE_PORTS_PER_QUAD     4
+#define ICE_PHY_0_LAST_QUAD    1
+#define ICE_PORTS_PER_PHY      8
+#define ICE_NUM_EXTERNAL_PORTS         ICE_PORTS_PER_PHY
+
        /* Active package version (currently active) */
        struct ice_pkg_ver active_pkg_ver;
+       u32 active_track_id;
        u8 active_pkg_name[ICE_PKG_NAME_SIZE];
        u8 active_pkg_in_nvm;
 
        enum ice_aq_err pkg_dwnld_status;
 
-       /* Driver's package ver - (from the Metadata seg) */
+       /* Driver's package ver - (from the Ice Metadata section) */
        struct ice_pkg_ver pkg_ver;
        u8 pkg_name[ICE_PKG_NAME_SIZE];
 
-       /* Driver's Ice package version (from the Ice seg) */
-       struct ice_pkg_ver ice_pkg_ver;
-       u8 ice_pkg_name[ICE_PKG_NAME_SIZE];
+       /* Driver's Ice segment format version and id (from the Ice seg) */
+       struct ice_pkg_ver ice_seg_fmt_ver;
+       u8 ice_seg_id[ICE_SEG_ID_SIZE];
 
        /* Pointer to the ice segment */
        struct ice_seg *seg;
@@ -832,8 +966,12 @@ struct ice_hw {
        u32 pkg_size;
 
        /* tunneling info */
+       struct ice_lock tnl_lock;
        struct ice_tunnel_table tnl;
 
+       struct ice_acl_tbl *acl_tbl;
+       struct ice_fd_hw_prof **acl_prof;
+       u16 acl_fltr_cnt[ICE_FLTR_PTYPE_MAX];
        /* HW block tables */
        struct ice_blk_info blk[ICE_BLK_COUNT];
        struct ice_lock fl_profs_locks[ICE_BLK_COUNT];  /* lock fltr profiles */
@@ -854,6 +992,7 @@ struct ice_hw {
        ice_declare_bitmap(fdir_perfect_fltr, ICE_FLTR_PTYPE_MAX);
        struct ice_lock rss_locks;      /* protect RSS configuration */
        struct LIST_HEAD_TYPE rss_list_head;
+       struct ice_vlan_mode_ops vlan_mode_ops;
 };
 
 /* Statistics collected by each port, VSI, VEB, and S-channel */
@@ -938,6 +1077,14 @@ enum ice_sw_fwd_act_type {
        ICE_INVAL_ACT
 };
 
+struct ice_aq_get_set_rss_lut_params {
+       u16 vsi_handle;         /* software VSI handle */
+       u16 lut_size;           /* size of the LUT buffer */
+       u8 lut_type;            /* type of the LUT (i.e. VSI, PF, Global) */
+       u8 *lut;                /* input RSS LUT for set and output RSS LUT for get */
+       u8 global_lut_id;       /* only valid when lut_type is global */
+};
+
 /* Checksum and Shadow RAM pointers */
 #define ICE_SR_NVM_CTRL_WORD                   0x00
 #define ICE_SR_PHY_ANALOG_PTR                  0x04
@@ -954,7 +1101,7 @@ enum ice_sw_fwd_act_type {
 #define ICE_SR_PBA_BLOCK_PTR                   0x16
 #define ICE_SR_BOOT_CFG_PTR                    0x132
 #define ICE_SR_NVM_WOL_CFG                     0x19
-#define ICE_NVM_OEM_VER_OFF                    0x02
+#define ICE_NVM_OROM_VER_OFF                   0x02
 #define ICE_SR_NVM_DEV_STARTER_VER             0x18
 #define ICE_SR_ALTERNATE_SAN_MAC_ADDR_PTR      0x27
 #define ICE_SR_PERMANENT_SAN_MAC_ADDR_PTR      0x28
@@ -968,12 +1115,12 @@ enum ice_sw_fwd_act_type {
 #define ICE_NVM_VER_HI_SHIFT                   12
 #define ICE_NVM_VER_HI_MASK                    (0xf << ICE_NVM_VER_HI_SHIFT)
 #define ICE_OEM_EETRACK_ID                     0xffffffff
-#define ICE_OEM_VER_PATCH_SHIFT                        0
-#define ICE_OEM_VER_PATCH_MASK         (0xff << ICE_OEM_VER_PATCH_SHIFT)
-#define ICE_OEM_VER_BUILD_SHIFT                        8
-#define ICE_OEM_VER_BUILD_MASK         (0xffff << ICE_OEM_VER_BUILD_SHIFT)
-#define ICE_OEM_VER_SHIFT                      24
-#define ICE_OEM_VER_MASK                       (0xff << ICE_OEM_VER_SHIFT)
+#define ICE_OROM_VER_PATCH_SHIFT               0
+#define ICE_OROM_VER_PATCH_MASK                (0xff << ICE_OROM_VER_PATCH_SHIFT)
+#define ICE_OROM_VER_BUILD_SHIFT               8
+#define ICE_OROM_VER_BUILD_MASK                (0xffff << ICE_OROM_VER_BUILD_SHIFT)
+#define ICE_OROM_VER_SHIFT                     24
+#define ICE_OROM_VER_MASK                      (0xff << ICE_OROM_VER_SHIFT)
 #define ICE_SR_VPD_PTR                         0x2F
 #define ICE_SR_PXE_SETUP_PTR                   0x30
 #define ICE_SR_PXE_CFG_CUST_OPTIONS_PTR                0x31
@@ -991,20 +1138,75 @@ enum ice_sw_fwd_act_type {
 #define ICE_SR_1ST_SCRATCH_PAD_PTR             0x41
 #define ICE_SR_1ST_NVM_BANK_PTR                        0x42
 #define ICE_SR_NVM_BANK_SIZE                   0x43
-#define ICE_SR_1ND_OROM_BANK_PTR               0x44
+#define ICE_SR_1ST_OROM_BANK_PTR               0x44
 #define ICE_SR_OROM_BANK_SIZE                  0x45
 #define ICE_SR_NETLIST_BANK_PTR                        0x46
 #define ICE_SR_NETLIST_BANK_SIZE               0x47
 #define ICE_SR_EMP_SR_SETTINGS_PTR             0x48
 #define ICE_SR_CONFIGURATION_METADATA_PTR      0x4D
 #define ICE_SR_IMMEDIATE_VALUES_PTR            0x4E
+#define ICE_SR_LINK_DEFAULT_OVERRIDE_PTR       0x134
 #define ICE_SR_POR_REGISTERS_AUTOLOAD_PTR      0x118
 
+/* CSS Header words */
+#define ICE_NVM_CSS_SREV_L                     0x14
+#define ICE_NVM_CSS_SREV_H                     0x15
+
+/* Length of CSS header section in words */
+#define ICE_CSS_HEADER_LENGTH                  330
+
+/* Offset of Shadow RAM copy in the NVM bank area. */
+#define ICE_NVM_SR_COPY_WORD_OFFSET            ROUND_UP(ICE_CSS_HEADER_LENGTH, 32)
+
+/* Size in bytes of Option ROM trailer */
+#define ICE_NVM_OROM_TRAILER_LENGTH            (2 * ICE_CSS_HEADER_LENGTH)
+
+/* The Link Topology Netlist section is stored as a series of words. It is
+ * stored in the NVM as a TLV, with the first two words containing the type
+ * and length.
+ */
+#define ICE_NETLIST_LINK_TOPO_MOD_ID           0x011B
+#define ICE_NETLIST_TYPE_OFFSET                        0x0000
+#define ICE_NETLIST_LEN_OFFSET                 0x0001
+
+/* The Link Topology section follows the TLV header. When reading the netlist
+ * using ice_read_netlist_module, we need to account for the 2-word TLV
+ * header.
+ */
+#define ICE_NETLIST_LINK_TOPO_OFFSET(n)                ((n) + 2)
+
+#define ICE_LINK_TOPO_MODULE_LEN               ICE_NETLIST_LINK_TOPO_OFFSET(0x0000)
+#define ICE_LINK_TOPO_NODE_COUNT               ICE_NETLIST_LINK_TOPO_OFFSET(0x0001)
+
+#define ICE_LINK_TOPO_NODE_COUNT_M             MAKEMASK(0x3FF, 0)
+
+/* The Netlist ID Block is located after all of the Link Topology nodes. */
+#define ICE_NETLIST_ID_BLK_SIZE                        0x30
+#define ICE_NETLIST_ID_BLK_OFFSET(n)           ICE_NETLIST_LINK_TOPO_OFFSET(0x0004 + 2 * (n))
+
+/* netlist ID block field offsets (word offsets) */
+#define ICE_NETLIST_ID_BLK_MAJOR_VER_LOW       0x02
+#define ICE_NETLIST_ID_BLK_MAJOR_VER_HIGH      0x03
+#define ICE_NETLIST_ID_BLK_MINOR_VER_LOW       0x04
+#define ICE_NETLIST_ID_BLK_MINOR_VER_HIGH      0x05
+#define ICE_NETLIST_ID_BLK_TYPE_LOW            0x06
+#define ICE_NETLIST_ID_BLK_TYPE_HIGH           0x07
+#define ICE_NETLIST_ID_BLK_REV_LOW             0x08
+#define ICE_NETLIST_ID_BLK_REV_HIGH            0x09
+#define ICE_NETLIST_ID_BLK_SHA_HASH_WORD(n)    (0x0A + (n))
+#define ICE_NETLIST_ID_BLK_CUST_VER            0x2F
+
 /* Auxiliary field, mask and shift definition for Shadow RAM and NVM Flash */
 #define ICE_SR_VPD_SIZE_WORDS          512
 #define ICE_SR_PCIE_ALT_SIZE_WORDS     512
 #define ICE_SR_CTRL_WORD_1_S           0x06
 #define ICE_SR_CTRL_WORD_1_M           (0x03 << ICE_SR_CTRL_WORD_1_S)
+#define ICE_SR_CTRL_WORD_VALID         0x1
+#define ICE_SR_CTRL_WORD_OROM_BANK     BIT(3)
+#define ICE_SR_CTRL_WORD_NETLIST_BANK  BIT(4)
+#define ICE_SR_CTRL_WORD_NVM_BANK      BIT(5)
+
+#define ICE_SR_NVM_PTR_4KB_UNITS       BIT(15)
 
 /* Shadow RAM related */
 #define ICE_SR_SECTOR_SIZE_IN_WORDS    0x800
@@ -1015,6 +1217,16 @@ enum ice_sw_fwd_act_type {
  */
 #define ICE_SR_SW_CHECKSUM_BASE                0xBABA
 
+/* Link override related */
+#define ICE_SR_PFA_LINK_OVERRIDE_WORDS         10
+#define ICE_SR_PFA_LINK_OVERRIDE_PHY_WORDS     4
+#define ICE_SR_PFA_LINK_OVERRIDE_OFFSET                2
+#define ICE_SR_PFA_LINK_OVERRIDE_FEC_OFFSET    1
+#define ICE_SR_PFA_LINK_OVERRIDE_PHY_OFFSET    2
+#define ICE_FW_API_LINK_OVERRIDE_MAJ           1
+#define ICE_FW_API_LINK_OVERRIDE_MIN           5
+#define ICE_FW_API_LINK_OVERRIDE_PATCH         2
+
 #define ICE_PBA_FLAG_DFLT              0xFAFA
 /* Hash redirection LUT for VSI - maximum array size */
 #define ICE_VSIQF_HLUT_ARRAY_SIZE      ((VSIQF_HLUT_MAX_INDEX + 1) * 4)
@@ -1027,4 +1239,13 @@ enum ice_sw_fwd_act_type {
 #define GLPCI_LBARCTRL_VF_PE_DB_SIZE_8KB 0x1
 #define GLPCI_LBARCTRL_VF_PE_DB_SIZE_64KB 0x2
 
+/* AQ API version for LLDP_FILTER_CONTROL */
+#define ICE_FW_API_LLDP_FLTR_MAJ       1
+#define ICE_FW_API_LLDP_FLTR_MIN       7
+#define ICE_FW_API_LLDP_FLTR_PATCH     1
+
+/* AQ API version for report default configuration */
+#define ICE_FW_API_REPORT_DFLT_CFG_MAJ         1
+#define ICE_FW_API_REPORT_DFLT_CFG_MIN         7
+#define ICE_FW_API_REPORT_DFLT_CFG_PATCH       3
 #endif /* _ICE_TYPE_H_ */