net/bnxt: configure PARIF for offload miss rules
[dpdk.git] / drivers / net / bnxt / tf_ulp / ulp_port_db.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2014-2019 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         uint16_t                phy_port_id;
50         uint16_t                ifindex;
51 };
52
53 /* Structure for the Port database resource information. */
54 struct ulp_interface_info {
55         enum bnxt_ulp_intf_type type;
56         uint16_t                drv_func_id;
57         uint16_t                vf_func_id;
58 };
59
60 struct ulp_phy_port_info {
61         uint16_t        port_valid;
62         uint16_t        port_svif;
63         uint16_t        port_spif;
64         uint16_t        port_parif;
65         uint16_t        port_vport;
66 };
67
68 /* Structure for the Port database */
69 struct bnxt_ulp_port_db {
70         struct ulp_interface_info       *ulp_intf_list;
71         uint32_t                        ulp_intf_list_size;
72
73         /* dpdk device external port list */
74         uint16_t                        dev_port_list[RTE_MAX_ETHPORTS];
75         struct ulp_phy_port_info        *phy_port_list;
76         uint16_t                        phy_port_cnt;
77         struct ulp_func_if_info         ulp_func_id_tbl[BNXT_PORT_DB_MAX_FUNC];
78 };
79
80 /*
81  * Initialize the port database. Memory is allocated in this
82  * call and assigned to the port database.
83  *
84  * ulp_ctxt [in] Ptr to ulp context
85  *
86  * Returns 0 on success or negative number on failure.
87  */
88 int32_t ulp_port_db_init(struct bnxt_ulp_context *ulp_ctxt, uint8_t port_cnt);
89
90 /*
91  * Deinitialize the port database. Memory is deallocated in
92  * this call.
93  *
94  * ulp_ctxt [in] Ptr to ulp context
95  *
96  * Returns 0 on success.
97  */
98 int32_t ulp_port_db_deinit(struct bnxt_ulp_context *ulp_ctxt);
99
100 /*
101  * Update the port database.This api is called when the port
102  * details are available during the startup.
103  *
104  * ulp_ctxt [in] Ptr to ulp context
105  * bp [in]. ptr to the device function.
106  *
107  * Returns 0 on success or negative number on failure.
108  */
109 int32_t ulp_port_db_dev_port_intf_update(struct bnxt_ulp_context *ulp_ctxt,
110                                          struct rte_eth_dev *eth_dev);
111
112 /*
113  * Api to get the ulp ifindex for a given device port.
114  *
115  * ulp_ctxt [in] Ptr to ulp context
116  * port_id [in].device port id
117  * ifindex [out] ulp ifindex
118  *
119  * Returns 0 on success or negative number on failure.
120  */
121 int32_t
122 ulp_port_db_dev_port_to_ulp_index(struct bnxt_ulp_context *ulp_ctxt,
123                                   uint32_t port_id, uint32_t *ifindex);
124
125 /*
126  * Api to get the function id for a given ulp ifindex.
127  *
128  * ulp_ctxt [in] Ptr to ulp context
129  * ifindex [in] ulp ifindex
130  * func_id [out] the function id of the given ifindex.
131  *
132  * Returns 0 on success or negative number on failure.
133  */
134 int32_t
135 ulp_port_db_function_id_get(struct bnxt_ulp_context *ulp_ctxt,
136                             uint32_t ifindex, uint32_t fid_type,
137                             uint16_t *func_id);
138
139 /*
140  * Api to get the svif for a given ulp ifindex.
141  *
142  * ulp_ctxt [in] Ptr to ulp context
143  * ifindex [in] ulp ifindex
144  * dir [in] the direction for the flow.
145  * svif [out] the svif of the given ifindex.
146  *
147  * Returns 0 on success or negative number on failure.
148  */
149 int32_t
150 ulp_port_db_svif_get(struct bnxt_ulp_context *ulp_ctxt,
151                      uint32_t ifindex, uint32_t dir, uint16_t *svif);
152
153 /*
154  * Api to get the spif for a given ulp ifindex.
155  *
156  * ulp_ctxt [in] Ptr to ulp context
157  * ifindex [in] ulp ifindex
158  * dir [in] the direction for the flow.
159  * spif [out] the spif of the given ifindex.
160  *
161  * Returns 0 on success or negative number on failure.
162  */
163 int32_t
164 ulp_port_db_spif_get(struct bnxt_ulp_context *ulp_ctxt,
165                      uint32_t ifindex, uint32_t dir, uint16_t *spif);
166
167
168 /*
169  * Api to get the parif for a given ulp ifindex.
170  *
171  * ulp_ctxt [in] Ptr to ulp context
172  * ifindex [in] ulp ifindex
173  * dir [in] the direction for the flow.
174  * parif [out] the parif of the given ifindex.
175  *
176  * Returns 0 on success or negative number on failure.
177  */
178 int32_t
179 ulp_port_db_parif_get(struct bnxt_ulp_context *ulp_ctxt,
180                       uint32_t ifindex, uint32_t dir, uint16_t *parif);
181
182 /*
183  * Api to get the vnic id for a given ulp ifindex.
184  *
185  * ulp_ctxt [in] Ptr to ulp context
186  * ifindex [in] ulp ifindex
187  * vnic [out] the vnic of the given ifindex.
188  *
189  * Returns 0 on success or negative number on failure.
190  */
191 int32_t
192 ulp_port_db_default_vnic_get(struct bnxt_ulp_context *ulp_ctxt,
193                              uint32_t ifindex, uint32_t vnic_type,
194                              uint16_t *vnic);
195
196 /*
197  * Api to get the vport id for a given ulp ifindex.
198  *
199  * ulp_ctxt [in] Ptr to ulp context
200  * ifindex [in] ulp ifindex
201  * vport [out] the port of the given ifindex.
202  *
203  * Returns 0 on success or negative number on failure.
204  */
205 int32_t
206 ulp_port_db_vport_get(struct bnxt_ulp_context *ulp_ctxt,
207                       uint32_t ifindex, uint16_t *vport);
208
209 /*
210  * Api to get the vport for a given physical port.
211  *
212  * ulp_ctxt [in] Ptr to ulp context
213  * phy_port [in] physical port index
214  * out_port [out] the port of the given physical index
215  *
216  * Returns 0 on success or negative number on failure.
217  */
218 int32_t
219 ulp_port_db_phy_port_vport_get(struct bnxt_ulp_context *ulp_ctxt,
220                                uint32_t phy_port,
221                                uint16_t *out_port);
222
223 /*
224  * Api to get the svif for a given physical port.
225  *
226  * ulp_ctxt [in] Ptr to ulp context
227  * phy_port [in] physical port index
228  * svif [out] the svif of the given physical index
229  *
230  * Returns 0 on success or negative number on failure.
231  */
232 int32_t
233 ulp_port_db_phy_port_svif_get(struct bnxt_ulp_context *ulp_ctxt,
234                               uint32_t phy_port,
235                               uint16_t *svif);
236
237 /*
238  * Api to get the port type for a given ulp ifindex.
239  *
240  * ulp_ctxt [in] Ptr to ulp context
241  * ifindex [in] ulp ifindex
242  *
243  * Returns port type.
244  */
245 enum bnxt_ulp_intf_type
246 ulp_port_db_port_type_get(struct bnxt_ulp_context *ulp_ctxt,
247                           uint32_t ifindex);
248
249 /*
250  * Api to get the ulp ifindex for a given function id.
251  *
252  * ulp_ctxt [in] Ptr to ulp context
253  * func_id [in].device func id
254  * ifindex [out] ulp ifindex
255  *
256  * Returns 0 on success or negative number on failure.
257  */
258 int32_t
259 ulp_port_db_dev_func_id_to_ulp_index(struct bnxt_ulp_context *ulp_ctxt,
260                                      uint32_t func_id, uint32_t *ifindex);
261
262 #endif /* _ULP_PORT_DB_H_ */