flow_db.h (13740B)
1 /* 2 * 3 * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file. 4 * 5 * Copyright 2007-2019 Broadcom Inc. All rights reserved. 6 * 7 * File: flow_db.h 8 * Purpose: Header file for flow database module 9 */ 10 #ifndef FLOW_DB_H 11 #define FLOW_DB_H 12 #include <soc/esw/flow_db_enum.h> 13 14 typedef enum soc_flow_db_mem_view_field_type_e { 15 SOC_FLOW_DB_FIELD_TYPE_INVALID = 0, 16 SOC_FLOW_DB_FIELD_TYPE_CONTROL, 17 SOC_FLOW_DB_FIELD_TYPE_KEY, 18 SOC_FLOW_DB_FIELD_TYPE_VALID, 19 SOC_FLOW_DB_FIELD_TYPE_POLICY_DATA, 20 SOC_FLOW_DB_FIELD_TYPE_POLICY_DATA_ENCODING, 21 SOC_FLOW_DB_FIELD_TYPE_LOGICAL_KEY, 22 SOC_FLOW_DB_FIELD_TYPE_LOGICAL_POLICY_DATA, 23 SOC_FLOW_DB_FIELD_TYPE_DATA_FRAGMENT, 24 SOC_FLOW_DB_FIELD_TYPE_MAX 25 } soc_flow_db_mem_view_field_type_t; 26 27 #define BCM_FEILD_TYPE_NAME_INITIALIZER \ 28 { \ 29 "SOC_FLOW_DB_FIELD_TYPE_INVALID",\ 30 "SOC_FLOW_DB_FIELD_TYPE_CONTROL",\ 31 "SOC_FLOW_DB_FIELD_TYPE_KEY",\ 32 "SOC_FLOW_DB_FIELD_TYPE_VALID",\ 33 "SOC_FLOW_DB_FIELD_TYPE_POLICY_DATA",\ 34 "SOC_FLOW_DB_FIELD_TYPE_POLICY_DATA_ENCODING",\ 35 "SOC_FLOW_DB_FIELD_TYPE_LOGICAL_KEY",\ 36 "SOC_FLOW_DB_FIELD_TYPE_LOGICAL_POLICY_DATA",\ 37 "SOC_FLOW_DB_FIELD_TYPE_DATA_FRAGMENT",\ 38 "SOC_FLOW_DB_FIELD_TYPE_MAX",\ 39 } 40 41 42 typedef enum soc_flow_db_mem_view_type_e { 43 SOC_FLOW_DB_VIEW_TYPE_INVALID = 0, 44 SOC_FLOW_DB_VIEW_TYPE_DIRECT, 45 SOC_FLOW_DB_VIEW_TYPE_HASH, 46 SOC_FLOW_DB_VIEW_TYPE_TCAM, 47 SOC_FLOW_DB_VIEW_TYPE_MAX 48 } soc_flow_db_mem_view_type_t; 49 50 51 typedef struct soc_flow_db_mem_view_field_info_s { 52 soc_field_t field_id; /* SOC or SYSTEM unique field ID*/ 53 soc_flow_db_mem_view_field_type_t type; 54 uint16 offset; /* Least bit position of the field */ 55 uint16 v_offset; /* offset within the virtual field */ 56 uint16 width; /* Bits in field */ 57 uint16 flags; /* Logical OR of SOCF_* */ 58 uint32 value; /* Value for fixed fields */ 59 } soc_flow_db_mem_view_field_info_t; 60 61 typedef struct soc_flow_db_mem_view_split_field_info_s { 62 int width; /* user field width */ 63 int num_fld; /* number of split fields */ 64 soc_flow_db_mem_view_field_info_t field[6]; /* split field 65 info */ 66 } soc_flow_db_mem_view_split_field_info_t; 67 68 typedef struct soc_flow_db_mem_view_info_s { 69 uint32 mem_view_id; /* DB mem_view ID */ 70 soc_mem_t mem; /* soc mem ID */ 71 uint32 width; /* Entry Width */ 72 soc_flow_db_mem_view_type_t type; 73 } soc_flow_db_mem_view_info_t; 74 75 typedef struct soc_flow_db_ctrl_field_s{ 76 soc_field_t field_id; 77 uint32 value; 78 } soc_flow_db_ctrl_field_t; 79 80 typedef struct soc_flow_db_ffo_s { 81 uint32 flow_handle; /* flow_handle */ 82 uint32 function_id; /* function_id */ 83 uint32 option_id; /* option_id */ 84 } soc_flow_db_ffo_t; 85 86 /* 87 * Function: 88 * soc_flow_db_flow_handle_get 89 * Purpose: 90 * Get the flow handle 91 * Parameters: 92 * unit - (IN) Unit. 93 * flow_name - (IN) Flow name. 94 * handle - (IN/OUT) Flow hanlde. 95 * Returns: 96 * SOC_E_NONE 97 * SOC_E_XXX 98 */ 99 100 extern int 101 soc_flow_db_flow_handle_get(int unit, 102 const char *flow_name, 103 uint32 *handle); 104 /* 105 * Function: 106 * soc_flow_db_flow_option_id_get 107 * Purpose: 108 * Get the Flow option ID. 109 * Parameters: 110 * unit - (IN) Unit 111 * flow_handle - (IN) Flow hanlde. 112 * flow_option_name - (IN) Flow option name. 113 * option_id - (IN/OUT) Flow Option ID. 114 * Returns: 115 * SOC_E_NONE 116 * SOC_E_XXX 117 */ 118 extern int 119 soc_flow_db_flow_option_id_get(int unit, 120 uint32 flow_handle, 121 const char *flow_option_name, 122 uint32 *option_id); 123 /* 124 * Function: 125 * soc_flow_db_mem_view_entry_init 126 * Purpose: 127 * Initialize the entry buffer. 128 * Parameters: 129 * unit - (IN) Unit 130 * mem_view_id - (IN) Memory view ID. 131 * entry_buf - (IN/OUT) View entry buffer 132 * Returns: 133 * SOC_E_NONE 134 * SOC_E_XXX 135 */ 136 137 extern int 138 soc_flow_db_mem_view_entry_init(int unit, 139 uint32 mem_view_id, 140 uint32 *entry_buf); 141 /* 142 * Function: 143 * soc_flow_db_ffo_to_mem_view_id_get 144 * Purpose: 145 * Given a flow,function,option ID's 146 * get the memory view ID. 147 * Parameters: 148 * unit - (IN) unit 149 * flow_handle - (IN) flow handle 150 * flow_option_id - (IN) flow option id. 151 * function_id - (IN) function id. 152 * mem_view_id - (IN/OUT) list of mem view ID. 153 * Returns: 154 * SOC_E_NONE 155 * SOC_E_XXX 156 */ 157 extern int 158 soc_flow_db_ffo_to_mem_view_id_get(int unit, 159 uint32 flow_handle, 160 uint32 flow_option_id, 161 uint32 function_id, 162 uint32 *mem_view_id); 163 164 /* 165 * Function: 166 * soc_flow_db_mem_view_to_ffo_get 167 * Purpose: 168 * Given a memory view ID get the ffo tuple. 169 * Parameters: 170 * unit - (IN) unit 171 * mem_view_id - (IN) list of mem view ID. 172 * size - (IN) Max array size 173 * ffo - (IN/OUT) ffo tuple 174 * num_ffo_entries - (IN/OUT) num ffo tuples 175 * Returns: 176 * SOC_E_NONE 177 * SOC_E_XXX 178 */ 179 extern int 180 soc_flow_db_mem_view_to_ffo_get(int unit, 181 uint32 mem_view_id, 182 uint32 size, 183 soc_flow_db_ffo_t *ffo, 184 uint32 *num_ffo_entries); 185 186 187 /* 188 * Function: 189 * soc_flow_db_mem_to_view_id_get 190 * Purpose: 191 * Given a memory , key_type, data_type and control_field 192 * list get the view id. 193 * 194 * Parameters: 195 * unit - (IN) unit 196 * mem - (IN) mem 197 * mem_type - (IN) memory type. 198 * key_type - (IN) key type for HASH/TCAM 199 * data_type - (IN) data type for indexed 200 * num_fields - (IN) num of control fields 201 * field_list - (IN) control field list 202 * mem_view_id - (IN/OUT) mem view ID. 203 * Returns: 204 * SOC_E_NONE 205 * SOC_E_XXX 206 */ 207 extern int 208 soc_flow_db_mem_to_view_id_get(int unit, 209 uint32 mem, 210 int key_type, 211 int data_type, 212 int num_fields, 213 soc_flow_db_ctrl_field_t *field_list, 214 uint32 *mem_view_id); 215 216 /* 217 * Function: 218 * soc_flow_db_mem_view_field_list_get 219 * Purpose: 220 * Get the list of field IDs 221 * of specific type such as CONTROL/KEY/ 222 * for a given mem_view ID, field_type parameter is 223 * a classifier. 224 * 225 * Parameters 226 * unit - (IN) unit 227 * mem_view_id - (IN) Memory view ID. 228 * field_type - (IN) field type 229 * size - (IN) Max array size 230 * field_id - (IN/OUT) Field ID list 231 * field_count - (IN.OUT) field count 232 * Returns: 233 * SOC_E_NONE 234 * SOC_E_XXX 235 */ 236 extern int 237 soc_flow_db_mem_view_field_list_get(int unit, 238 uint32 mem_view_id, 239 int field_type, 240 int size, 241 uint32 *field_id, 242 uint32 *field_count); 243 /* 244 * Function: 245 * soc_flow_db_mem_view_field_info_get 246 * Purpose: 247 * Get a field information for a given mem_view ID and field ID. 248 * Parameters: 249 * unit - (IN) unit. 250 * view_id - (IN) Memory mem_view ID. 251 * field_id - (IN) Field ID. 252 * field_info - (OUT) Field information 253 * Returns: 254 * SOC_E_NONE 255 * SOC_E_XXX 256 */ 257 extern int 258 soc_flow_db_mem_view_field_info_get(int unit, 259 uint32 mem_view_id, 260 uint32 field_id, 261 soc_flow_db_mem_view_field_info_t *field_info); 262 263 /* 264 * Function: 265 * soc_flow_db_mem_view_split_field_info_get 266 * Purpose: 267 * Get a split field information for a given mem_view ID and field ID. 268 * Parameters: 269 * unit - (IN) unit. 270 * view_id - (IN) Memory mem_view ID. 271 * field_id - (IN) Field ID. 272 * sf_info - (OUT) split field information 273 * Returns: 274 * SOC_E_NONE 275 * SOC_E_XXX 276 */ 277 extern int 278 soc_flow_db_mem_view_split_field_info_get(int unit, 279 uint32 mem_view_id, 280 uint32 field_id, 281 soc_flow_db_mem_view_split_field_info_t *sf_info); 282 283 /* 284 * Function: 285 * soc_flow_db_mem_view_info_get 286 * Purpose: 287 * Get a mem view information for a given memory view ID 288 * Parameters: 289 * mem_view_id - (IN) Physical table view ID. 290 * mem_view_info - (OUT) Physical table view information. 291 * Returns: 292 * SOC_E_NONE 293 * SOC_E_XXX 294 */ 295 extern int 296 soc_flow_db_mem_view_info_get(int unit, 297 int mem_view_id, 298 soc_flow_db_mem_view_info_t *mem_view_info); 299 300 301 302 /* 303 * Function: 304 * soc_flow_db_mem_view_logical_field_id_get 305 * Purpose: 306 * Given flow handle and logical field name 307 * get the field ID 308 * Parameters: 309 * unit - (IN) unit. 310 * flow_handle - (IN) flow_handle. 311 * logical_field_name - (IN) logical field Name. 312 * field ID - (OUT) field ID. 313 * Returns: 314 * SOC_E_NONE 315 * SOC_E_XXX 316 */ 317 extern int 318 soc_flow_db_mem_view_logical_field_id_get(int unit, 319 uint32 flow_handle, 320 const char *logical_field_name, 321 uint32 *field_id); 322 323 /* 324 * Function: 325 * soc_flow_db_mem_view_field_is_valid 326 * Purpose: 327 * Check if field ID is valid for the view. 328 * Parameters: 329 * unit - (IN) unit. 330 * mem_view_id - (IN) View ID. 331 * field ID - (IN) field ID. 332 * Returns: 333 * TRUE/FALSE 334 */ 335 extern int 336 soc_flow_db_mem_view_field_is_valid(int unit, 337 uint32 mem_view_id, 338 uint32 field_id); 339 extern int 340 soc_flow_db_mem_view_field_is_virtual(int unit, 341 uint32 mem_view_id, 342 uint32 field_id); 343 344 /* 345 * Function: 346 * soc_flow_db_mem_view_is_valid 347 * Purpose: 348 * Check if view index is valid. 349 * Parameters: 350 * unit - (IN) unit. 351 * mem_view_id - (IN) View ID. 352 * Returns: 353 * TRUE/FALSE 354 */ 355 extern int 356 soc_flow_db_mem_view_is_valid(int unit, 357 uint32 mem_view_id); 358 359 360 /* 361 * Function: 362 * soc_flow_db_mem_view_field_name_get 363 * Purpose: 364 * Get the fleld name for view ID and field ID. 365 * Parameters: 366 * unit - (IN) Unit. 367 * mem_view_id - (IN) View ID. 368 * field ID - (IN) field ID. 369 * field_name - (IN/OUT) Field name. 370 * Returns: 371 * SOC_E_NONE 372 * SOC_E_XXX 373 */ 374 375 extern int 376 soc_flow_db_mem_view_field_name_get(int unit, 377 uint32 mem_view_id, 378 uint32 field_id, 379 char **field_name); 380 /* 381 * Function: 382 * soc_flow_db_mem_view_mem_name_get 383 * Purpose: 384 * Get the memory name for view ID. 385 * Parameters: 386 * unit - (IN) Unit. 387 * mem_view_id - (IN) View ID. 388 * mem_name - (IN/OUT) Physical memory name. 389 * Returns: 390 * SOC_E_NONE 391 * SOC_E_XXX 392 */ 393 394 extern int 395 soc_flow_db_mem_view_mem_name_get(int unit, 396 uint32 mem_view_id, 397 char **mem_name); 398 399 /* 400 * Function: 401 * soc_flow_db_mem_view_option_name_get 402 * Purpose: 403 * Get option name given flow handle and option ID. 404 * Parameters: 405 * unit - (IN) Unit. 406 * flow_handle - (IN) Flow handle. 407 * flow_option_id - (IN) Flow option ID. 408 * option_name - (IN/OUT) Flow option name. 409 * Returns: 410 * SOC_E_NONE 411 * SOC_E_XXX 412 */ 413 414 extern int 415 soc_flow_db_mem_view_option_name_get(int unit, 416 uint32 flow_handle, 417 uint32 flow_option_id, 418 char **option_name); 419 /* 420 * Function: 421 * soc_flow_db_mem_view_entry_is_valid 422 * Purpose: 423 * Check if flex view entry is valid 424 * Parameters: 425 * unit - (IN) Unit 426 * mem_view_id - (IN) Memory view ID. 427 * entry_buf - (IN/OUT) View entry buffer 428 * Returns: 429 * TRUE 430 * FALSE 431 */ 432 extern int 433 soc_flow_db_mem_view_entry_is_valid(int unit, 434 uint32 mem_view_id, 435 uint32 *entry_buf); 436 /* 437 * Function: 438 * soc_flow_db_mem_view_flow_handle_valid 439 * Purpose: 440 * Verify the flow handle if valid 441 * Parameters: 442 * unit - (IN) Unit 443 * flow_handle - (IN) Flow handle. 444 * Returns: 445 * SOC_E_NONE 446 * SOC_E_XXX 447 */ 448 449 extern int 450 soc_flow_db_mem_view_flow_handle_valid(int unit, 451 uint32 flow_handle); 452 453 #endif /* FLOW_DB_H */