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 force_link_speed;
114 uint16_t auto_link_speed_mask;
115 uint32_t preemphasis;
120 #define BNXT_COS_QUEUE_COUNT 8
121 struct bnxt_cos_queue_info {
129 struct rte_eth_dev *eth_dev;
130 struct rte_pci_device *pdev;
133 #define BNXT_FLAG_REGISTERED (1 << 0)
134 #define BNXT_FLAG_VF (1 << 1)
135 #define BNXT_FLAG_DFLT_VNIC_SET (1 << 12)
136 #define BNXT_PF(bp) (!((bp)->flags & BNXT_FLAG_VF))
137 #define BNXT_VF(bp) ((bp)->flags & BNXT_FLAG_VF)
138 #define BNXT_NPAR_ENABLED(bp) ((bp)->port_partition_type)
139 #define BNXT_NPAR_PF(bp) (BNXT_PF(bp) && BNXT_NPAR_ENABLED(bp))
141 unsigned int rx_nr_rings;
142 unsigned int rx_cp_nr_rings;
143 struct bnxt_rx_queue **rx_queues;
145 unsigned int tx_nr_rings;
146 unsigned int tx_cp_nr_rings;
147 struct bnxt_tx_queue **tx_queues;
149 /* Default completion ring */
150 struct bnxt_cp_ring_info *def_cp_ring;
151 uint32_t max_ring_grps;
152 struct bnxt_ring_grp_info *grp_info;
154 unsigned int nr_vnics;
156 struct bnxt_vnic_info *vnic_info;
157 STAILQ_HEAD(, bnxt_vnic_info) free_vnic_list;
159 struct bnxt_filter_info *filter_info;
160 STAILQ_HEAD(, bnxt_filter_info) free_filter_list;
162 /* VNIC pointer for flow filter (VMDq) pools */
163 #define MAX_FF_POOLS ETH_64_POOLS
164 STAILQ_HEAD(, bnxt_vnic_info) ff_pool[MAX_FF_POOLS];
166 struct bnxt_irq *irq_tbl;
168 #define MAX_NUM_MAC_ADDR 32
169 uint8_t mac_addr[ETHER_ADDR_LEN];
171 uint16_t hwrm_cmd_seq;
172 void *hwrm_cmd_resp_addr;
173 phys_addr_t hwrm_cmd_resp_dma_addr;
174 rte_spinlock_t hwrm_lock;
175 uint16_t max_req_len;
176 uint16_t max_resp_len;
178 struct bnxt_link_info link_info;
179 struct bnxt_cos_queue_info cos_queue[BNXT_COS_QUEUE_COUNT];
181 struct bnxt_pf_info pf;
182 struct bnxt_vf_info vf;
183 uint8_t port_partition_type;
187 int bnxt_link_update_op(struct rte_eth_dev *eth_dev, int wait_to_complete);