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 union mbuf_initializer { 76 struct { 77 uint16_t data_off; 78 uint16_t refcnt; 79 uint16_t nb_segs; 80 uint16_t port; 81 } fields; 82 uint64_t value; 83 }; 84 85 struct nicvf_rxq { 86 uint64_t mbuf_phys_off; 87 uintptr_t cq_status; 88 uintptr_t cq_door; 89 union mbuf_initializer mbuf_initializer; 90 nicvf_phys_addr_t phys; 91 union cq_entry_t *desc; 92 struct nicvf_rbdr *shared_rbdr; 93 struct nicvf *nic; 94 struct rte_mempool *pool; 95 uint32_t head; 96 uint32_t qlen_mask; 97 int32_t available_space; 98 int32_t recv_buffers; 99 uint16_t rx_free_thresh; 100 uint16_t queue_id; 101 uint16_t precharge_cnt; 102 uint8_t rx_drop_en; 103 uint8_t port_id; 104 uint8_t rbptr_offset; 105 } __rte_cache_aligned; 106 107 struct nicvf { 108 uint8_t vf_id; 109 uint8_t node; 110 uintptr_t reg_base; 111 bool tns_mode; 112 bool sqs_mode; 113 bool loopback_supported; 114 bool pf_acked:1; 115 bool pf_nacked:1; 116 uint64_t hwcap; 117 uint8_t link_up; 118 uint8_t duplex; 119 uint32_t speed; 120 uint32_t msg_enable; 121 uint16_t device_id; 122 uint16_t vendor_id; 123 uint16_t subsystem_device_id; 124 uint16_t subsystem_vendor_id; 125 struct nicvf_rbdr *rbdr; 126 struct nicvf_rss_reta_info rss_info; 127 struct rte_intr_handle intr_handle; 128 uint8_t cpi_alg; 129 uint16_t mtu; 130 bool vlan_filter_en; 131 uint8_t mac_addr[ETHER_ADDR_LEN]; 132 /* secondary queue set support */ 133 uint8_t sqs_id; 134 uint8_t sqs_count; 135 #define MAX_SQS_PER_VF 11 136 struct nicvf *snicvf[MAX_SQS_PER_VF]; 137 } __rte_cache_aligned; 138 139 #endif /* _THUNDERX_NICVF_STRUCT_H */ 140