vdev: rename init/uninit ops to probe/remove
[dpdk.git] / drivers / net / i40e / i40e_ethdev.h
index c7592b5..57a8ae1 100644 (file)
@@ -36,6 +36,7 @@
 
 #include <rte_eth_ctrl.h>
 #include <rte_time.h>
+#include <rte_kvargs.h>
 
 #define I40E_VLAN_TAG_SIZE        4
 
 #define I40E_DEFAULT_QP_NUM_FDIR  1
 #define I40E_UINT32_BIT_SIZE      (CHAR_BIT * sizeof(uint32_t))
 #define I40E_VFTA_SIZE            (4096 / I40E_UINT32_BIT_SIZE)
+/* Maximun number of MAC addresses */
+#define I40E_NUM_MACADDR_MAX       64
+/* Maximum number of VFs */
+#define I40E_MAX_VF               128
+
 /*
  * vlan_id is a 12 bit number.
  * The VFTA array is actually a 4096 bit array, 128 of 32bit elements.
@@ -144,13 +150,20 @@ enum i40e_flxpld_layer_idx {
        ETH_RSS_L2_PAYLOAD)
 
 /* All bits of RSS hash enable */
+#ifdef X722_SUPPORT
 #define I40E_RSS_HENA_ALL ( \
+       (1ULL << I40E_FILTER_PCTYPE_NONF_UNICAST_IPV4_UDP) | \
+       (1ULL << I40E_FILTER_PCTYPE_NONF_MULTICAST_IPV4_UDP) | \
        (1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_UDP) | \
+       (1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_TCP_SYN_NO_ACK) | \
        (1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_TCP) | \
        (1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_SCTP) | \
        (1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_OTHER) | \
        (1ULL << I40E_FILTER_PCTYPE_FRAG_IPV4) | \
+       (1ULL << I40E_FILTER_PCTYPE_NONF_UNICAST_IPV6_UDP) | \
+       (1ULL << I40E_FILTER_PCTYPE_NONF_MULTICAST_IPV6_UDP) | \
        (1ULL << I40E_FILTER_PCTYPE_NONF_IPV6_UDP) | \
+       (1ULL << I40E_FILTER_PCTYPE_NONF_IPV6_TCP_SYN_NO_ACK) | \
        (1ULL << I40E_FILTER_PCTYPE_NONF_IPV6_TCP) | \
        (1ULL << I40E_FILTER_PCTYPE_NONF_IPV6_SCTP) | \
        (1ULL << I40E_FILTER_PCTYPE_NONF_IPV6_OTHER) | \
@@ -159,6 +172,23 @@ enum i40e_flxpld_layer_idx {
        (1ULL << I40E_FILTER_PCTYPE_FCOE_RX) | \
        (1ULL << I40E_FILTER_PCTYPE_FCOE_OTHER) | \
        (1ULL << I40E_FILTER_PCTYPE_L2_PAYLOAD))
+#else
+#define I40E_RSS_HENA_ALL ( \
+       (1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_UDP) | \
+       (1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_TCP) | \
+       (1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_SCTP) | \
+       (1ULL << I40E_FILTER_PCTYPE_NONF_IPV4_OTHER) | \
+       (1ULL << I40E_FILTER_PCTYPE_FRAG_IPV4) | \
+       (1ULL << I40E_FILTER_PCTYPE_NONF_IPV6_UDP) | \
+       (1ULL << I40E_FILTER_PCTYPE_NONF_IPV6_TCP) | \
+       (1ULL << I40E_FILTER_PCTYPE_NONF_IPV6_SCTP) | \
+       (1ULL << I40E_FILTER_PCTYPE_NONF_IPV6_OTHER) | \
+       (1ULL << I40E_FILTER_PCTYPE_FRAG_IPV6) | \
+       (1ULL << I40E_FILTER_PCTYPE_FCOE_OX) | \
+       (1ULL << I40E_FILTER_PCTYPE_FCOE_RX) | \
+       (1ULL << I40E_FILTER_PCTYPE_FCOE_OTHER) | \
+       (1ULL << I40E_FILTER_PCTYPE_L2_PAYLOAD))
+#endif
 
 #define I40E_MISC_VEC_ID                RTE_INTR_VEC_ZERO_OFFSET
 #define I40E_RX_VEC_START               RTE_INTR_VEC_RXTX_OFFSET
@@ -168,6 +198,10 @@ enum i40e_flxpld_layer_idx {
 #define I40E_QUEUE_ITR_INTERVAL_DEFAULT 32 /* 32 us */
 #define I40E_QUEUE_ITR_INTERVAL_MAX     8160 /* 8160 us */
 
+/* Special FW support this floating VEB feature */
+#define FLOATING_VEB_SUPPORTED_FW_MAJ 5
+#define FLOATING_VEB_SUPPORTED_FW_MIN 0
+
 struct i40e_adapter;
 
 /**
@@ -216,6 +250,7 @@ struct i40e_bw_info {
 struct i40e_veb {
        struct i40e_vsi_list_head head;
        struct i40e_vsi *associate_vsi; /* Associate VSI who owns the VEB */
+       struct i40e_pf *associate_pf; /* Associate PF who owns the VEB */
        uint16_t seid; /* The seid of VEB itself */
        uint16_t uplink_seid; /* The uplink seid of this VEB */
        uint16_t stats_idx;
@@ -256,6 +291,7 @@ struct i40e_vsi {
        struct i40e_vsi_list sib_vsi_list; /* sibling vsi list */
        struct i40e_vsi *parent_vsi;
        struct i40e_veb *veb;    /* Associated veb, could be null */
+       struct i40e_veb *floating_veb; /* Associated floating veb */
        bool offset_loaded;
        enum i40e_vsi_type type; /* VSI types */
        uint16_t vlan_num;       /* Total VLAN number */
@@ -364,6 +400,8 @@ struct i40e_fdir_info {
        struct i40e_rx_queue *rxq;
        void *prg_pkt;                 /* memory for fdir program packet */
        uint64_t dma_addr;             /* physic address of packet memory*/
+       /* input set bits for each pctype */
+       uint64_t input_set[I40E_FILTER_PCTYPE_MAX];
        /*
         * the rule how bytes stream is extracted as flexible payload
         * for each payload layer, the setting can up to three elements
@@ -430,6 +468,8 @@ struct i40e_pf {
        uint16_t fdir_qp_offset;
 
        uint16_t hash_lut_size; /* The size of hash lookup table */
+       /* input set bits for each pctype */
+       uint64_t hash_input_set[I40E_FILTER_PCTYPE_MAX];
        /* store VXLAN UDP ports */
        uint16_t vxlan_ports[I40E_MAX_PF_UDP_OFFLOAD_PORTS];
        uint16_t vxlan_bitmap; /* Vxlan bit mask */
@@ -443,6 +483,9 @@ struct i40e_pf {
        struct i40e_fc_conf fc_conf; /* Flow control conf */
        struct i40e_mirror_rule_list mirror_list;
        uint16_t nb_mirror_rule;   /* The number of mirror rules */
+       bool floating_veb; /* The flag to use the floating VEB */
+       /* The floating enable flag for the specific VF */
+       bool floating_veb_list[I40E_MAX_VF];
 };
 
 enum pending_msg {
@@ -495,9 +538,12 @@ struct i40e_vf {
        /* Event from pf */
        bool dev_closed;
        bool link_up;
+       enum i40e_aq_link_speed link_speed;
        bool vf_reset;
        volatile uint32_t pend_cmd; /* pending command not finished yet */
+       uint32_t cmd_retval; /* return value of the cmd response from PF */
        u16 pend_msg; /* flags indicates events from pf not handled yet */
+       uint8_t *aq_resp; /* buffer to store the adminq response from PF */
 
        /* VSI info */
        struct i40e_virtchnl_vf_resource *vf_res; /* All VSIs */
@@ -573,9 +619,10 @@ int i40e_fdir_ctrl_func(struct rte_eth_dev *dev,
 int i40e_select_filter_input_set(struct i40e_hw *hw,
                                 struct rte_eth_input_set_conf *conf,
                                 enum rte_filter_type filter);
-int i40e_filter_inset_select(struct i40e_hw *hw,
-                            struct rte_eth_input_set_conf *conf,
-                            enum rte_filter_type filter);
+int i40e_hash_filter_inset_select(struct i40e_hw *hw,
+                            struct rte_eth_input_set_conf *conf);
+int i40e_fdir_filter_inset_select(struct i40e_pf *pf,
+                            struct rte_eth_input_set_conf *conf);
 
 void i40e_rxq_info_get(struct rte_eth_dev *dev, uint16_t queue_id,
        struct rte_eth_rxq_info *qinfo);
@@ -676,6 +723,26 @@ i40e_calc_itr_interval(int16_t interval)
        (flow_type) == RTE_ETH_FLOW_NONFRAG_IPV6_OTHER || \
        (flow_type) == RTE_ETH_FLOW_L2_PAYLOAD)
 
+#ifdef X722_SUPPORT
+#define I40E_VALID_PCTYPE(pctype) \
+       ((pctype) == I40E_FILTER_PCTYPE_FRAG_IPV4 || \
+       (pctype) == I40E_FILTER_PCTYPE_NONF_IPV4_TCP || \
+       (pctype) == I40E_FILTER_PCTYPE_NONF_IPV4_TCP_SYN_NO_ACK || \
+       (pctype) == I40E_FILTER_PCTYPE_NONF_IPV4_UDP || \
+       (pctype) == I40E_FILTER_PCTYPE_NONF_UNICAST_IPV4_UDP || \
+       (pctype) == I40E_FILTER_PCTYPE_NONF_MULTICAST_IPV4_UDP || \
+       (pctype) == I40E_FILTER_PCTYPE_NONF_IPV4_SCTP || \
+       (pctype) == I40E_FILTER_PCTYPE_NONF_IPV4_OTHER || \
+       (pctype) == I40E_FILTER_PCTYPE_FRAG_IPV6 || \
+       (pctype) == I40E_FILTER_PCTYPE_NONF_IPV6_UDP || \
+       (pctype) == I40E_FILTER_PCTYPE_NONF_UNICAST_IPV6_UDP || \
+       (pctype) == I40E_FILTER_PCTYPE_NONF_MULTICAST_IPV6_UDP || \
+       (pctype) == I40E_FILTER_PCTYPE_NONF_IPV6_TCP || \
+       (pctype) == I40E_FILTER_PCTYPE_NONF_IPV6_TCP_SYN_NO_ACK || \
+       (pctype) == I40E_FILTER_PCTYPE_NONF_IPV6_SCTP || \
+       (pctype) == I40E_FILTER_PCTYPE_NONF_IPV6_OTHER || \
+       (pctype) == I40E_FILTER_PCTYPE_L2_PAYLOAD)
+#else
 #define I40E_VALID_PCTYPE(pctype) \
        ((pctype) == I40E_FILTER_PCTYPE_FRAG_IPV4 || \
        (pctype) == I40E_FILTER_PCTYPE_NONF_IPV4_TCP || \
@@ -688,5 +755,20 @@ i40e_calc_itr_interval(int16_t interval)
        (pctype) == I40E_FILTER_PCTYPE_NONF_IPV6_SCTP || \
        (pctype) == I40E_FILTER_PCTYPE_NONF_IPV6_OTHER || \
        (pctype) == I40E_FILTER_PCTYPE_L2_PAYLOAD)
+#endif
+
+#define I40E_PHY_TYPE_SUPPORT_40G(phy_type) \
+       (((phy_type) & I40E_CAP_PHY_TYPE_40GBASE_KR4) || \
+       ((phy_type) & I40E_CAP_PHY_TYPE_40GBASE_CR4_CU) || \
+       ((phy_type) & I40E_CAP_PHY_TYPE_40GBASE_AOC) || \
+       ((phy_type) & I40E_CAP_PHY_TYPE_40GBASE_CR4) || \
+       ((phy_type) & I40E_CAP_PHY_TYPE_40GBASE_SR4) || \
+       ((phy_type) & I40E_CAP_PHY_TYPE_40GBASE_LR4))
+
+#define I40E_PHY_TYPE_SUPPORT_25G(phy_type) \
+       (((phy_type) & I40E_CAP_PHY_TYPE_25GBASE_KR) || \
+       ((phy_type) & I40E_CAP_PHY_TYPE_25GBASE_CR) || \
+       ((phy_type) & I40E_CAP_PHY_TYPE_25GBASE_SR) || \
+       ((phy_type) & I40E_CAP_PHY_TYPE_25GBASE_LR))
 
 #endif /* _I40E_ETHDEV_H_ */