net/iavf: fix race condition with Rx timestamp offload
[dpdk.git] / drivers / net / iavf / iavf.h
index a01d18e..f1c2daa 100644 (file)
@@ -170,11 +170,21 @@ struct iavf_tm_node {
        uint32_t weight;
        uint32_t reference_count;
        struct iavf_tm_node *parent;
+       struct iavf_tm_shaper_profile *shaper_profile;
        struct rte_tm_node_params params;
 };
 
 TAILQ_HEAD(iavf_tm_node_list, iavf_tm_node);
 
+struct iavf_tm_shaper_profile {
+       TAILQ_ENTRY(iavf_tm_shaper_profile) node;
+       uint32_t shaper_profile_id;
+       uint32_t reference_count;
+       struct rte_tm_shaper_params profile;
+};
+
+TAILQ_HEAD(iavf_shaper_profile_list, iavf_tm_shaper_profile);
+
 /* node type of Traffic Manager */
 enum iavf_tm_node_type {
        IAVF_TM_NODE_TYPE_PORT,
@@ -188,6 +198,7 @@ struct iavf_tm_conf {
        struct iavf_tm_node *root; /* root node - vf vsi */
        struct iavf_tm_node_list tc_list; /* node list for all the TCs */
        struct iavf_tm_node_list queue_list; /* node list for all the queues */
+       struct iavf_shaper_profile_list shaper_profile_list;
        uint32_t nb_tc_node;
        uint32_t nb_queue_node;
        bool committed;
@@ -257,6 +268,9 @@ struct iavf_info {
        struct iavf_tm_conf tm_conf;
 
        struct rte_eth_dev *eth_dev;
+
+       uint32_t ptp_caps;
+       rte_spinlock_t phc_time_aq_lock;
 };
 
 #define IAVF_MAX_PKT_TYPE 1024
@@ -281,6 +295,7 @@ enum iavf_proto_xtr_type {
 struct iavf_devargs {
        uint8_t proto_xtr_dflt;
        uint8_t proto_xtr[IAVF_MAX_QUEUE_NUM];
+       uint16_t quanta_size;
 };
 
 struct iavf_security_ctx;
@@ -298,6 +313,7 @@ struct iavf_adapter {
        bool tx_vec_allowed;
        uint32_t ptype_tbl[IAVF_MAX_PKT_TYPE] __rte_cache_min_aligned;
        bool stopped;
+       bool closed;
        uint16_t fdir_ref_cnt;
        struct iavf_devargs devargs;
 };
@@ -451,13 +467,19 @@ int iavf_add_del_mc_addr_list(struct iavf_adapter *adapter,
 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_bw(struct rte_eth_dev *dev,
+                 struct virtchnl_queues_bw_cfg *q_bw, uint16_t size);
 int iavf_set_q_tc_map(struct rte_eth_dev *dev,
                        struct virtchnl_queue_tc_mapping *q_tc_mapping,
                        uint16_t size);
+int iavf_set_vf_quanta_size(struct iavf_adapter *adapter, u16 start_queue_id,
+                           u16 num_queues);
 void iavf_tm_conf_init(struct rte_eth_dev *dev);
 void iavf_tm_conf_uninit(struct rte_eth_dev *dev);
 int iavf_ipsec_crypto_request(struct iavf_adapter *adapter,
                uint8_t *msg, size_t msg_len,
                uint8_t *resp_msg, size_t resp_msg_len);
 extern const struct rte_tm_ops iavf_tm_ops;
+int iavf_get_ptp_cap(struct iavf_adapter *adapter);
+int iavf_get_phc_time(struct iavf_rx_queue *rxq);
 #endif /* _IAVF_ETHDEV_H_ */