#ifndef _IAVF_ETHDEV_H_
#define _IAVF_ETHDEV_H_
+#include <sys/queue.h>
+
#include <rte_kvargs.h>
#include <rte_tm_driver.h>
#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.
*/
#define IAVF_BITS_PER_BYTE 8
+#define IAVF_VLAN_TAG_PCP_OFFSET 13
+
struct iavf_adapter;
struct iavf_rx_queue;
struct iavf_tx_queue;
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;
bool lv_enabled;
struct virtchnl_qos_cap_list *qos_cap;
+ struct iavf_qtc_map *qtc_map;
struct iavf_tm_conf tm_conf;
};
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);
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,