1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2019-2020 Broadcom
10 #include "tf_session.h"
12 #define TF_HACK_TBL_SCOPE_BASE 68
13 #define SUPPORT_CFA_HW_P4 1
14 #define SUPPORT_CFA_HW_P58 0
15 #define SUPPORT_CFA_HW_P59 0
16 #define SUPPORT_CFA_HW_ALL 0
18 #include "hcapi/hcapi_cfa_defs.h"
20 #define TF_HW_EM_KEY_MAX_SIZE 52
21 #define TF_EM_KEY_RECORD_SIZE 64
23 #define TF_EM_MAX_MASK 0x7FFF
24 #define TF_EM_MAX_ENTRY (128 * 1024 * 1024)
34 * E = Entry (bucket inndex)
36 #define TF_EM_INTERNAL_INDEX_SHIFT 2
37 #define TF_EM_INTERNAL_INDEX_MASK 0xFFFC
38 #define TF_EM_INTERNAL_ENTRY_MASK 0x3
41 * Each EM entry is 512-bit (64-bytes) but ordered differently to
44 struct tf_em_64b_entry {
45 /** Header is 8 bytes long */
46 struct cfa_p4_eem_entry_hdr hdr;
47 /** Key is 448 bits - 56 bytes */
48 uint8_t key[TF_EM_KEY_RECORD_SIZE - sizeof(struct cfa_p4_eem_entry_hdr)];
55 TF_EEM_MEM_TYPE_INVALID,
57 TF_EEM_MEM_TYPE_SYSTEM
61 * tf_em_cfg_parms definition
63 struct tf_em_cfg_parms {
65 * [in] Num entries in resource config
67 uint16_t num_elements;
69 * [in] Resource config
71 struct tf_rm_element_cfg *cfg;
73 * Session resource allocations
75 struct tf_session_resources *resources;
79 enum tf_mem_type mem_type;
85 * @ref tf_alloc_eem_tbl_scope
87 * @ref tf_free_eem_tbl_scope_cb
89 * @ref tbl_scope_cb_find
93 * Allocates EEM Table scope
96 * Pointer to TruFlow handle
99 * Pointer to input parameters
103 * -EINVAL - Parameter error
104 * -ENOMEM - Out of memory
106 int tf_alloc_eem_tbl_scope(struct tf *tfp,
107 struct tf_alloc_tbl_scope_parms *parms);
110 * Free's EEM Table scope control block
113 * Pointer to TruFlow handle
116 * Pointer to input parameters
120 * -EINVAL - Parameter error
122 int tf_free_eem_tbl_scope_cb(struct tf *tfp,
123 struct tf_free_tbl_scope_parms *parms);
126 * Insert record in to internal EM table
129 * Pointer to TruFlow handle
132 * Pointer to input parameters
136 * -EINVAL - Parameter error
138 int tf_em_insert_int_entry(struct tf *tfp,
139 struct tf_insert_em_entry_parms *parms);
142 * Delete record from internal EM table
145 * Pointer to TruFlow handle
148 * Pointer to input parameters
152 * -EINVAL - Parameter error
154 int tf_em_delete_int_entry(struct tf *tfp,
155 struct tf_delete_em_entry_parms *parms);
158 * Insert record in to external EEM table
161 * Pointer to TruFlow handle
164 * Pointer to input parameters
168 * -EINVAL - Parameter error
170 int tf_em_insert_ext_entry(struct tf *tfp,
171 struct tf_insert_em_entry_parms *parms);
174 * Insert record from external EEM table
177 * Pointer to TruFlow handle
180 * Pointer to input parameters
184 * -EINVAL - Parameter error
186 int tf_em_delete_ext_entry(struct tf *tfp,
187 struct tf_delete_em_entry_parms *parms);
190 * Insert record in to external system EEM table
193 * Pointer to TruFlow handle
196 * Pointer to input parameters
200 * -EINVAL - Parameter error
202 int tf_em_insert_ext_sys_entry(struct tf *tfp,
203 struct tf_insert_em_entry_parms *parms);
206 * Delete record from external system EEM table
209 * Pointer to TruFlow handle
212 * Pointer to input parameters
216 * -EINVAL - Parameter error
218 int tf_em_delete_ext_sys_entry(struct tf *tfp,
219 struct tf_delete_em_entry_parms *parms);
222 * Bind internal EM device interface
225 * Pointer to TruFlow handle
228 * Pointer to input parameters
232 * -EINVAL - Parameter error
234 int tf_em_int_bind(struct tf *tfp,
235 struct tf_em_cfg_parms *parms);
238 * Unbind internal EM device interface
241 * Pointer to TruFlow handle
244 * Pointer to input parameters
248 * -EINVAL - Parameter error
250 int tf_em_int_unbind(struct tf *tfp);
253 * Common bind for EEM device interface. Used for both host and
257 * Pointer to TruFlow handle
260 * Pointer to input parameters
264 * -EINVAL - Parameter error
266 int tf_em_ext_common_bind(struct tf *tfp,
267 struct tf_em_cfg_parms *parms);
270 * Common unbind for EEM device interface. Used for both host and
274 * Pointer to TruFlow handle
277 * Pointer to input parameters
281 * -EINVAL - Parameter error
283 int tf_em_ext_common_unbind(struct tf *tfp);
286 * Alloc for external EEM using host memory
289 * Pointer to TruFlow handle
292 * Pointer to input parameters
296 * -EINVAL - Parameter error
298 int tf_em_ext_host_alloc(struct tf *tfp,
299 struct tf_alloc_tbl_scope_parms *parms);
302 * Free for external EEM using host memory
305 * Pointer to TruFlow handle
308 * Pointer to input parameters
312 * -EINVAL - Parameter error
314 int tf_em_ext_host_free(struct tf *tfp,
315 struct tf_free_tbl_scope_parms *parms);
318 * Alloc for external EEM using system memory
321 * Pointer to TruFlow handle
324 * Pointer to input parameters
328 * -EINVAL - Parameter error
330 int tf_em_ext_system_alloc(struct tf *tfp,
331 struct tf_alloc_tbl_scope_parms *parms);
334 * Free for external EEM using system memory
337 * Pointer to TruFlow handle
340 * Pointer to input parameters
344 * -EINVAL - Parameter error
346 int tf_em_ext_system_free(struct tf *tfp,
347 struct tf_free_tbl_scope_parms *parms);
350 * Common free for external EEM using host or system memory
353 * Pointer to TruFlow handle
356 * Pointer to input parameters
360 * -EINVAL - Parameter error
362 int tf_em_ext_common_free(struct tf *tfp,
363 struct tf_free_tbl_scope_parms *parms);
366 * Common alloc for external EEM using host or system memory
369 * Pointer to TruFlow handle
372 * Pointer to input parameters
376 * -EINVAL - Parameter error
378 int tf_em_ext_common_alloc(struct tf *tfp,
379 struct tf_alloc_tbl_scope_parms *parms);
380 #endif /* _TF_EM_H_ */