net/ice/base: add AUI media type
[dpdk.git] / drivers / net / ice / base / ice_type.h
index 403fb76..3280d48 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_
@@ -14,9 +14,7 @@
 
 #define BITS_PER_BYTE  8
 
-#ifndef _FORCE_
 #define _FORCE_
-#endif
 
 #define ICE_BYTES_PER_WORD     2
 #define ICE_BYTES_PER_DWORD    4
@@ -36,6 +34,9 @@
 
 #define IS_ASCII(_ch)  ((_ch) < 0x80)
 
+#define ice_struct_size(ptr, field, num) \
+       (sizeof(*(ptr)) + sizeof(*(ptr)->field) * (num))
+
 #include "ice_status.h"
 #include "ice_hw_autogen.h"
 #include "ice_devids.h"
@@ -98,6 +99,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 */
@@ -118,6 +120,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)
@@ -130,13 +133,7 @@ static inline u32 ice_round_to_num(u32 N, u32 R)
 #define ICE_DBG_USER           BIT_ULL(31)
 #define ICE_DBG_ALL            0xFFFFFFFFFFFFFFFFULL
 
-#ifndef __ALWAYS_UNUSED
 #define __ALWAYS_UNUSED
-#endif
-
-
-
-
 
 #define IS_ETHER_ADDR_EQUAL(addr1, addr2) \
        (((bool)((((u16 *)(addr1))[0] == ((u16 *)(addr2))[0]))) && \
@@ -173,6 +170,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
 };
@@ -209,6 +207,7 @@ enum ice_set_fc_aq_failures {
 /* MAC types */
 enum ice_mac_type {
        ICE_MAC_UNKNOWN = 0,
+       ICE_MAC_E810,
        ICE_MAC_GENERIC,
 };
 
@@ -219,6 +218,7 @@ enum ice_media_type {
        ICE_MEDIA_BASET,
        ICE_MEDIA_BACKPLANE,
        ICE_MEDIA_DA,
+       ICE_MEDIA_AUI,
 };
 
 /* Software VSI types. */
@@ -292,6 +292,11 @@ enum ice_fltr_ptype {
        ICE_FLTR_PTYPE_NONF_IPV4_TCP,
        ICE_FLTR_PTYPE_NONF_IPV4_SCTP,
        ICE_FLTR_PTYPE_NONF_IPV4_OTHER,
+       ICE_FLTR_PTYPE_NONF_IPV4_GTPU_IPV4_UDP,
+       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_NON_IP_L2,
        ICE_FLTR_PTYPE_FRAG_IPV4,
        ICE_FLTR_PTYPE_NONF_IPV6_UDP,
        ICE_FLTR_PTYPE_NONF_IPV6_TCP,
@@ -300,13 +305,19 @@ enum ice_fltr_ptype {
        ICE_FLTR_PTYPE_MAX,
 };
 
+enum ice_fd_hw_seg {
+       ICE_FD_HW_SEG_NON_TUN = 0,
+       ICE_FD_HW_SEG_TUN,
+       ICE_FD_HW_SEG_MAX,
+};
+
 /* 2 VSI = 1 ICE_VSI_PF + 1 ICE_VSI_CTRL */
 #define ICE_MAX_FDIR_VSI_PER_FILTER    2
 
 struct ice_fd_hw_prof {
-       struct ice_flow_seg_info *fdir_seg;
+       struct ice_flow_seg_info *fdir_seg[ICE_FD_HW_SEG_MAX];
        int cnt;
-       u64 entry_h[ICE_MAX_FDIR_VSI_PER_FILTER];
+       u64 entry_h[ICE_MAX_FDIR_VSI_PER_FILTER][ICE_FD_HW_SEG_MAX];
        u16 vsi_h[ICE_MAX_FDIR_VSI_PER_FILTER];
 };
 
@@ -382,9 +393,10 @@ struct ice_hw_common_caps {
        u8 apm_wol_support;
        u8 acpi_prog_mthd;
        u8 proxy_support;
+       bool nvm_unified_update;
+#define ICE_NVM_MGMT_UNIFIED_UPD_SUPPORT       BIT(3)
 };
 
-
 /* Function specific capabilities */
 struct ice_hw_func_caps {
        struct ice_hw_common_caps common_cap;
@@ -401,7 +413,6 @@ struct ice_hw_dev_caps {
        u32 num_funcs;
 };
 
-
 /* Information about MAC such as address, etc... */
 struct ice_mac_info {
        u8 lan_addr[ETH_ALEN];
@@ -471,15 +482,46 @@ struct ice_fc_info {
        enum ice_fc_mode req_mode;      /* FC mode requested by caller */
 };
 
+/* 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 */
+};
+
 /* NVM Information */
 struct ice_nvm_info {
+       struct ice_orom_info orom;      /* Option ROM version info */
        u32 eetrack;                    /* NVM data version */
-       u32 oem_ver;                    /* OEM version info */
        u16 sr_words;                   /* Shadow RAM size in words */
-       u16 ver;                        /* dev starter version */
+       u32 flash_size;                 /* Size of available flash in bytes */
+       u8 major_ver;                   /* major version of dev starter */
+       u8 minor_ver;                   /* minor version of dev starter */
        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
 
 /* Max number of port to queue branches w.r.t topology */
@@ -524,7 +566,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;
 };
@@ -567,7 +609,6 @@ enum ice_rl_type {
 #define ICE_TXSCHED_GET_RL_WAKEUP_MV(p) LE16_TO_CPU((p)->info.wake_up_calc)
 #define ICE_TXSCHED_GET_RL_ENCODE(p) LE16_TO_CPU((p)->info.rl_encode)
 
-
 /* The following tree example shows the naming conventions followed under
  * ice_port_info struct for default scheduler tree topology.
  *
@@ -727,8 +768,10 @@ struct ice_port_info {
 struct ice_switch_info {
        struct LIST_HEAD_TYPE vsi_list_map_head;
        struct ice_sw_recipe *recp_list;
-};
+       u16 prof_res_bm_init;
 
+       ice_declare_bitmap(prof_res_bm[ICE_MAX_NUM_PROFILES], ICE_MAX_FV_WORDS);
+};
 
 /* Port hardware description */
 struct ice_hw {
@@ -740,6 +783,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;
 
@@ -756,8 +801,8 @@ 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;
@@ -776,6 +821,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 */
@@ -787,9 +837,8 @@ struct ice_hw {
        u8 fw_patch;            /* firmware patch version */
        u32 fw_build;           /* firmware build number */
 
-
 /* Device max aggregate bandwidths corresponding to the GL_PWR_MODE_CTL
- * register. Used for determining the itr/intrl granularity during
+ * register. Used for determining the ITR/INTRL granularity during
  * initialization.
  */
 #define ICE_MAX_AGG_BW_200G    0x0
@@ -809,8 +858,17 @@ 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;
 
@@ -832,13 +890,12 @@ struct ice_hw {
        u32 pkg_size;
 
        /* tunneling info */
+       struct ice_lock tnl_lock;
        struct ice_tunnel_table tnl;
 
-#define ICE_PKG_FILENAME       "package_file"
-#define ICE_PKG_FILENAME_EXT   "pkg"
-#define ICE_PKG_FILE_MAJ_VER   1
-#define ICE_PKG_FILE_MIN_VER   0
-
+       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 */
@@ -959,7 +1016,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
@@ -973,12 +1030,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
@@ -1003,6 +1060,7 @@ enum ice_sw_fwd_act_type {
 #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
 
 /* Auxiliary field, mask and shift definition for Shadow RAM and NVM Flash */
@@ -1020,6 +1078,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)