ethdev: move jumbo frame offload check to library
[dpdk.git] / drivers / net / iavf / iavf.h
index feb8337..34bfa9a 100644 (file)
@@ -5,6 +5,8 @@
 #ifndef _IAVF_ETHDEV_H_
 #define _IAVF_ETHDEV_H_
 
+#include <sys/queue.h>
+
 #include <rte_kvargs.h>
 #include <rte_tm_driver.h>
 
@@ -69,6 +71,8 @@
 #define IAVF_QUEUE_ITR_INTERVAL_DEFAULT 32 /* 32 us */
 #define IAVF_QUEUE_ITR_INTERVAL_MAX     8160 /* 8160 us */
 
+#define IAVF_ALARM_INTERVAL 50000 /* us */
+
 /* The overhead from MTU to max frame size.
  * Considering QinQ packet, the VLAN tag needs to be counted twice.
  */
@@ -86,6 +90,8 @@
 
 #define IAVF_BITS_PER_BYTE 8
 
+#define IAVF_VLAN_TAG_PCP_OFFSET 13
+
 struct iavf_adapter;
 struct iavf_rx_queue;
 struct iavf_tx_queue;
@@ -165,6 +171,13 @@ struct iavf_tm_conf {
        bool committed;
 };
 
+/* Struct to store queue TC mapping. Queue is continuous in one TC */
+struct iavf_qtc_map {
+       uint8_t tc;
+       uint16_t start_queue_id;
+       uint16_t queue_count;
+};
+
 /* Structure to store private data specific for VF instance. */
 struct iavf_info {
        uint16_t num_queue_pairs;
@@ -213,7 +226,10 @@ struct iavf_info {
        bool lv_enabled;
 
        struct virtchnl_qos_cap_list *qos_cap;
+       struct iavf_qtc_map *qtc_map;
        struct iavf_tm_conf tm_conf;
+
+       struct rte_eth_dev *eth_dev;
 };
 
 #define IAVF_MAX_PKT_TYPE 1024
@@ -242,7 +258,7 @@ struct iavf_devargs {
 /* Structure to store private data for each VF instance. */
 struct iavf_adapter {
        struct iavf_hw hw;
-       struct rte_eth_dev *eth_dev;
+       struct rte_eth_dev_data *dev_data;
        struct iavf_info vf;
 
        bool rx_bulk_alloc_allowed;
@@ -268,8 +284,6 @@ struct iavf_adapter {
        (&(((struct iavf_vsi *)vsi)->adapter->hw))
 #define IAVF_VSI_TO_VF(vsi) \
        (&(((struct iavf_vsi *)vsi)->adapter->vf))
-#define IAVF_VSI_TO_ETH_DEV(vsi) \
-       (((struct iavf_vsi *)vsi)->adapter->eth_dev)
 
 static inline void
 iavf_init_adminq_parameter(struct iavf_hw *hw)
@@ -325,7 +339,8 @@ _clear_cmd(struct iavf_info *vf)
 static inline int
 _atomic_set_cmd(struct iavf_info *vf, enum virtchnl_ops ops)
 {
-       int ret = rte_atomic32_cmpset(&vf->pend_cmd, VIRTCHNL_OP_UNKNOWN, ops);
+       int ret = rte_atomic32_cmpset((volatile uint32_t *)&vf->pend_cmd,
+               VIRTCHNL_OP_UNKNOWN, ops);
 
        if (!ret)
                PMD_DRV_LOG(ERR, "There is incomplete cmd %d", vf->pend_cmd);
@@ -362,6 +377,7 @@ int iavf_config_irq_map_lv(struct iavf_adapter *adapter, uint16_t num,
 void iavf_add_del_all_mac_addr(struct iavf_adapter *adapter, bool add);
 int iavf_dev_link_update(struct rte_eth_dev *dev,
                        __rte_unused int wait_to_complete);
+void iavf_dev_alarm_handler(void *param);
 int iavf_query_stats(struct iavf_adapter *adapter,
                    struct virtchnl_eth_stats **pstats);
 int iavf_config_promisc(struct iavf_adapter *adapter, bool enable_unicast,
@@ -381,7 +397,7 @@ int iavf_rss_hash_set(struct iavf_adapter *ad, uint64_t rss_hf, bool add);
 int iavf_add_del_mc_addr_list(struct iavf_adapter *adapter,
                        struct rte_ether_addr *mc_addrs,
                        uint32_t mc_addrs_num, bool add);
-int iavf_request_queues(struct iavf_adapter *adapter, uint16_t num);
+int iavf_request_queues(struct rte_eth_dev *dev, uint16_t num);
 int iavf_get_max_rss_queue_region(struct iavf_adapter *adapter);
 int iavf_get_qos_cap(struct iavf_adapter *adapter);
 int iavf_set_q_tc_map(struct rte_eth_dev *dev,