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