1aaf4363eSJerin Jacob /* SPDX-License-Identifier: BSD-3-Clause 2aaf4363eSJerin Jacob * Copyright(c) 2016 Cavium, Inc 3e4387966SJerin Jacob */ 4e4387966SJerin Jacob 5e4387966SJerin Jacob #ifndef _THUNDERX_NICVF_STRUCT_H 6e4387966SJerin Jacob #define _THUNDERX_NICVF_STRUCT_H 7e4387966SJerin Jacob 8e4387966SJerin Jacob #include <stdint.h> 9e4387966SJerin Jacob 10e4387966SJerin Jacob #include <rte_spinlock.h> 11e4387966SJerin Jacob #include <rte_mempool.h> 12e4387966SJerin Jacob #include <rte_mbuf.h> 13e4387966SJerin Jacob #include <rte_interrupts.h> 14df96fd0dSBruce Richardson #include <ethdev_driver.h> 15e4387966SJerin Jacob #include <rte_memory.h> 16e4387966SJerin Jacob 1727595cd8STyler Retzlaff struct __rte_cache_aligned nicvf_rbdr { 186d76fde7SJerin Jacob uintptr_t rbdr_status; 196d76fde7SJerin Jacob uintptr_t rbdr_door; 20e4387966SJerin Jacob struct rbdr_entry_t *desc; 21df6e0a06SSantosh Shukla nicvf_iova_addr_t phys; 22e4387966SJerin Jacob uint32_t buffsz; 23*e12a0166STyler Retzlaff RTE_ATOMIC(uint32_t) tail; 24*e12a0166STyler Retzlaff RTE_ATOMIC(uint32_t) next_tail; 25e4387966SJerin Jacob uint32_t head; 26e4387966SJerin Jacob uint32_t qlen_mask; 2727595cd8STyler Retzlaff }; 28e4387966SJerin Jacob 2927595cd8STyler Retzlaff struct __rte_cache_aligned nicvf_txq { 30e4387966SJerin Jacob union sq_entry_t *desc; 31df6e0a06SSantosh Shukla nicvf_iova_addr_t phys; 32e4387966SJerin Jacob struct rte_mbuf **txbuffs; 336d76fde7SJerin Jacob uintptr_t sq_head; 346d76fde7SJerin Jacob uintptr_t sq_door; 35e4387966SJerin Jacob struct rte_mempool *pool; 36e4387966SJerin Jacob struct nicvf *nic; 37e4387966SJerin Jacob void (*pool_free)(struct nicvf_txq *sq); 38e4387966SJerin Jacob uint32_t head; 39e4387966SJerin Jacob uint32_t tail; 40e4387966SJerin Jacob int32_t xmit_bufs; 41e4387966SJerin Jacob uint32_t qlen_mask; 42c97da2cbSMaciej Czekaj uint64_t offloads; 43e4387966SJerin Jacob uint16_t queue_id; 44e4387966SJerin Jacob uint16_t tx_free_thresh; 4527595cd8STyler Retzlaff }; 46e4387966SJerin Jacob 475c7ccb26SJerin Jacob union mbuf_initializer { 485c7ccb26SJerin Jacob struct { 495c7ccb26SJerin Jacob uint16_t data_off; 505c7ccb26SJerin Jacob uint16_t refcnt; 515c7ccb26SJerin Jacob uint16_t nb_segs; 525c7ccb26SJerin Jacob uint16_t port; 535c7ccb26SJerin Jacob } fields; 545c7ccb26SJerin Jacob uint64_t value; 555c7ccb26SJerin Jacob }; 565c7ccb26SJerin Jacob 5727595cd8STyler Retzlaff struct __rte_cache_aligned nicvf_rxq { 588f196dc8SJerin Jacob RTE_MARKER rxq_fastpath_data_start; 595e64c812SPavan Nikhilesh uint8_t rbptr_offset; 605e64c812SPavan Nikhilesh uint16_t rx_free_thresh; 615e64c812SPavan Nikhilesh uint32_t head; 625e64c812SPavan Nikhilesh uint32_t qlen_mask; 635e64c812SPavan Nikhilesh int32_t recv_buffers; 645e64c812SPavan Nikhilesh int32_t available_space; 65e4387966SJerin Jacob uint64_t mbuf_phys_off; 666d76fde7SJerin Jacob uintptr_t cq_status; 676d76fde7SJerin Jacob uintptr_t cq_door; 68e4387966SJerin Jacob struct nicvf_rbdr *shared_rbdr; 69e4387966SJerin Jacob struct rte_mempool *pool; 705e64c812SPavan Nikhilesh union cq_entry_t *desc; 715e64c812SPavan Nikhilesh union mbuf_initializer mbuf_initializer; 728f196dc8SJerin Jacob RTE_MARKER rxq_fastpath_data_end; 73e4387966SJerin Jacob uint8_t rx_drop_en; 745e64c812SPavan Nikhilesh uint16_t precharge_cnt; 75f8244c63SZhiyong Yang uint16_t port_id; 765e64c812SPavan Nikhilesh uint16_t queue_id; 775e64c812SPavan Nikhilesh struct nicvf *nic; 785e64c812SPavan Nikhilesh nicvf_iova_addr_t phys; 7927595cd8STyler Retzlaff }; 80e4387966SJerin Jacob 8127595cd8STyler Retzlaff struct __rte_cache_aligned nicvf { 82e4387966SJerin Jacob uint8_t vf_id; 83e4387966SJerin Jacob uint8_t node; 84e4387966SJerin Jacob uintptr_t reg_base; 85e4387966SJerin Jacob bool tns_mode; 86e4387966SJerin Jacob bool sqs_mode; 87e4387966SJerin Jacob bool loopback_supported; 88e4387966SJerin Jacob bool pf_acked:1; 89e4387966SJerin Jacob bool pf_nacked:1; 905e64c812SPavan Nikhilesh bool offload_cksum:1; 91d3bf2564SRakesh Kudurumalla bool vlan_strip:1; 92e4387966SJerin Jacob uint64_t hwcap; 93e4387966SJerin Jacob uint8_t link_up; 94e4387966SJerin Jacob uint8_t duplex; 95e4387966SJerin Jacob uint32_t speed; 96e4387966SJerin Jacob uint32_t msg_enable; 97e4387966SJerin Jacob uint16_t device_id; 98e4387966SJerin Jacob uint16_t vendor_id; 99e4387966SJerin Jacob uint16_t subsystem_device_id; 100e4387966SJerin Jacob uint16_t subsystem_vendor_id; 101e4387966SJerin Jacob struct nicvf_rbdr *rbdr; 102e4387966SJerin Jacob struct nicvf_rss_reta_info rss_info; 103d61138d4SHarman Kalra struct rte_intr_handle *intr_handle; 104e4387966SJerin Jacob uint8_t cpi_alg; 105e4387966SJerin Jacob uint16_t mtu; 106279d3319SRakesh Kudurumalla int skip_bytes; 107e4387966SJerin Jacob bool vlan_filter_en; 10835b2d13fSOlivier Matz uint8_t mac_addr[RTE_ETHER_ADDR_LEN]; 10910b0e74fSKamil Rytarowski /* secondary queue set support */ 11010b0e74fSKamil Rytarowski uint8_t sqs_id; 11110b0e74fSKamil Rytarowski uint8_t sqs_count; 11210b0e74fSKamil Rytarowski #define MAX_SQS_PER_VF 11 11310b0e74fSKamil Rytarowski struct nicvf *snicvf[MAX_SQS_PER_VF]; 11427595cd8STyler Retzlaff }; 115e4387966SJerin Jacob 1168f79c43fSHarman Kalra struct change_link_mode { 1178f79c43fSHarman Kalra bool enable; 1188f79c43fSHarman Kalra uint8_t qlm_mode; 1198f79c43fSHarman Kalra bool autoneg; 1208f79c43fSHarman Kalra uint8_t duplex; 1218f79c43fSHarman Kalra uint32_t speed; 1228f79c43fSHarman Kalra 1238f79c43fSHarman Kalra }; 1248f79c43fSHarman Kalra 125e4387966SJerin Jacob #endif /* _THUNDERX_NICVF_STRUCT_H */ 126