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