net/bnxt: add shadow table capability with search
[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_tcam.h"
15 #include "tf_global_cfg.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                         uint8_t *fw_session_client_id);
40
41 /**
42  * Sends session close request to Firmware
43  *
44  * [in] session
45  *   Pointer to session handle
46  *
47  * [in] ctrl_chan_name
48  *   PCI name of the control channel
49  *
50  * [in] fw_session_id
51  *   Pointer to the fw_session_id that is assigned to the session at
52  *   time of session open
53  *
54  * Returns:
55  *   0 on Success else internal Truflow error
56  */
57 int tf_msg_session_attach(struct tf *tfp,
58                           char *ctrl_channel_name,
59                           uint8_t tf_fw_session_id);
60
61 /**
62  * Sends session client register request to Firmware
63  *
64  * [in] session
65  *   Pointer to session handle
66  *
67  * [in] ctrl_chan_name
68  *   PCI name of the control channel
69  *
70  * [in/out] fw_session_client_id
71  *   Pointer to the fw_session_client_id that is allocated on firmware
72  *   side
73  *
74  * Returns:
75  *   0 on Success else internal Truflow error
76  */
77 int tf_msg_session_client_register(struct tf *tfp,
78                                    char *ctrl_channel_name,
79                                    uint8_t *fw_session_client_id);
80
81 /**
82  * Sends session client unregister request to Firmware
83  *
84  * [in] session
85  *   Pointer to session handle
86  *
87  * [in/out] fw_session_client_id
88  *   Pointer to the fw_session_client_id that is allocated on firmware
89  *   side
90  *
91  * Returns:
92  *   0 on Success else internal Truflow error
93  */
94 int tf_msg_session_client_unregister(struct tf *tfp,
95                                      uint8_t fw_session_client_id);
96
97 /**
98  * Sends session close request to Firmware
99  *
100  * [in] session
101  *   Pointer to session handle
102  *
103  * Returns:
104  *   0 on Success else internal Truflow error
105  */
106 int tf_msg_session_close(struct tf *tfp);
107
108 /**
109  * Sends session query config request to TF Firmware
110  *
111  * [in] session
112  *   Pointer to session handle
113  *
114  * Returns:
115  *   0 on Success else internal Truflow error
116  */
117 int tf_msg_session_qcfg(struct tf *tfp);
118
119 /**
120  * Sends session HW resource query capability request to TF Firmware
121  *
122  * [in] tfp
123  *   Pointer to TF handle
124  *
125  * [in] dir
126  *   Receive or Transmit direction
127  *
128  * [in] size
129  *   Number of elements in the query. Should be set to the max
130  *   elements for the device type
131  *
132  * [out] query
133  *   Pointer to an array of query elements
134  *
135  * [out] resv_strategy
136  *   Pointer to the reservation strategy
137  *
138  * Returns:
139  *   0 on Success else internal Truflow error
140  */
141 int tf_msg_session_resc_qcaps(struct tf *tfp,
142                               enum tf_dir dir,
143                               uint16_t size,
144                               struct tf_rm_resc_req_entry *query,
145                               enum tf_rm_resc_resv_strategy *resv_strategy);
146
147 /**
148  * Sends session HW resource allocation request to TF Firmware
149  *
150  * [in] tfp
151  *   Pointer to TF handle
152  *
153  * [in] dir
154  *   Receive or Transmit direction
155  *
156  * [in] size
157  *   Number of elements in the req and resv arrays
158  *
159  * [in] req
160  *   Pointer to an array of request elements
161  *
162  * [in] resv
163  *   Pointer to an array of reserved elements
164  *
165  * Returns:
166  *   0 on Success else internal Truflow error
167  */
168 int tf_msg_session_resc_alloc(struct tf *tfp,
169                               enum tf_dir dir,
170                               uint16_t size,
171                               struct tf_rm_resc_req_entry *request,
172                               struct tf_rm_resc_entry *resv);
173
174 /**
175  * Sends session resource flush request to TF Firmware
176  *
177  * [in] tfp
178  *   Pointer to TF handle
179  *
180  * [in] dir
181  *   Receive or Transmit direction
182  *
183  * [in] size
184  *   Number of elements in the req and resv arrays
185  *
186  * [in] resv
187  *   Pointer to an array of reserved elements that needs to be flushed
188  *
189  * Returns:
190  *   0 on Success else internal Truflow error
191  */
192 int tf_msg_session_resc_flush(struct tf *tfp,
193                               enum tf_dir dir,
194                               uint16_t size,
195                               struct tf_rm_resc_entry *resv);
196 /**
197  * Sends EM internal insert request to Firmware
198  *
199  * [in] tfp
200  *   Pointer to TF handle
201  *
202  * [in] params
203  *   Pointer to em insert parameter list
204  *
205  * [in] rptr_index
206  *   Record ptr index
207  *
208  * [in] rptr_entry
209  *   Record ptr entry
210  *
211  * [in] num_of_entries
212  *   Number of entries to insert
213  *
214  * Returns:
215  *   0 on Success else internal Truflow error
216  */
217 int tf_msg_insert_em_internal_entry(struct tf *tfp,
218                                     struct tf_insert_em_entry_parms *params,
219                                     uint16_t *rptr_index,
220                                     uint8_t *rptr_entry,
221                                     uint8_t *num_of_entries);
222 /**
223  * Sends EM internal delete request to Firmware
224  *
225  * [in] tfp
226  *   Pointer to TF handle
227  *
228  * [in] em_parms
229  *   Pointer to em delete parameters
230  *
231  * Returns:
232  *   0 on Success else internal Truflow error
233  */
234 int tf_msg_delete_em_entry(struct tf *tfp,
235                            struct tf_delete_em_entry_parms *em_parms);
236
237 /**
238  * Sends EM mem register request to Firmware
239  *
240  * [in] tfp
241  *   Pointer to TF handle
242  *
243  * [in] page_lvl
244  *   Page level
245  *
246  * [in] page_size
247  *   Page size
248  *
249  * [in] dma_addr
250  *   DMA Address for the memory page
251  *
252  * [in] ctx_id
253  *   Context id
254  *
255  * Returns:
256  *   0 on Success else internal Truflow error
257  */
258 int tf_msg_em_mem_rgtr(struct tf *tfp,
259                        int page_lvl,
260                        int page_size,
261                        uint64_t dma_addr,
262                        uint16_t *ctx_id);
263
264 /**
265  * Sends EM mem unregister request to Firmware
266  *
267  * [in] tfp
268  *   Pointer to TF handle
269  *
270  * [in] ctx_id
271  *   Context id
272  *
273  * Returns:
274  *   0 on Success else internal Truflow error
275  */
276 int tf_msg_em_mem_unrgtr(struct tf *tfp,
277                          uint16_t *ctx_id);
278
279 /**
280  * Sends EM qcaps request to Firmware
281  *
282  * [in] tfp
283  *   Pointer to TF handle
284  *
285  * [in] dir
286  *   Receive or Transmit direction
287  *
288  * [in] em_caps
289  *   Pointer to EM capabilities
290  *
291  * Returns:
292  *   0 on Success else internal Truflow error
293  */
294 int tf_msg_em_qcaps(struct tf *tfp,
295                     int dir,
296                     struct tf_em_caps *em_caps);
297
298 /**
299  * Sends EM config request to Firmware
300  *
301  * [in] tfp
302  *   Pointer to TF handle
303  *
304  * [in] num_entries
305  *   EM Table, key 0, number of entries to configure
306  *
307  * [in] key0_ctx_id
308  *   EM Table, Key 0 context id
309  *
310  * [in] key1_ctx_id
311  *   EM Table, Key 1 context id
312  *
313  * [in] record_ctx_id
314  *   EM Table, Record context id
315  *
316  * [in] efc_ctx_id
317  *   EM Table, EFC Table context id
318  *
319  * [in] flush_interval
320  *   Flush pending HW cached flows every 1/10th of value set in
321  *   seconds, both idle and active flows are flushed from the HW
322  *   cache. If set to 0, this feature will be disabled.
323  *
324  * [in] dir
325  *   Receive or Transmit direction
326  *
327  * Returns:
328  *   0 on Success else internal Truflow error
329  */
330 int tf_msg_em_cfg(struct tf *tfp,
331                   uint32_t num_entries,
332                   uint16_t key0_ctx_id,
333                   uint16_t key1_ctx_id,
334                   uint16_t record_ctx_id,
335                   uint16_t efc_ctx_id,
336                   uint8_t flush_interval,
337                   int dir);
338
339 /**
340  * Sends EM operation request to Firmware
341  *
342  * [in] tfp
343  *   Pointer to TF handle
344  *
345  * [in] dir
346  *   Receive or Transmit direction
347  *
348  * [in] op
349  *   CFA Operator
350  *
351  * Returns:
352  *   0 on Success else internal Truflow error
353  */
354 int tf_msg_em_op(struct tf *tfp,
355                  int dir,
356                  uint16_t op);
357
358 /**
359  * Sends tcam entry 'set' to the Firmware.
360  *
361  * [in] tfp
362  *   Pointer to session handle
363  *
364  * [in] parms
365  *   Pointer to set parameters
366  *
367  * Returns:
368  *  0 on Success else internal Truflow error
369  */
370 int tf_msg_tcam_entry_set(struct tf *tfp,
371                           struct tf_tcam_set_parms *parms);
372
373 /**
374  * Sends tcam entry 'free' to the Firmware.
375  *
376  * [in] tfp
377  *   Pointer to session handle
378  *
379  * [in] parms
380  *   Pointer to free parameters
381  *
382  * Returns:
383  *  0 on Success else internal Truflow error
384  */
385 int tf_msg_tcam_entry_free(struct tf *tfp,
386                            struct tf_tcam_free_parms *parms);
387
388 /**
389  * Sends Set message of a Table Type element to the firmware.
390  *
391  * [in] tfp
392  *   Pointer to session handle
393  *
394  * [in] dir
395  *   Direction location of the element to set
396  *
397  * [in] hcapi_type
398  *   Type of the object to set
399  *
400  * [in] size
401  *   Size of the data to set
402  *
403  * [in] data
404  *   Data to set
405  *
406  * [in] index
407  *   Index to set
408  *
409  * Returns:
410  *   0 - Success
411  */
412 int tf_msg_set_tbl_entry(struct tf *tfp,
413                          enum tf_dir dir,
414                          uint16_t hcapi_type,
415                          uint16_t size,
416                          uint8_t *data,
417                          uint32_t index);
418
419 /**
420  * Sends get message of a Table Type element to the firmware.
421  *
422  * [in] tfp
423  *   Pointer to session handle
424  *
425  * [in] dir
426  *   Direction location of the element to get
427  *
428  * [in] hcapi_type
429  *   Type of the object to get
430  *
431  * [in] size
432  *   Size of the data read
433  *
434  * [in] data
435  *   Data read
436  *
437  * [in] index
438  *   Index to get
439  *
440  * Returns:
441  *   0 - Success
442  */
443 int tf_msg_get_tbl_entry(struct tf *tfp,
444                          enum tf_dir dir,
445                          uint16_t hcapi_type,
446                          uint16_t size,
447                          uint8_t *data,
448                          uint32_t index);
449
450 /* HWRM Tunneled messages */
451
452 /**
453  * Sends global cfg read request to Firmware
454  *
455  * [in] tfp
456  *   Pointer to TF handle
457  *
458  * [in] params
459  *   Pointer to read parameters
460  *
461  * Returns:
462  *   0 on Success else internal Truflow error
463  */
464 int tf_msg_get_global_cfg(struct tf *tfp,
465                           struct tf_dev_global_cfg_parms *params);
466
467 /**
468  * Sends global cfg update request to Firmware
469  *
470  * [in] tfp
471  *   Pointer to TF handle
472  *
473  * [in] params
474  *   Pointer to write parameters
475  *
476  * Returns:
477  *   0 on Success else internal Truflow error
478  */
479 int tf_msg_set_global_cfg(struct tf *tfp,
480                           struct tf_dev_global_cfg_parms *params);
481
482 /**
483  * Sends bulk get message of a Table Type element to the firmware.
484  *
485  * [in] tfp
486  *   Pointer to session handle
487  *
488  * [in] parms
489  *   Pointer to table get bulk parameters
490  *
491  * Returns:
492  *  0 on Success else internal Truflow error
493  */
494 int tf_msg_bulk_get_tbl_entry(struct tf *tfp,
495                               enum tf_dir dir,
496                               uint16_t hcapi_type,
497                               uint32_t starting_idx,
498                               uint16_t num_entries,
499                               uint16_t entry_sz_in_bytes,
500                               uint64_t physical_mem_addr);
501
502 /**
503  * Sends Set message of a IF Table Type element to the firmware.
504  *
505  * [in] tfp
506  *   Pointer to session handle
507  *
508  * [in] parms
509  *   Pointer to IF table set parameters
510  *
511  * Returns:
512  *  0 on Success else internal Truflow error
513  */
514 int tf_msg_set_if_tbl_entry(struct tf *tfp,
515                             struct tf_if_tbl_set_parms *params);
516
517 /**
518  * Sends get message of a IF Table Type element to the firmware.
519  *
520  * [in] tfp
521  *   Pointer to session handle
522  *
523  * [in] parms
524  *   Pointer to IF table get parameters
525  *
526  * Returns:
527  *  0 on Success else internal Truflow error
528  */
529 int tf_msg_get_if_tbl_entry(struct tf *tfp,
530                             struct tf_if_tbl_get_parms *params);
531
532 #endif  /* _TF_MSG_H_ */