4 * Copyright(c) Broadcom Limited.
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
11 * * Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * * Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in
15 * the documentation and/or other materials provided with the
17 * * Neither the name of Broadcom Corporation nor the names of its
18 * contributors may be used to endorse or promote products derived
19 * from this software without specific prior written permission.
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 #include <sys/queue.h>
40 #include <rte_ethdev.h>
41 #include <rte_memory.h>
42 #include <rte_lcore.h>
43 #include <rte_spinlock.h>
47 #define BNXT_MAX_MTU 9000
48 #define VLAN_TAG_SIZE 4
50 enum bnxt_hw_context {
52 HW_CONTEXT_IS_RSS = 1,
53 HW_CONTEXT_IS_COS = 2,
59 uint8_t mac_addr[ETHER_ADDR_LEN];
60 uint16_t max_rsscos_ctx;
61 uint16_t max_cp_rings;
62 uint16_t max_tx_rings;
63 uint16_t max_rx_rings;
67 struct bnxt_pf_info *pf;
71 #define BNXT_FIRST_PF_FID 1
72 #define BNXT_MAX_VFS(bp) (bp->pf.max_vfs)
73 #define BNXT_FIRST_VF_FID 128
74 #define BNXT_PF_RINGS_USED(bp) bnxt_get_num_queues(bp)
75 #define BNXT_PF_RINGS_AVAIL(bp) (bp->pf.max_cp_rings - BNXT_PF_RINGS_USED(bp))
78 uint8_t mac_addr[ETHER_ADDR_LEN];
79 uint16_t max_rsscos_ctx;
80 uint16_t max_cp_rings;
81 uint16_t max_tx_rings;
82 uint16_t max_rx_rings;
89 phys_addr_t vf_req_buf_dma_addr;
90 uint32_t vf_req_fwd[8];
91 struct bnxt_vf_info *vf;
94 /* Max wait time is 10 * 100ms = 1s */
95 #define BNXT_LINK_WAIT_CNT 10
96 #define BNXT_LINK_WAIT_INTERVAL 100
97 struct bnxt_link_info {
100 uint8_t phy_link_status;
108 #define PHY_VER_LEN 3
109 uint8_t phy_ver[PHY_VER_LEN];
111 uint16_t support_speeds;
112 uint16_t auto_link_speed;
113 uint16_t auto_link_speed_mask;
114 uint32_t preemphasis;
117 #define BNXT_COS_QUEUE_COUNT 8
118 struct bnxt_cos_queue_info {
126 struct rte_eth_dev *eth_dev;
127 struct rte_pci_device *pdev;
130 #define BNXT_FLAG_REGISTERED (1 << 0)
131 #define BNXT_FLAG_VF (1 << 1)
132 #define BNXT_PF(bp) (!((bp)->flags & BNXT_FLAG_VF))
133 #define BNXT_VF(bp) ((bp)->flags & BNXT_FLAG_VF)
134 #define BNXT_NPAR_ENABLED(bp) ((bp)->port_partition_type)
135 #define BNXT_NPAR_PF(bp) (BNXT_PF(bp) && BNXT_NPAR_ENABLED(bp))
137 unsigned int rx_nr_rings;
138 unsigned int rx_cp_nr_rings;
139 struct bnxt_rx_queue **rx_queues;
141 unsigned int tx_nr_rings;
142 unsigned int tx_cp_nr_rings;
143 struct bnxt_tx_queue **tx_queues;
145 /* Default completion ring */
146 struct bnxt_cp_ring_info *def_cp_ring;
147 uint32_t max_ring_grps;
148 struct bnxt_ring_grp_info *grp_info;
150 unsigned int nr_vnics;
152 struct bnxt_vnic_info *vnic_info;
153 STAILQ_HEAD(, bnxt_vnic_info) free_vnic_list;
155 struct bnxt_filter_info *filter_info;
156 STAILQ_HEAD(, bnxt_filter_info) free_filter_list;
158 /* VNIC pointer for flow filter (VMDq) pools */
159 #define MAX_FF_POOLS ETH_64_POOLS
160 STAILQ_HEAD(, bnxt_vnic_info) ff_pool[MAX_FF_POOLS];
162 #define MAX_NUM_MAC_ADDR 32
163 uint8_t mac_addr[ETHER_ADDR_LEN];
165 uint16_t hwrm_cmd_seq;
166 void *hwrm_cmd_resp_addr;
167 phys_addr_t hwrm_cmd_resp_dma_addr;
168 rte_spinlock_t hwrm_lock;
169 uint16_t max_req_len;
170 uint16_t max_resp_len;
172 struct bnxt_link_info link_info;
173 struct bnxt_cos_queue_info cos_queue[BNXT_COS_QUEUE_COUNT];
175 struct bnxt_pf_info pf;
176 struct bnxt_vf_info vf;
177 uint8_t port_partition_type;