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