git.droids-corp.org
/
dpdk.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
net/iavf: fix race condition with Rx timestamp offload
[dpdk.git]
/
drivers
/
net
/
iavf
/
iavf.h
diff --git
a/drivers/net/iavf/iavf.h
b/drivers/net/iavf/iavf.h
index
9a9ca48
..
f1c2daa
100644
(file)
--- a/
drivers/net/iavf/iavf.h
+++ b/
drivers/net/iavf/iavf.h
@@
-31,6
+31,8
@@
#define IAVF_NUM_MACADDR_MAX 64
#define IAVF_NUM_MACADDR_MAX 64
+#define IAVF_DEV_WATCHDOG_PERIOD 0
+
#define IAVF_DEFAULT_RX_PTHRESH 8
#define IAVF_DEFAULT_RX_HTHRESH 8
#define IAVF_DEFAULT_RX_WTHRESH 0
#define IAVF_DEFAULT_RX_PTHRESH 8
#define IAVF_DEFAULT_RX_HTHRESH 8
#define IAVF_DEFAULT_RX_WTHRESH 0
@@
-76,9
+78,8
@@
/* The overhead from MTU to max frame size.
* Considering QinQ packet, the VLAN tag needs to be counted twice.
*/
/* The overhead from MTU to max frame size.
* Considering QinQ packet, the VLAN tag needs to be counted twice.
*/
-#define IAVF_VLAN_TAG_SIZE 4
#define IAVF_ETH_OVERHEAD \
#define IAVF_ETH_OVERHEAD \
- (RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN +
IAVF_VLAN_TAG_SIZE
* 2)
+ (RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN +
RTE_VLAN_HLEN
* 2)
#define IAVF_ETH_MAX_LEN (RTE_ETHER_MTU + IAVF_ETH_OVERHEAD)
#define IAVF_32_BIT_WIDTH (CHAR_BIT * 4)
#define IAVF_ETH_MAX_LEN (RTE_ETHER_MTU + IAVF_ETH_OVERHEAD)
#define IAVF_32_BIT_WIDTH (CHAR_BIT * 4)
@@
-92,10
+93,31
@@
#define IAVF_VLAN_TAG_PCP_OFFSET 13
#define IAVF_VLAN_TAG_PCP_OFFSET 13
+#define IAVF_L2TPV2_FLAGS_LEN 0x4000
+
struct iavf_adapter;
struct iavf_rx_queue;
struct iavf_tx_queue;
struct iavf_adapter;
struct iavf_rx_queue;
struct iavf_tx_queue;
+
+struct iavf_ipsec_crypto_stats {
+ uint64_t icount;
+ uint64_t ibytes;
+ struct {
+ uint64_t count;
+ uint64_t sad_miss;
+ uint64_t not_processed;
+ uint64_t icv_check;
+ uint64_t ipsec_length;
+ uint64_t misc;
+ } ierrors;
+};
+
+struct iavf_eth_xstats {
+ struct virtchnl_eth_stats eth_stats;
+ struct iavf_ipsec_crypto_stats ips_stats;
+};
+
/* Structure that defines a VSI, associated with a adapter. */
struct iavf_vsi {
struct iavf_adapter *adapter; /* Backreference to associated adapter */
/* Structure that defines a VSI, associated with a adapter. */
struct iavf_vsi {
struct iavf_adapter *adapter; /* Backreference to associated adapter */
@@
-105,7
+127,7
@@
struct iavf_vsi {
uint16_t max_macaddrs; /* Maximum number of MAC addresses */
uint16_t base_vector;
uint16_t msix_intr; /* The MSIX interrupt binds to VSI */
uint16_t max_macaddrs; /* Maximum number of MAC addresses */
uint16_t base_vector;
uint16_t msix_intr; /* The MSIX interrupt binds to VSI */
- struct
virtchnl_eth_
stats eth_stats_offset;
+ struct
iavf_eth_x
stats eth_stats_offset;
};
struct rte_flow;
};
struct rte_flow;
@@
-148,11
+170,21
@@
struct iavf_tm_node {
uint32_t weight;
uint32_t reference_count;
struct iavf_tm_node *parent;
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 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,
/* node type of Traffic Manager */
enum iavf_tm_node_type {
IAVF_TM_NODE_TYPE_PORT,
@@
-166,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_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;
uint32_t nb_tc_node;
uint32_t nb_queue_node;
bool committed;
@@
-197,6
+230,9
@@
struct iavf_info {
int cmd_retval; /* return value of the cmd response from PF */
uint8_t *aq_resp; /* buffer to store the adminq response from PF */
int cmd_retval; /* return value of the cmd response from PF */
uint8_t *aq_resp; /* buffer to store the adminq response from PF */
+ /** iAVF watchdog enable */
+ bool watchdog_enabled;
+
/* Event from pf */
bool dev_closed;
bool link_up;
/* Event from pf */
bool dev_closed;
bool link_up;
@@
-221,6
+257,7
@@
struct iavf_info {
rte_spinlock_t flow_ops_lock;
struct iavf_parser_list rss_parser_list;
struct iavf_parser_list dist_parser_list;
rte_spinlock_t flow_ops_lock;
struct iavf_parser_list rss_parser_list;
struct iavf_parser_list dist_parser_list;
+ struct iavf_parser_list ipsec_crypto_parser_list;
struct iavf_fdir_info fdir; /* flow director info */
/* indicate large VF support enabled or not */
struct iavf_fdir_info fdir; /* flow director info */
/* indicate large VF support enabled or not */
@@
-231,6
+268,9
@@
struct iavf_info {
struct iavf_tm_conf tm_conf;
struct rte_eth_dev *eth_dev;
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
};
#define IAVF_MAX_PKT_TYPE 1024
@@
-245,6
+285,7
@@
enum iavf_proto_xtr_type {
IAVF_PROTO_XTR_IPV6_FLOW,
IAVF_PROTO_XTR_TCP,
IAVF_PROTO_XTR_IP_OFFSET,
IAVF_PROTO_XTR_IPV6_FLOW,
IAVF_PROTO_XTR_TCP,
IAVF_PROTO_XTR_IP_OFFSET,
+ IAVF_PROTO_XTR_IPSEC_CRYPTO_SAID,
IAVF_PROTO_XTR_MAX,
};
IAVF_PROTO_XTR_MAX,
};
@@
-254,13
+295,17
@@
enum iavf_proto_xtr_type {
struct iavf_devargs {
uint8_t proto_xtr_dflt;
uint8_t proto_xtr[IAVF_MAX_QUEUE_NUM];
struct iavf_devargs {
uint8_t proto_xtr_dflt;
uint8_t proto_xtr[IAVF_MAX_QUEUE_NUM];
+ uint16_t quanta_size;
};
};
+struct iavf_security_ctx;
+
/* Structure to store private data for each VF instance. */
struct iavf_adapter {
struct iavf_hw hw;
struct rte_eth_dev_data *dev_data;
struct iavf_info vf;
/* Structure to store private data for each VF instance. */
struct iavf_adapter {
struct iavf_hw hw;
struct rte_eth_dev_data *dev_data;
struct iavf_info vf;
+ struct iavf_security_ctx *security_ctx;
bool rx_bulk_alloc_allowed;
/* For vector PMD */
bool rx_bulk_alloc_allowed;
/* For vector PMD */
@@
-268,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 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;
};
uint16_t fdir_ref_cnt;
struct iavf_devargs devargs;
};
@@
-279,6
+325,8
@@
struct iavf_adapter {
(&((struct iavf_adapter *)adapter)->vf)
#define IAVF_DEV_PRIVATE_TO_HW(adapter) \
(&((struct iavf_adapter *)adapter)->hw)
(&((struct iavf_adapter *)adapter)->vf)
#define IAVF_DEV_PRIVATE_TO_HW(adapter) \
(&((struct iavf_adapter *)adapter)->hw)
+#define IAVF_DEV_PRIVATE_TO_IAVF_SECURITY_CTX(adapter) \
+ (((struct iavf_adapter *)adapter)->security_ctx)
/* IAVF_VSI_TO */
#define IAVF_VSI_TO_HW(vsi) \
/* IAVF_VSI_TO */
#define IAVF_VSI_TO_HW(vsi) \
@@
-419,10
+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_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_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);
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;
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_ */
#endif /* _IAVF_ETHDEV_H_ */