xref: /dpdk/drivers/net/bnxt/tf_core/tf_em.h (revision aa49b38fa7c350da251b70f455224ae8e3f79d0b)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2019-2023 Broadcom
3  * All rights reserved.
4  */
5 
6 #ifndef _TF_EM_H_
7 #define _TF_EM_H_
8 
9 #include "tf_core.h"
10 #include "tf_session.h"
11 #include "tf_em_common.h"
12 
13 #include "hcapi_cfa_defs.h"
14 
15 #define TF_P4_HW_EM_KEY_MAX_SIZE 52
16 #define TF_P4_EM_KEY_RECORD_SIZE 64
17 
18 #define TF_P58_HW_EM_KEY_MAX_SIZE 80
19 
20 /*
21  * Used to build GFID:
22  *
23  *   15           2  0
24  *  +--------------+--+
25  *  |   Index      |E |
26  *  +--------------+--+
27  *
28  * E = Entry (bucket index)
29  */
30 #define TF_EM_INTERNAL_INDEX_SHIFT 2
31 #define TF_EM_INTERNAL_INDEX_MASK 0xFFFC
32 #define TF_EM_INTERNAL_ENTRY_MASK  0x3
33 
34 
35 /** EEM Memory Type
36  *
37  */
38 enum tf_mem_type {
39 	TF_EEM_MEM_TYPE_INVALID,
40 	TF_EEM_MEM_TYPE_HOST,
41 	TF_EEM_MEM_TYPE_SYSTEM
42 };
43 
44 /**
45  * tf_em_cfg_parms definition
46  */
47 struct tf_em_cfg_parms {
48 	/**
49 	 * [in] Num entries in resource config
50 	 */
51 	uint16_t num_elements;
52 	/**
53 	 * [in] Resource config
54 	 */
55 	struct tf_rm_element_cfg *cfg;
56 	/**
57 	 * Session resource allocations
58 	 */
59 	struct tf_session_resources *resources;
60 	/**
61 	 * [in] Memory type.
62 	 */
63 	enum tf_mem_type mem_type;
64 };
65 
66 /** EM Entry
67  *  Each EM entry is 512-bit (64-bytes) but ordered differently to
68  *  EEM.
69  */
70 struct tf_em_64b_entry {
71 	/** Header is 8 bytes long */
72 	struct cfa_p4_eem_entry_hdr hdr;
73 	/** Key is 448 bits - 56 bytes */
74 	uint8_t key[TF_P4_EM_KEY_RECORD_SIZE - sizeof(struct cfa_p4_eem_entry_hdr)];
75 };
76 
77 /**
78  * EM database
79  *
80  * EM rm database
81  *
82  */
83 struct em_rm_db {
84 	struct rm_db *em_db[TF_DIR_MAX];
85 };
86 
87 /**
88  * @page em EM
89  *
90  * @ref tf_alloc_eem_tbl_scope
91  *
92  * @ref tf_free_eem_tbl_scope_cb
93  *
94  * @ref tf_em_insert_int_entry
95  *
96  * @ref tf_em_delete_int_entry
97  *
98  * @ref tf_em_insert_ext_entry DEFUNCT
99  *
100  * @ref tf_em_delete_ext_entry DEFUNCT
101  *
102  * @ref tf_em_insert_ext_sys_entry DEFUNCT
103  *
104  * @ref tf_em_delete_ext_sys_entry DEFUNCT
105  *
106  * @ref tf_em_int_bind
107  *
108  * @ref tf_em_int_unbind
109  *
110  * @ref tf_em_ext_common_bind DEFUNCT
111  *
112  * @ref tf_em_ext_common_unbind DEFUNCT
113  *
114  * @ref tf_em_ext_host_alloc DEFUNCT
115  *
116  * @ref tf_em_ext_host_free DEFUNCT
117  *
118  * @ref tf_em_ext_system_alloc DEFUNCT
119  *
120  * @ref tf_em_ext_system_free DEFUNCT
121  *
122  * @ref tf_em_ext_common_free DEFUNCT
123  *
124  * @ref tf_em_ext_common_alloc DEFUNCT
125  */
126 
127 /**
128  * Insert record in to internal EM table
129  *
130  * [in] tfp
131  *   Pointer to TruFlow handle
132  *
133  * [in] parms
134  *   Pointer to input parameters
135  *
136  * Returns:
137  *   0       - Success
138  *   -EINVAL - Parameter error
139  */
140 int tf_em_insert_int_entry(struct tf *tfp,
141 			   struct tf_insert_em_entry_parms *parms);
142 
143 /**
144  * Delete record from internal EM table
145  *
146  * [in] tfp
147  *   Pointer to TruFlow handle
148  *
149  * [in] parms
150  *   Pointer to input parameters
151  *
152  * Returns:
153  *   0       - Success
154  *   -EINVAL - Parameter error
155  */
156 int tf_em_delete_int_entry(struct tf *tfp,
157 			   struct tf_delete_em_entry_parms *parms);
158 
159 /**
160  * Insert record in to internal EM table
161  *
162  * [in] tfp
163  *   Pointer to TruFlow handle
164  *
165  * [in] parms
166  *   Pointer to input parameters
167  *
168  * Returns:
169  *   0       - Success
170  *   -EINVAL - Parameter error
171  */
172 int tf_em_hash_insert_int_entry(struct tf *tfp,
173 				struct tf_insert_em_entry_parms *parms);
174 
175 /**
176  * Delete record from internal EM table
177  *
178  * [in] tfp
179  *   Pointer to TruFlow handle
180  *
181  * [in] parms
182  *   Pointer to input parameters
183  *
184  * Returns:
185  *   0       - Success
186  *   -EINVAL - Parameter error
187  */
188 int tf_em_hash_delete_int_entry(struct tf *tfp,
189 				struct tf_delete_em_entry_parms *parms);
190 
191 /**
192  * Move record from internal EM table
193  *
194  * [in] tfp
195  *   Pointer to TruFlow handle
196  *
197  * [in] parms
198  *   Pointer to input parameters
199  *
200  * Returns:
201  *   0       - Success
202  *   -EINVAL - Parameter error
203  */
204 int tf_em_move_int_entry(struct tf *tfp,
205 			 struct tf_move_em_entry_parms *parms);
206 
207 /**
208  * Bind internal EM device interface
209  *
210  * [in] tfp
211  *   Pointer to TruFlow handle
212  *
213  * [in] parms
214  *   Pointer to input parameters
215  *
216  * Returns:
217  *   0       - Success
218  *   -EINVAL - Parameter error
219  */
220 int tf_em_int_bind(struct tf *tfp,
221 		   struct tf_em_cfg_parms *parms);
222 
223 /**
224  * Unbind internal EM device interface
225  *
226  * [in] tfp
227  *   Pointer to TruFlow handle
228  *
229  * [in] parms
230  *   Pointer to input parameters
231  *
232  * Returns:
233  *   0       - Success
234  *   -EINVAL - Parameter error
235  */
236 int tf_em_int_unbind(struct tf *tfp);
237 
238 /**
239  * Retrieves the allocated resource info
240  *
241  * [in] tfp
242  *   Pointer to TF handle, used for HCAPI communication
243  *
244  * [in] parms
245  *   Pointer to parameters
246  *
247  * Returns
248  *   - (0) if successful.
249  *   - (-EINVAL) on failure.
250  */
251 int
252 tf_em_get_resc_info(struct tf *tfp,
253 		    struct tf_em_resource_info *em);
254 #endif /* _TF_EM_H_ */
255