net/ice/base: add AUI media type
[dpdk.git] / drivers / net / ice / base / ice_type.h
index 2d010e6..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_
 
 #define BITS_PER_BYTE  8
 
-#ifndef _FORCE_
 #define _FORCE_
-#endif
 
 #define ICE_BYTES_PER_WORD     2
 #define ICE_BYTES_PER_DWORD    4
 #define ICE_MAX_TRAFFIC_CLASS  8
 
+/**
+ * ROUND_UP - round up to next arbitrary multiple (not a power of 2)
+ * @a: value to round up
+ * @b: arbitrary multiple
+ *
+ * Round up to the next multiple of the arbitrary b.
+ * Note, when b is a power of 2 use ICE_ALIGN() instead.
+ */
+#define ROUND_UP(a, b) ((b) * DIVIDE_AND_ROUND_UP((a), (b)))
+
 #define MIN_T(_t, _a, _b)      min((_t)(_a), (_t)(_b))
 
 #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"
 #include "ice_flex_type.h"
 #include "ice_protocol_type.h"
 
+/**
+ * ice_is_pow2 - check if integer value is a power of 2
+ * @val: unsigned integer to be validated
+ */
+static inline bool ice_is_pow2(u64 val)
+{
+       return (val && !(val & (val - 1)));
+}
+
+/**
+ * ice_ilog2 - Calculates integer log base 2 of a number
+ * @n: number on which to perform operation
+ */
+static inline int ice_ilog2(u64 n)
+{
+       int i;
+
+       for (i = 63; i >= 0; i--)
+               if (((u64)1 << i) & n)
+                       return i;
+
+       return -1;
+}
+
 static inline bool ice_is_tc_ena(ice_bitmap_t bitmap, u8 tc)
 {
        return ice_is_bit_set(&bitmap, tc);
@@ -64,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 */
@@ -84,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)
@@ -96,13 +133,12 @@ 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]))) && \
+        ((bool)((((u16 *)(addr1))[1] == ((u16 *)(addr2))[1]))) && \
+        ((bool)((((u16 *)(addr1))[2] == ((u16 *)(addr2))[2]))))
 
 enum ice_aq_res_ids {
        ICE_NVM_RES_ID = 1,
@@ -134,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
 };
@@ -170,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,
 };
 
@@ -180,6 +218,7 @@ enum ice_media_type {
        ICE_MEDIA_BASET,
        ICE_MEDIA_BACKPLANE,
        ICE_MEDIA_DA,
+       ICE_MEDIA_AUI,
 };
 
 /* Software VSI types. */
@@ -253,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,
@@ -261,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];
 };
 
@@ -343,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;
@@ -359,9 +410,9 @@ struct ice_hw_dev_caps {
        struct ice_hw_common_caps common_cap;
        u32 num_vsi_allocd_to_host;     /* Excluding EMP VSI */
        u32 num_flow_director_fltr;     /* Number of FD filters available */
+       u32 num_funcs;
 };
 
-
 /* Information about MAC such as address, etc... */
 struct ice_mac_info {
        u8 lan_addr[ETH_ALEN];
@@ -431,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 */
@@ -484,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;
 };
@@ -527,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.
  *
@@ -673,6 +754,7 @@ struct ice_port_info {
                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 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 */
@@ -686,26 +768,9 @@ 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;
 
-/* FW logging configuration */
-struct ice_fw_log_evnt {
-       u8 cfg : 4;     /* New event enables to configure */
-       u8 cur : 4;     /* Current/active event enables */
-};
-
-struct ice_fw_log_cfg {
-       u8 cq_en : 1;    /* FW logging is enabled via the control queue */
-       u8 uart_en : 1;  /* FW logging is enabled via UART for all PFs */
-       u8 actv_evnts;   /* Cumulation of currently enabled log events */
-
-#define ICE_FW_LOG_EVNT_INFO   (ICE_AQC_FW_LOG_INFO_EN >> ICE_AQC_FW_LOG_EN_S)
-#define ICE_FW_LOG_EVNT_INIT   (ICE_AQC_FW_LOG_INIT_EN >> ICE_AQC_FW_LOG_EN_S)
-#define ICE_FW_LOG_EVNT_FLOW   (ICE_AQC_FW_LOG_FLOW_EN >> ICE_AQC_FW_LOG_EN_S)
-#define ICE_FW_LOG_EVNT_ERR    (ICE_AQC_FW_LOG_ERR_EN >> ICE_AQC_FW_LOG_EN_S)
-#define ICE_FW_LOG_EVNT_ALL    (ICE_FW_LOG_EVNT_INFO | ICE_FW_LOG_EVNT_INIT | \
-                                ICE_FW_LOG_EVNT_FLOW | ICE_FW_LOG_EVNT_ERR)
-       struct ice_fw_log_evnt evnts[ICE_AQC_FW_LOG_ID_MAX];
+       ice_declare_bitmap(prof_res_bm[ICE_MAX_NUM_PROFILES], ICE_MAX_FV_WORDS);
 };
 
 /* Port hardware description */
@@ -718,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;
 
@@ -734,14 +801,13 @@ 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 */
-       struct ice_bw_type_info tc_node_bw_t_info[ICE_MAX_TRAFFIC_CLASS];
        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 */
@@ -755,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 */
@@ -766,10 +837,8 @@ struct ice_hw {
        u8 fw_patch;            /* firmware patch version */
        u32 fw_build;           /* firmware build number */
 
-       struct ice_fw_log_cfg fw_log;
-
 /* 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
@@ -789,9 +858,21 @@ 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) */
        struct ice_pkg_ver pkg_ver;
@@ -809,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 */
@@ -852,6 +932,8 @@ struct ice_eth_stats {
        u64 tx_broadcast;               /* bptc */
        u64 tx_discards;                /* tdpc */
        u64 tx_errors;                  /* tepc */
+       u64 rx_no_desc;                 /* repc */
+       u64 rx_errors;                  /* repc */
 };
 
 #define ICE_MAX_UP     8
@@ -932,9 +1014,9 @@ enum ice_sw_fwd_act_type {
 #define ICE_SR_MNG_CFG_PTR                     0x0E
 #define ICE_SR_EMP_MODULE_PTR                  0x0F
 #define ICE_SR_PBA_BLOCK_PTR                   0x16
-#define ICE_SR_BOOT_CFG_PTR                    0x17
+#define ICE_SR_BOOT_CFG_PTR                    0x132
 #define ICE_SR_NVM_WOL_CFG                     0x19
-#define ICE_NVM_OEM_VER_OFF                    0x83
+#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
@@ -948,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
@@ -978,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 */
@@ -995,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)