net/bnxt: support EM and TCAM lookup with table scope
[dpdk.git] / drivers / net / bnxt / tf_core / tf_msg.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2019-2020 Broadcom
3  * All rights reserved.
4  */
5
6 #ifndef _TF_MSG_H_
7 #define _TF_MSG_H_
8
9 #include <rte_common.h>
10 #include <hsi_struct_def_dpdk.h>
11
12 #include "tf_tbl.h"
13 #include "tf_rm.h"
14 #include "tf_rm_new.h"
15 #include "tf_tcam.h"
16
17 struct tf;
18
19 /* HWRM Direct messages */
20
21 /**
22  * Sends session open request to Firmware
23  *
24  * [in] session
25  *   Pointer to session handle
26  *
27  * [in] ctrl_chan_name
28  *   PCI name of the control channel
29  *
30  * [in/out] fw_session_id
31  *   Pointer to the fw_session_id that is allocated on firmware side
32  *
33  * Returns:
34  *   0 on Success else internal Truflow error
35  */
36 int tf_msg_session_open(struct tf *tfp,
37                         char *ctrl_chan_name,
38                         uint8_t *fw_session_id);
39
40 /**
41  * Sends session close request to Firmware
42  *
43  * [in] session
44  *   Pointer to session handle
45  *
46  * [in] fw_session_id
47  *   Pointer to the fw_session_id that is assigned to the session at
48  *   time of session open
49  *
50  * Returns:
51  *   0 on Success else internal Truflow error
52  */
53 int tf_msg_session_attach(struct tf *tfp,
54                           char *ctrl_channel_name,
55                           uint8_t tf_fw_session_id);
56
57 /**
58  * Sends session close request to Firmware
59  *
60  * [in] session
61  *   Pointer to session handle
62  *
63  * Returns:
64  *   0 on Success else internal Truflow error
65  */
66 int tf_msg_session_close(struct tf *tfp);
67
68 /**
69  * Sends session query config request to TF Firmware
70  *
71  * [in] session
72  *   Pointer to session handle
73  *
74  * Returns:
75  *   0 on Success else internal Truflow error
76  */
77 int tf_msg_session_qcfg(struct tf *tfp);
78
79 /**
80  * Sends session HW resource query capability request to TF Firmware
81  *
82  * [in] tfp
83  *   Pointer to TF handle
84  *
85  * [in] dir
86  *   Receive or Transmit direction
87  *
88  * [in] size
89  *   Number of elements in the query. Should be set to the max
90  *   elements for the device type
91  *
92  * [out] query
93  *   Pointer to an array of query elements
94  *
95  * [out] resv_strategy
96  *   Pointer to the reservation strategy
97  *
98  * Returns:
99  *   0 on Success else internal Truflow error
100  */
101 int tf_msg_session_resc_qcaps(struct tf *tfp,
102                               enum tf_dir dir,
103                               uint16_t size,
104                               struct tf_rm_resc_req_entry *query,
105                               enum tf_rm_resc_resv_strategy *resv_strategy);
106
107 /**
108  * Sends session HW resource allocation request to TF Firmware
109  *
110  * [in] tfp
111  *   Pointer to TF handle
112  *
113  * [in] dir
114  *   Receive or Transmit direction
115  *
116  * [in] size
117  *   Number of elements in the req and resv arrays
118  *
119  * [in] req
120  *   Pointer to an array of request elements
121  *
122  * [in] resv
123  *   Pointer to an array of reserved elements
124  *
125  * Returns:
126  *   0 on Success else internal Truflow error
127  */
128 int tf_msg_session_resc_alloc(struct tf *tfp,
129                               enum tf_dir dir,
130                               uint16_t size,
131                               struct tf_rm_resc_req_entry *request,
132                               struct tf_rm_resc_entry *resv);
133
134 /**
135  * Sends session resource flush request to TF Firmware
136  *
137  * [in] tfp
138  *   Pointer to TF handle
139  *
140  * [in] dir
141  *   Receive or Transmit direction
142  *
143  * [in] size
144  *   Number of elements in the req and resv arrays
145  *
146  * [in] resv
147  *   Pointer to an array of reserved elements that needs to be flushed
148  *
149  * Returns:
150  *   0 on Success else internal Truflow error
151  */
152 int tf_msg_session_resc_flush(struct tf *tfp,
153                               enum tf_dir dir,
154                               uint16_t size,
155                               struct tf_rm_resc_entry *resv);
156 /**
157  * Sends EM internal insert request to Firmware
158  *
159  * [in] tfp
160  *   Pointer to TF handle
161  *
162  * [in] params
163  *   Pointer to em insert parameter list
164  *
165  * [in] rptr_index
166  *   Record ptr index
167  *
168  * [in] rptr_entry
169  *   Record ptr entry
170  *
171  * [in] num_of_entries
172  *   Number of entries to insert
173  *
174  * Returns:
175  *   0 on Success else internal Truflow error
176  */
177 int tf_msg_insert_em_internal_entry(struct tf *tfp,
178                                     struct tf_insert_em_entry_parms *params,
179                                     uint16_t *rptr_index,
180                                     uint8_t *rptr_entry,
181                                     uint8_t *num_of_entries);
182 /**
183  * Sends EM internal delete request to Firmware
184  *
185  * [in] tfp
186  *   Pointer to TF handle
187  *
188  * [in] em_parms
189  *   Pointer to em delete parameters
190  *
191  * Returns:
192  *   0 on Success else internal Truflow error
193  */
194 int tf_msg_delete_em_entry(struct tf *tfp,
195                            struct tf_delete_em_entry_parms *em_parms);
196
197 /**
198  * Sends EM mem register request to Firmware
199  *
200  * [in] tfp
201  *   Pointer to TF handle
202  *
203  * [in] page_lvl
204  *   Page level
205  *
206  * [in] page_size
207  *   Page size
208  *
209  * [in] dma_addr
210  *   DMA Address for the memory page
211  *
212  * [in] ctx_id
213  *   Context id
214  *
215  * Returns:
216  *   0 on Success else internal Truflow error
217  */
218 int tf_msg_em_mem_rgtr(struct tf *tfp,
219                        int page_lvl,
220                        int page_size,
221                        uint64_t dma_addr,
222                        uint16_t *ctx_id);
223
224 /**
225  * Sends EM mem unregister request to Firmware
226  *
227  * [in] tfp
228  *   Pointer to TF handle
229  *
230  * [in] ctx_id
231  *   Context id
232  *
233  * Returns:
234  *   0 on Success else internal Truflow error
235  */
236 int tf_msg_em_mem_unrgtr(struct tf *tfp,
237                          uint16_t *ctx_id);
238
239 /**
240  * Sends EM qcaps request to Firmware
241  *
242  * [in] tfp
243  *   Pointer to TF handle
244  *
245  * [in] dir
246  *   Receive or Transmit direction
247  *
248  * [in] em_caps
249  *   Pointer to EM capabilities
250  *
251  * Returns:
252  *   0 on Success else internal Truflow error
253  */
254 int tf_msg_em_qcaps(struct tf *tfp,
255                     int dir,
256                     struct tf_em_caps *em_caps);
257
258 /**
259  * Sends EM config request to Firmware
260  *
261  * [in] tfp
262  *   Pointer to TF handle
263  *
264  * [in] num_entries
265  *   EM Table, key 0, number of entries to configure
266  *
267  * [in] key0_ctx_id
268  *   EM Table, Key 0 context id
269  *
270  * [in] key1_ctx_id
271  *   EM Table, Key 1 context id
272  *
273  * [in] record_ctx_id
274  *   EM Table, Record context id
275  *
276  * [in] efc_ctx_id
277  *   EM Table, EFC Table context id
278  *
279  * [in] flush_interval
280  *   Flush pending HW cached flows every 1/10th of value set in
281  *   seconds, both idle and active flows are flushed from the HW
282  *   cache. If set to 0, this feature will be disabled.
283  *
284  * [in] dir
285  *   Receive or Transmit direction
286  *
287  * Returns:
288  *   0 on Success else internal Truflow error
289  */
290 int tf_msg_em_cfg(struct tf *tfp,
291                   uint32_t num_entries,
292                   uint16_t key0_ctx_id,
293                   uint16_t key1_ctx_id,
294                   uint16_t record_ctx_id,
295                   uint16_t efc_ctx_id,
296                   uint8_t flush_interval,
297                   int dir);
298
299 /**
300  * Sends EM operation request to Firmware
301  *
302  * [in] tfp
303  *   Pointer to TF handle
304  *
305  * [in] dir
306  *   Receive or Transmit direction
307  *
308  * [in] op
309  *   CFA Operator
310  *
311  * Returns:
312  *   0 on Success else internal Truflow error
313  */
314 int tf_msg_em_op(struct tf *tfp,
315                  int dir,
316                  uint16_t op);
317
318 /**
319  * Sends tcam entry 'set' to the Firmware.
320  *
321  * [in] tfp
322  *   Pointer to session handle
323  *
324  * [in] parms
325  *   Pointer to set parameters
326  *
327  * Returns:
328  *  0 on Success else internal Truflow error
329  */
330 int tf_msg_tcam_entry_set(struct tf *tfp,
331                           struct tf_tcam_set_parms *parms);
332
333 /**
334  * Sends tcam entry 'free' to the Firmware.
335  *
336  * [in] tfp
337  *   Pointer to session handle
338  *
339  * [in] parms
340  *   Pointer to free parameters
341  *
342  * Returns:
343  *  0 on Success else internal Truflow error
344  */
345 int tf_msg_tcam_entry_free(struct tf *tfp,
346                            struct tf_tcam_free_parms *parms);
347
348 /**
349  * Sends Set message of a Table Type element to the firmware.
350  *
351  * [in] tfp
352  *   Pointer to session handle
353  *
354  * [in] dir
355  *   Direction location of the element to set
356  *
357  * [in] hcapi_type
358  *   Type of the object to set
359  *
360  * [in] size
361  *   Size of the data to set
362  *
363  * [in] data
364  *   Data to set
365  *
366  * [in] index
367  *   Index to set
368  *
369  * Returns:
370  *   0 - Success
371  */
372 int tf_msg_set_tbl_entry(struct tf *tfp,
373                          enum tf_dir dir,
374                          uint16_t hcapi_type,
375                          uint16_t size,
376                          uint8_t *data,
377                          uint32_t index);
378
379 /**
380  * Sends get message of a Table Type element to the firmware.
381  *
382  * [in] tfp
383  *   Pointer to session handle
384  *
385  * [in] dir
386  *   Direction location of the element to get
387  *
388  * [in] hcapi_type
389  *   Type of the object to get
390  *
391  * [in] size
392  *   Size of the data read
393  *
394  * [in] data
395  *   Data read
396  *
397  * [in] index
398  *   Index to get
399  *
400  * Returns:
401  *   0 - Success
402  */
403 int tf_msg_get_tbl_entry(struct tf *tfp,
404                          enum tf_dir dir,
405                          uint16_t hcapi_type,
406                          uint16_t size,
407                          uint8_t *data,
408                          uint32_t index);
409
410 /* HWRM Tunneled messages */
411
412 /**
413  * Sends bulk get message of a Table Type element to the firmware.
414  *
415  * [in] tfp
416  *   Pointer to session handle
417  *
418  * [in] parms
419  *   Pointer to table get bulk parameters
420  *
421  * Returns:
422  *  0 on Success else internal Truflow error
423  */
424 int tf_msg_bulk_get_tbl_entry(struct tf *tfp,
425                           struct tf_bulk_get_tbl_entry_parms *parms);
426
427 #endif  /* _TF_MSG_H_ */