1 /* 2 * BSD LICENSE 3 * 4 * Copyright (C) Cavium networks Ltd. 2016. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 10 * * Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * * Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in 14 * the documentation and/or other materials provided with the 15 * distribution. 16 * * Neither the name of Cavium networks nor the names of its 17 * contributors may be used to endorse or promote products derived 18 * from this software without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 23 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 24 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 25 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 26 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 */ 32 33 #ifndef _THUNDERX_NICVF_STRUCT_H 34 #define _THUNDERX_NICVF_STRUCT_H 35 36 #include <stdint.h> 37 38 #include <rte_spinlock.h> 39 #include <rte_mempool.h> 40 #include <rte_mbuf.h> 41 #include <rte_interrupts.h> 42 #include <rte_ethdev.h> 43 #include <rte_memory.h> 44 45 struct nicvf_rbdr { 46 uintptr_t rbdr_status; 47 uintptr_t rbdr_door; 48 struct rbdr_entry_t *desc; 49 nicvf_phys_addr_t phys; 50 uint32_t buffsz; 51 uint32_t tail; 52 uint32_t next_tail; 53 uint32_t head; 54 uint32_t qlen_mask; 55 } __rte_cache_aligned; 56 57 struct nicvf_txq { 58 union sq_entry_t *desc; 59 nicvf_phys_addr_t phys; 60 struct rte_mbuf **txbuffs; 61 uintptr_t sq_head; 62 uintptr_t sq_door; 63 struct rte_mempool *pool; 64 struct nicvf *nic; 65 void (*pool_free)(struct nicvf_txq *sq); 66 uint32_t head; 67 uint32_t tail; 68 int32_t xmit_bufs; 69 uint32_t qlen_mask; 70 uint32_t txq_flags; 71 uint16_t queue_id; 72 uint16_t tx_free_thresh; 73 } __rte_cache_aligned; 74 75 struct nicvf_rxq { 76 uint64_t mbuf_phys_off; 77 uintptr_t cq_status; 78 uintptr_t cq_door; 79 nicvf_phys_addr_t phys; 80 union cq_entry_t *desc; 81 struct nicvf_rbdr *shared_rbdr; 82 struct nicvf *nic; 83 struct rte_mempool *pool; 84 uint32_t head; 85 uint32_t qlen_mask; 86 int32_t available_space; 87 int32_t recv_buffers; 88 uint16_t rx_free_thresh; 89 uint16_t queue_id; 90 uint16_t precharge_cnt; 91 uint8_t rx_drop_en; 92 uint8_t port_id; 93 uint8_t rbptr_offset; 94 } __rte_cache_aligned; 95 96 struct nicvf { 97 uint8_t vf_id; 98 uint8_t node; 99 uintptr_t reg_base; 100 bool tns_mode; 101 bool sqs_mode; 102 bool loopback_supported; 103 bool pf_acked:1; 104 bool pf_nacked:1; 105 uint64_t hwcap; 106 uint8_t link_up; 107 uint8_t duplex; 108 uint32_t speed; 109 uint32_t msg_enable; 110 uint16_t device_id; 111 uint16_t vendor_id; 112 uint16_t subsystem_device_id; 113 uint16_t subsystem_vendor_id; 114 struct nicvf_rbdr *rbdr; 115 struct nicvf_rss_reta_info rss_info; 116 struct rte_intr_handle intr_handle; 117 uint8_t cpi_alg; 118 uint16_t mtu; 119 bool vlan_filter_en; 120 uint8_t mac_addr[ETHER_ADDR_LEN]; 121 /* secondary queue set support */ 122 uint8_t sqs_id; 123 uint8_t sqs_count; 124 #define MAX_SQS_PER_VF 11 125 struct nicvf *snicvf[MAX_SQS_PER_VF]; 126 } __rte_cache_aligned; 127 128 #endif /* _THUNDERX_NICVF_STRUCT_H */ 129