remove blank lines at end of file
[dpdk.git] / drivers / net / i40e / i40e_ethdev.h
index 79bfc67..295ad59 100644 (file)
@@ -7,7 +7,6 @@
 
 #include <stdint.h>
 
-#include <rte_eth_ctrl.h>
 #include <rte_time.h>
 #include <rte_kvargs.h>
 #include <rte_hash.h>
@@ -28,6 +27,7 @@
 #define I40E_NUM_DESC_ALIGN       32
 #define I40E_BUF_SIZE_MIN         1024
 #define I40E_FRAME_SIZE_MAX       9728
+#define I40E_TSO_FRAME_SIZE_MAX   262144
 #define I40E_QUEUE_BASE_ADDR_UNIT 128
 /* number of VSIs and queue default setting */
 #define I40E_MAX_QP_NUM_PER_VF    16
@@ -184,7 +184,7 @@ enum i40e_flxpld_layer_idx {
 #define I40E_ITR_INDEX_NONE             3
 #define I40E_QUEUE_ITR_INTERVAL_DEFAULT 32 /* 32 us */
 #define I40E_QUEUE_ITR_INTERVAL_MAX     8160 /* 8160 us */
-#define I40E_VF_QUEUE_ITR_INTERVAL_DEFAULT 8160 /* 8160 us */
+#define I40E_VF_QUEUE_ITR_INTERVAL_DEFAULT 32 /* 32 us */
 /* Special FW support this floating VEB feature */
 #define FLOATING_VEB_SUPPORTED_FW_MAJ 5
 #define FLOATING_VEB_SUPPORTED_FW_MIN 0
@@ -268,16 +268,17 @@ enum i40e_flxpld_layer_idx {
  * Considering QinQ packet, the VLAN tag needs to be counted twice.
  */
 #define I40E_ETH_OVERHEAD \
-       (ETHER_HDR_LEN + ETHER_CRC_LEN + I40E_VLAN_TAG_SIZE * 2)
+       (RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN + I40E_VLAN_TAG_SIZE * 2)
 
 struct i40e_adapter;
+struct rte_pci_driver;
 
 /**
  * MAC filter structure
  */
 struct i40e_mac_filter_info {
        enum rte_mac_filter_type filter_type;
-       struct ether_addr mac_addr;
+       struct rte_ether_addr mac_addr;
 };
 
 TAILQ_HEAD(i40e_mac_filter_list, i40e_mac_filter);
@@ -330,7 +331,7 @@ struct i40e_veb {
 
 /* i40e MACVLAN filter structure */
 struct i40e_macvlan_filter {
-       struct ether_addr macaddr;
+       struct rte_ether_addr macaddr;
        enum rte_mac_filter_type filter_type;
        uint16_t vlan_id;
 };
@@ -421,10 +422,26 @@ struct i40e_pf_vf {
        uint16_t vf_idx; /* VF index in pf->vfs */
        uint16_t lan_nb_qps; /* Actual queues allocated */
        uint16_t reset_cnt; /* Total vf reset times */
-       struct ether_addr mac_addr;  /* Default MAC address */
+       struct rte_ether_addr mac_addr;  /* Default MAC address */
        /* version of the virtchnl from VF */
        struct virtchnl_version_info version;
        uint32_t request_caps; /* offload caps requested from VF */
+
+       /*
+        * Variables for store the arrival timestamp of VF messages.
+        * If the timestamp of latest message stored at
+        * `msg_timestamps[index % max]` then the timestamp of
+        * earliest message stored at `msg_time[(index + 1) % max]`.
+        * When a new message come, the timestamp of this message
+        * will be stored at `msg_timestamps[(index + 1) % max]` and the
+        * earliest message timestamp is at
+        * `msg_timestamps[(index + 2) % max]` now...
+        */
+       uint32_t msg_index;
+       uint64_t *msg_timestamps;
+
+       /* cycle of stop ignoring VF message */
+       uint64_t ignore_end_cycle;
 };
 
 /*
@@ -641,7 +658,7 @@ struct i40e_fdir_info {
 
 /* Ethertype filter struct */
 struct i40e_ethertype_filter_input {
-       struct ether_addr mac_addr;   /* Mac address to match */
+       struct rte_ether_addr mac_addr;   /* Mac address to match */
        uint16_t ether_type;          /* Ether type to match */
 };
 
@@ -759,8 +776,8 @@ enum i40e_tunnel_type {
  * Tunneling Packet filter configuration.
  */
 struct i40e_tunnel_filter_conf {
-       struct ether_addr outer_mac;    /**< Outer MAC address to match. */
-       struct ether_addr inner_mac;    /**< Inner MAC address to match. */
+       struct rte_ether_addr outer_mac;    /**< Outer MAC address to match. */
+       struct rte_ether_addr inner_mac;    /**< Inner MAC address to match. */
        uint16_t inner_vlan;            /**< Inner VLAN to match. */
        uint32_t outer_vlan;            /**< Outer VLAN to match */
        enum i40e_tunnel_iptype ip_type; /**< IP address type. */
@@ -899,6 +916,20 @@ struct i40e_rte_flow_rss_conf {
        uint16_t queue[I40E_MAX_Q_PER_TC]; /**< Queues indices to use. */
 };
 
+struct i40e_vf_msg_cfg {
+       /* maximal VF message during a statistic period */
+       uint32_t max_msg;
+
+       /* statistic period, in second */
+       uint32_t period;
+       /*
+        * If message statistics from a VF exceed the maximal limitation,
+        * the PF will ignore any new message from that VF for
+        * 'ignor_second' time.
+        */
+       uint32_t ignore_second;
+};
+
 /*
  * Structure to store private data specific for PF instance.
  */
@@ -919,7 +950,7 @@ struct i40e_pf {
        bool offset_loaded;
 
        struct rte_eth_dev_data *dev_data; /* Pointer to the device data */
-       struct ether_addr dev_addr; /* PF device mac address */
+       struct rte_ether_addr dev_addr; /* PF device mac address */
        uint64_t flags; /* PF feature flags */
        /* All kinds of queue pair setting for different VSIs */
        struct i40e_pf_vf *vfs;
@@ -974,6 +1005,8 @@ struct i40e_pf {
        struct i40e_customized_pctype customized_pctype[I40E_CUSTOMIZED_MAX];
        /* Switch Domain Id */
        uint16_t switch_domain_id;
+
+       struct i40e_vf_msg_cfg vf_msg_cfg;
 };
 
 enum pending_msg {
@@ -1023,7 +1056,8 @@ struct i40e_vf {
        uint16_t promisc_flags; /* Promiscuous setting */
        uint32_t vlan[I40E_VFTA_SIZE]; /* VLAN bit map */
 
-       struct ether_addr mc_addrs[I40E_NUM_MACADDR_MAX]; /* Multicast addrs */
+       /* Multicast addrs */
+       struct rte_ether_addr mc_addrs[I40E_NUM_MACADDR_MAX];
        uint16_t mc_addrs_num;   /* Multicast mac addresses number */
 
        /* Event from pf */
@@ -1077,6 +1111,12 @@ struct i40e_adapter {
        uint64_t pctypes_tbl[I40E_FLOW_TYPE_MAX] __rte_cache_min_aligned;
        uint64_t flow_types_mask;
        uint64_t pctypes_mask;
+
+       /* For devargs */
+       uint8_t use_latest_vec;
+
+       /* For RSS reta table update */
+       uint8_t rss_reta_updated;
 };
 
 /**
@@ -1125,7 +1165,7 @@ int i40e_switch_tx_queue(struct i40e_hw *hw, uint16_t q_idx, bool on);
 int i40e_vsi_add_vlan(struct i40e_vsi *vsi, uint16_t vlan);
 int i40e_vsi_delete_vlan(struct i40e_vsi *vsi, uint16_t vlan);
 int i40e_vsi_add_mac(struct i40e_vsi *vsi, struct i40e_mac_filter_info *filter);
-int i40e_vsi_delete_mac(struct i40e_vsi *vsi, struct ether_addr *addr);
+int i40e_vsi_delete_mac(struct i40e_vsi *vsi, struct rte_ether_addr *addr);
 void i40e_update_vsi_stats(struct i40e_vsi *vsi);
 void i40e_pf_disable_irq0(struct i40e_hw *hw);
 void i40e_pf_enable_irq0(struct i40e_hw *hw);
@@ -1145,6 +1185,7 @@ const struct rte_memzone *i40e_memzone_reserve(const char *name,
                                        uint32_t len,
                                        int socket_id);
 int i40e_fdir_configure(struct rte_eth_dev *dev);
+void i40e_fdir_rx_proc_enable(struct rte_eth_dev *dev, bool on);
 void i40e_fdir_teardown(struct i40e_pf *pf);
 enum i40e_filter_pctype
        i40e_flowtype_to_pctype(const struct i40e_adapter *adapter,
@@ -1169,6 +1210,10 @@ void i40e_rxq_info_get(struct rte_eth_dev *dev, uint16_t queue_id,
        struct rte_eth_rxq_info *qinfo);
 void i40e_txq_info_get(struct rte_eth_dev *dev, uint16_t queue_id,
        struct rte_eth_txq_info *qinfo);
+int i40e_rx_burst_mode_get(struct rte_eth_dev *dev, uint16_t queue_id,
+                          struct rte_eth_burst_mode *mode);
+int i40e_tx_burst_mode_get(struct rte_eth_dev *dev, uint16_t queue_id,
+                          struct rte_eth_burst_mode *mode);
 struct i40e_ethertype_filter *
 i40e_sw_ethertype_filter_lookup(struct i40e_ethertype_rule *ethertype_rule,
                        const struct i40e_ethertype_filter_input *input);
@@ -1200,7 +1245,7 @@ int i40e_dev_consistent_tunnel_filter_set(struct i40e_pf *pf,
 int i40e_fdir_flush(struct rte_eth_dev *dev);
 int i40e_find_all_vlan_for_mac(struct i40e_vsi *vsi,
                               struct i40e_macvlan_filter *mv_f,
-                              int num, struct ether_addr *addr);
+                              int num, struct rte_ether_addr *addr);
 int i40e_remove_macvlan_filters(struct i40e_vsi *vsi,
                                struct i40e_macvlan_filter *filter,
                                int total);
@@ -1208,7 +1253,9 @@ void i40e_set_vlan_filter(struct i40e_vsi *vsi, uint16_t vlan_id, bool on);
 int i40e_add_macvlan_filters(struct i40e_vsi *vsi,
                             struct i40e_macvlan_filter *filter,
                             int total);
+bool is_device_supported(struct rte_eth_dev *dev, struct rte_pci_driver *drv);
 bool is_i40e_supported(struct rte_eth_dev *dev);
+bool is_i40evf_supported(struct rte_eth_dev *dev);
 
 int i40e_validate_input_set(enum i40e_filter_pctype pctype,
                            enum rte_filter_type filter, uint64_t inset);
@@ -1318,17 +1365,17 @@ i40e_align_floor(int n)
 }
 
 static inline uint16_t
-i40e_calc_itr_interval(int16_t interval, bool is_pf, bool is_multi_drv)
+i40e_calc_itr_interval(bool is_pf, bool is_multi_drv)
 {
-       if (interval < 0 || interval > I40E_QUEUE_ITR_INTERVAL_MAX) {
-               if (is_multi_drv) {
-                       interval = I40E_QUEUE_ITR_INTERVAL_MAX;
-               } else {
-                       if (is_pf)
-                               interval = I40E_QUEUE_ITR_INTERVAL_DEFAULT;
-                       else
-                               interval = I40E_VF_QUEUE_ITR_INTERVAL_DEFAULT;
-               }
+       uint16_t interval = 0;
+
+       if (is_multi_drv) {
+               interval = I40E_QUEUE_ITR_INTERVAL_MAX;
+       } else {
+               if (is_pf)
+                       interval = I40E_QUEUE_ITR_INTERVAL_DEFAULT;
+               else
+                       interval = I40E_VF_QUEUE_ITR_INTERVAL_DEFAULT;
        }
 
        /* Convert to hardware count, as writing each 1 represents 2 us */
@@ -1392,6 +1439,8 @@ i40e_calc_itr_interval(int16_t interval, bool is_pf, bool is_multi_drv)
        (((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))
+       ((phy_type) & I40E_CAP_PHY_TYPE_25GBASE_LR) || \
+       ((phy_type) & I40E_CAP_PHY_TYPE_25GBASE_AOC) || \
+       ((phy_type) & I40E_CAP_PHY_TYPE_25GBASE_ACC))
 
 #endif /* _I40E_ETHDEV_H_ */