X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fiavf%2Fiavf.h;h=f1c2daa06e4b168e444efdbaec5a5b3611206438;hb=149280731bf383e369262aa156b1a3d7e6fbbe6f;hp=9a9ca486f0afa972d646838d79d6a1ffc160aa27;hpb=84108425054acf91165adb65c44e1a57a784e20a;p=dpdk.git diff --git a/drivers/net/iavf/iavf.h b/drivers/net/iavf/iavf.h index 9a9ca486f0..f1c2daa06e 100644 --- a/drivers/net/iavf/iavf.h +++ b/drivers/net/iavf/iavf.h @@ -31,6 +31,8 @@ #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 @@ -76,9 +78,8 @@ /* 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 \ - (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) @@ -92,10 +93,31 @@ #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_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 */ @@ -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 */ - struct virtchnl_eth_stats eth_stats_offset; + struct iavf_eth_xstats eth_stats_offset; }; struct rte_flow; @@ -148,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, @@ -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_shaper_profile_list shaper_profile_list; 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 */ + /** iAVF watchdog enable */ + bool watchdog_enabled; + /* 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; + struct iavf_parser_list ipsec_crypto_parser_list; 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; + + uint32_t ptp_caps; + rte_spinlock_t phc_time_aq_lock; }; #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_IPSEC_CRYPTO_SAID, 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]; + 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; + struct iavf_security_ctx *security_ctx; 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 closed; 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) +#define IAVF_DEV_PRIVATE_TO_IAVF_SECURITY_CTX(adapter) \ + (((struct iavf_adapter *)adapter)->security_ctx) /* 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_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_ */