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