xref: /dpdk/drivers/net/bnxt/tf_ulp/ulp_port_db.h (revision 62d8961f)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2014-2021 Broadcom
3  * All rights reserved.
4  */
5 
6 #ifndef _ULP_PORT_DB_H_
7 #define _ULP_PORT_DB_H_
8 
9 #include "bnxt_ulp.h"
10 
11 #define BNXT_PORT_DB_MAX_INTF_LIST		256
12 #define BNXT_PORT_DB_MAX_FUNC			2048
13 #define BNXT_ULP_FREE_PARIF_BASE		11
14 
15 enum bnxt_ulp_svif_type {
16 	BNXT_ULP_DRV_FUNC_SVIF = 0,
17 	BNXT_ULP_VF_FUNC_SVIF,
18 	BNXT_ULP_PHY_PORT_SVIF
19 };
20 
21 enum bnxt_ulp_spif_type {
22 	BNXT_ULP_DRV_FUNC_SPIF = 0,
23 	BNXT_ULP_VF_FUNC_SPIF,
24 	BNXT_ULP_PHY_PORT_SPIF
25 };
26 
27 enum bnxt_ulp_parif_type {
28 	BNXT_ULP_DRV_FUNC_PARIF = 0,
29 	BNXT_ULP_VF_FUNC_PARIF,
30 	BNXT_ULP_PHY_PORT_PARIF
31 };
32 
33 enum bnxt_ulp_vnic_type {
34 	BNXT_ULP_DRV_FUNC_VNIC = 0,
35 	BNXT_ULP_VF_FUNC_VNIC
36 };
37 
38 enum bnxt_ulp_fid_type {
39 	BNXT_ULP_DRV_FUNC_FID,
40 	BNXT_ULP_VF_FUNC_FID
41 };
42 
43 struct ulp_func_if_info {
44 	uint16_t		func_valid;
45 	uint16_t		func_svif;
46 	uint16_t		func_spif;
47 	uint16_t		func_parif;
48 	uint16_t		func_vnic;
49 	uint8_t			func_mac[RTE_ETHER_ADDR_LEN];
50 	uint16_t		func_parent_vnic;
51 	uint8_t			func_parent_mac[RTE_ETHER_ADDR_LEN];
52 	uint16_t		phy_port_id;
53 	uint16_t		ifindex;
54 };
55 
56 /* Structure for the Port database resource information. */
57 struct ulp_interface_info {
58 	enum bnxt_ulp_intf_type	type;
59 	uint16_t		drv_func_id;
60 	uint16_t		vf_func_id;
61 };
62 
63 struct ulp_phy_port_info {
64 	uint16_t	port_valid;
65 	uint16_t	port_svif;
66 	uint16_t	port_spif;
67 	uint16_t	port_parif;
68 	uint16_t	port_vport;
69 };
70 
71 /* Structure for the Port database */
72 struct bnxt_ulp_port_db {
73 	struct ulp_interface_info	*ulp_intf_list;
74 	uint32_t			ulp_intf_list_size;
75 
76 	/* dpdk device external port list */
77 	uint16_t			dev_port_list[RTE_MAX_ETHPORTS];
78 	struct ulp_phy_port_info	*phy_port_list;
79 	uint16_t			phy_port_cnt;
80 	struct ulp_func_if_info		ulp_func_id_tbl[BNXT_PORT_DB_MAX_FUNC];
81 };
82 
83 /*
84  * Initialize the port database. Memory is allocated in this
85  * call and assigned to the port database.
86  *
87  * ulp_ctxt [in] Ptr to ulp context
88  *
89  * Returns 0 on success or negative number on failure.
90  */
91 int32_t	ulp_port_db_init(struct bnxt_ulp_context *ulp_ctxt, uint8_t port_cnt);
92 
93 /*
94  * Deinitialize the port database. Memory is deallocated in
95  * this call.
96  *
97  * ulp_ctxt [in] Ptr to ulp context
98  *
99  * Returns 0 on success.
100  */
101 int32_t	ulp_port_db_deinit(struct bnxt_ulp_context *ulp_ctxt);
102 
103 /*
104  * Update the port database.This api is called when the port
105  * details are available during the startup.
106  *
107  * ulp_ctxt [in] Ptr to ulp context
108  * bp [in]. ptr to the device function.
109  *
110  * Returns 0 on success or negative number on failure.
111  */
112 int32_t	ulp_port_db_dev_port_intf_update(struct bnxt_ulp_context *ulp_ctxt,
113 					 struct rte_eth_dev *eth_dev);
114 
115 /*
116  * Api to get the ulp ifindex for a given device port.
117  *
118  * ulp_ctxt [in] Ptr to ulp context
119  * port_id [in].device port id
120  * ifindex [out] ulp ifindex
121  *
122  * Returns 0 on success or negative number on failure.
123  */
124 int32_t
125 ulp_port_db_dev_port_to_ulp_index(struct bnxt_ulp_context *ulp_ctxt,
126 				  uint32_t port_id, uint32_t *ifindex);
127 
128 /*
129  * Api to get the function id for a given ulp ifindex.
130  *
131  * ulp_ctxt [in] Ptr to ulp context
132  * ifindex [in] ulp ifindex
133  * func_id [out] the function id of the given ifindex.
134  *
135  * Returns 0 on success or negative number on failure.
136  */
137 int32_t
138 ulp_port_db_function_id_get(struct bnxt_ulp_context *ulp_ctxt,
139 			    uint32_t ifindex, uint32_t fid_type,
140 			    uint16_t *func_id);
141 
142 /*
143  * Api to get the svif for a given ulp ifindex.
144  *
145  * ulp_ctxt [in] Ptr to ulp context
146  * ifindex [in] ulp ifindex
147  * dir [in] the direction for the flow.
148  * svif [out] the svif of the given ifindex.
149  *
150  * Returns 0 on success or negative number on failure.
151  */
152 int32_t
153 ulp_port_db_svif_get(struct bnxt_ulp_context *ulp_ctxt,
154 		     uint32_t ifindex, uint32_t dir, uint16_t *svif);
155 
156 /*
157  * Api to get the spif for a given ulp ifindex.
158  *
159  * ulp_ctxt [in] Ptr to ulp context
160  * ifindex [in] ulp ifindex
161  * dir [in] the direction for the flow.
162  * spif [out] the spif of the given ifindex.
163  *
164  * Returns 0 on success or negative number on failure.
165  */
166 int32_t
167 ulp_port_db_spif_get(struct bnxt_ulp_context *ulp_ctxt,
168 		     uint32_t ifindex, uint32_t dir, uint16_t *spif);
169 
170 
171 /*
172  * Api to get the parif for a given ulp ifindex.
173  *
174  * ulp_ctxt [in] Ptr to ulp context
175  * ifindex [in] ulp ifindex
176  * dir [in] the direction for the flow.
177  * parif [out] the parif of the given ifindex.
178  *
179  * Returns 0 on success or negative number on failure.
180  */
181 int32_t
182 ulp_port_db_parif_get(struct bnxt_ulp_context *ulp_ctxt,
183 		      uint32_t ifindex, uint32_t dir, uint16_t *parif);
184 
185 /*
186  * Api to get the vnic id for a given ulp ifindex.
187  *
188  * ulp_ctxt [in] Ptr to ulp context
189  * ifindex [in] ulp ifindex
190  * vnic [out] the vnic of the given ifindex.
191  *
192  * Returns 0 on success or negative number on failure.
193  */
194 int32_t
195 ulp_port_db_default_vnic_get(struct bnxt_ulp_context *ulp_ctxt,
196 			     uint32_t ifindex, uint32_t vnic_type,
197 			     uint16_t *vnic);
198 
199 /*
200  * Api to get the vport id for a given ulp ifindex.
201  *
202  * ulp_ctxt [in] Ptr to ulp context
203  * ifindex [in] ulp ifindex
204  * vport [out] the port of the given ifindex.
205  *
206  * Returns 0 on success or negative number on failure.
207  */
208 int32_t
209 ulp_port_db_vport_get(struct bnxt_ulp_context *ulp_ctxt,
210 		      uint32_t ifindex,	uint16_t *vport);
211 
212 /*
213  * Api to get the vport for a given physical port.
214  *
215  * ulp_ctxt [in] Ptr to ulp context
216  * phy_port [in] physical port index
217  * out_port [out] the port of the given physical index
218  *
219  * Returns 0 on success or negative number on failure.
220  */
221 int32_t
222 ulp_port_db_phy_port_vport_get(struct bnxt_ulp_context *ulp_ctxt,
223 			       uint32_t phy_port,
224 			       uint16_t *out_port);
225 
226 /*
227  * Api to get the svif for a given physical port.
228  *
229  * ulp_ctxt [in] Ptr to ulp context
230  * phy_port [in] physical port index
231  * svif [out] the svif of the given physical index
232  *
233  * Returns 0 on success or negative number on failure.
234  */
235 int32_t
236 ulp_port_db_phy_port_svif_get(struct bnxt_ulp_context *ulp_ctxt,
237 			      uint32_t phy_port,
238 			      uint16_t *svif);
239 
240 /*
241  * Api to get the port type for a given ulp ifindex.
242  *
243  * ulp_ctxt [in] Ptr to ulp context
244  * ifindex [in] ulp ifindex
245  *
246  * Returns port type.
247  */
248 enum bnxt_ulp_intf_type
249 ulp_port_db_port_type_get(struct bnxt_ulp_context *ulp_ctxt,
250 			  uint32_t ifindex);
251 
252 /*
253  * Api to get the ulp ifindex for a given function id.
254  *
255  * ulp_ctxt [in] Ptr to ulp context
256  * func_id [in].device func id
257  * ifindex [out] ulp ifindex
258  *
259  * Returns 0 on success or negative number on failure.
260  */
261 int32_t
262 ulp_port_db_dev_func_id_to_ulp_index(struct bnxt_ulp_context *ulp_ctxt,
263 				     uint32_t func_id, uint32_t *ifindex);
264 
265 /*
266  * Api to get the function id for a given port id.
267  *
268  * ulp_ctxt [in] Ptr to ulp context
269  * port_id [in] dpdk port id
270  * func_id [out] the function id of the given ifindex.
271  *
272  * Returns 0 on success or negative number on failure.
273  */
274 int32_t
275 ulp_port_db_port_func_id_get(struct bnxt_ulp_context *ulp_ctxt,
276 			     uint16_t port_id, uint16_t *func_id);
277 
278 /*
279  * Api to get the parent mac address for a given port id.
280  *
281  * ulp_ctxt [in] Ptr to ulp context
282  * port_id [in] device port id
283  * mac_addr [out] mac address
284  *
285  * Returns 0 on success or negative number on failure.
286  */
287 int32_t
288 ulp_port_db_parent_mac_addr_get(struct bnxt_ulp_context *ulp_ctxt,
289 				uint32_t port_id, uint8_t **mac_addr);
290 
291 /*
292  * Api to get the mac address for a given port id.
293  *
294  * ulp_ctxt [in] Ptr to ulp context
295  * port_id [in] device port id
296  * mac_addr [out] mac address
297  *
298  * Returns 0 on success or negative number on failure.
299  */
300 int32_t
301 ulp_port_db_drv_mac_addr_get(struct bnxt_ulp_context *ulp_ctxt,
302 			     uint32_t port_id, uint8_t **mac_addr);
303 
304 /*
305  * Api to get the parent vnic for a given port id.
306  *
307  * ulp_ctxt [in] Ptr to ulp context
308  * port_id [in] device port id
309  * vnic [out] parent vnic
310  *
311  * Returns 0 on success or negative number on failure.
312  */
313 int32_t
314 ulp_port_db_parent_vnic_get(struct bnxt_ulp_context *ulp_ctxt,
315 			    uint32_t port_id, uint8_t **vnic);
316 
317 /*
318  * Api to get the phy port for a given port id.
319  *
320  * ulp_ctxt [in] Ptr to ulp context
321  * port_id [in] device port id
322  * phy_port [out] phy_port of the dpdk port_id
323  *
324  * Returns 0 on success or negative number on failure.
325  */
326 int32_t
327 ulp_port_db_phy_port_get(struct bnxt_ulp_context *ulp_ctxt,
328 			 uint32_t port_id, uint16_t *phy_port);
329 
330 #endif /* _ULP_PORT_DB_H_ */
331