flexctr.h (11330B)
1 /* 2 * DO NOT EDIT THIS FILE! 3 * This file is auto-generated. 4 * Edits to this file will be lost when it is regenerated. 5 * 6 * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file. 7 * 8 * Copyright 2007-2020 Broadcom Inc. All rights reserved. 9 */ 10 11 #ifndef BCMI_LTSW_FLEXCTR_H 12 #define BCMI_LTSW_FLEXCTR_H 13 14 #include <bcm/flexctr.h> 15 16 #include <sal/sal_types.h> 17 18 /*! Invalid flex counter action. */ 19 #define BCMI_LTSW_FLEXCTR_ACTION_INVALID (0) 20 21 /*! Options internal. */ 22 #define BCMI_LTSW_FLEXCTR_OPTIONS_INTERNAL (1 << 31) 23 24 /*! Ingress flex counter stage. */ 25 #define BCMI_LTSW_FLEXCTR_STAGE_ING_CTR (0x0) 26 27 /*! Egress flex counter stage. */ 28 #define BCMI_LTSW_FLEXCTR_STAGE_EGR_CTR (0x1) 29 30 /*! Flex counter stage count. */ 31 #define BCMI_LTSW_FLEXCTR_STAGE_COUNT (0x2) 32 33 /*! Ingress flex counter. */ 34 #define BCMI_LTSW_FLEXCTR_DIR_INGRESS (0x0) 35 36 /*! Egress flex counter. */ 37 #define BCMI_LTSW_FLEXCTR_DIR_EGRESS (0x1) 38 39 /*! Flex counter direction count. */ 40 #define BCMI_LTSW_FLEXCTR_DIR_COUNT (0x2) 41 42 /*! Maximum packet attribute selector number. */ 43 #define BCMI_LTSW_FLEXCTR_PKT_ATTR_SELECTOR_NUM_MAX (8) 44 45 /*! Maximum packet attribute object instance number. */ 46 #define BCMI_LTSW_FLEXCTR_PKT_ATTR_OBJECT_INSTANCE_NUM_MAX (256) 47 48 /*! 49 * \brief Internal flex counter source. 50 */ 51 typedef enum bcmi_ltsw_flexctr_source_s { 52 53 /*! First internal source. */ 54 bcmiFlexctrSourceStart = 512, 55 56 /*! Dest L2 source. */ 57 bcmiFlexctrSourceL2Dst = 512, 58 59 /*! Src L2 source. */ 60 bcmiFlexctrSourceL2Src = 513, 61 62 /*! Exact match flow tracker. */ 63 bcmiFlexctrSourceEM_FT = 514, 64 65 /*! Last internal source. */ 66 bcmiFlexctrSourceEnd = 515 67 68 } bcmi_ltsw_flexctr_source_t; 69 70 #define BCMI_LTSW_FLEXCTR_SOURCE_STR \ 71 { \ 72 "Start", \ 73 "L2Dst", \ 74 "L2Src", \ 75 "EM_FT", \ 76 "End" \ 77 } 78 79 /*! 80 * \brief Counter informaiton. 81 */ 82 typedef struct bcmi_ltsw_flexctr_counter_info_s { 83 84 /*! Stage id. */ 85 int stage; 86 87 /*! Counter direction. */ 88 int direction; 89 90 /*! Pipeline id. */ 91 int pipe; 92 93 /*! h/w action index. */ 94 uint32_t action_index; 95 96 /*! action profile id. */ 97 uint64_t action_profile_id; 98 99 /*! Source enumeration in HSDK API. */ 100 int source; 101 102 /*! h/w source table name. */ 103 const char *table_name; 104 105 /*! Total counter index number. */ 106 uint32_t index_num; 107 108 /*! First allocated counter pool. */ 109 uint32_t start_pool; 110 111 /*! Last allocated counter pool. */ 112 uint32_t end_pool; 113 114 /*! Flex counter action. */ 115 bcm_flexctr_action_t act_cfg; 116 117 /*! Indicate the specified counter id is a group action id. */ 118 bool group; 119 120 /*! Indicate the specified counter id is a single pipe action. */ 121 bool single_pipe; 122 123 } bcmi_ltsw_flexctr_counter_info_t; 124 125 /*! 126 * \brief Hit control. 127 */ 128 typedef struct bcmi_ltsw_flexctr_hit_ctrl_s { 129 130 /*! Stage id. */ 131 int stage; 132 133 /*! table name. */ 134 const char *tbl_name; 135 136 /*! Dest group action. */ 137 uint32_t dst_grp_id; 138 139 /*! Src group action. */ 140 uint32_t src_grp_id; 141 142 /*! Indicate global action in pipe unique mode. */ 143 bool global; 144 145 /*! Destination action profile ID. */ 146 uint32_t dst_act_profile_id; 147 148 /*! Source action profile ID. */ 149 uint32_t src_act_profile_id; 150 151 } bcmi_ltsw_flexctr_hit_ctrl_t; 152 153 /*! 154 * \brief Flexctr mode. 155 */ 156 typedef enum bcmi_ltsw_flexctr_mode_s { 157 158 /*! Global mode. */ 159 bcmiFlexctrModeGlobal = 0, 160 161 /*! Pipe unique mode. */ 162 bcmiFlexctrModePipeUnique = 1, 163 164 /*! Last one, not valid. */ 165 bcmiFlexctrModeCount = 2 166 167 } bcmi_ltsw_flexctr_mode_t; 168 169 #define BCMI_LTSW_FLEXCTR_MODE_STR \ 170 { \ 171 "Global", \ 172 "PipeUnique" \ 173 } 174 175 /*! 176 * \brief Flex counter stat info. 177 */ 178 typedef struct bcmi_ltsw_flexctr_stat_info_s { 179 180 /*! The maximum num of entries in a flex counter stage. */ 181 uint32_t total_entries; 182 183 /*! The sum of all free entries that can be allocated for a source. */ 184 uint32_t free_entries; 185 186 } bcmi_ltsw_flexctr_stat_info_t; 187 188 /*! 189 * \brief Packet attribute object instance information. 190 */ 191 typedef struct bcmi_ltsw_flexctr_pkt_attr_obj_inst_s { 192 193 /*! Packet attribute object value. */ 194 int object_value; 195 196 /*! Number of packet attribute map entries. */ 197 uint32_t num_entries; 198 199 /*! Packet attribute map entry selector type array. */ 200 int map_entry_type[BCMI_LTSW_FLEXCTR_PKT_ATTR_SELECTOR_NUM_MAX]; 201 202 /*! Packet attribute map entry selector value array. */ 203 uint32_t map_entry_value[BCMI_LTSW_FLEXCTR_PKT_ATTR_SELECTOR_NUM_MAX]; 204 205 } bcmi_ltsw_flexctr_pkt_attr_obj_inst_t; 206 207 /*! 208 * \brief Packet attribute informaiton. 209 */ 210 typedef struct bcmi_ltsw_flexctr_packet_attribute_info_s { 211 212 /*! Stage id. */ 213 int stage; 214 215 /*! Counter direction. */ 216 int direction; 217 218 /*! Pipeline id. */ 219 int pipe; 220 221 /*! H/W packet attribute index. */ 222 uint32_t pkt_attr_index; 223 224 /*! Packet attribute profile id. */ 225 uint64_t pkt_attr_profile_id; 226 227 /*! Maximum packet attribute object instance number. */ 228 uint32_t obj_inst_max; 229 230 /*! Packet attribute object instance array. */ 231 bcmi_ltsw_flexctr_pkt_attr_obj_inst_t obj_inst[BCMI_LTSW_FLEXCTR_PKT_ATTR_OBJECT_INSTANCE_NUM_MAX]; 232 233 } bcmi_ltsw_flexctr_packet_attribute_info_t; 234 235 /*! 236 * \brief Get a counter id information. 237 * 238 * \param [in] unit Unit Number. 239 * \param [in] stat_counter_id Flex counter action identifier. 240 * \param [out] info Counter information. 241 * 242 * \retval SHR_E_NONE No errors. 243 * \retval !SHR_E_NONE Failure. 244 */ 245 extern int 246 bcmi_ltsw_flexctr_counter_id_info_get( 247 int unit, 248 uint32_t stat_counter_id, 249 bcmi_ltsw_flexctr_counter_info_t *info); 250 251 /*! 252 * \brief Update an attached counter id status. 253 * 254 * \param [in] unit Unit Number. 255 * \param [in] stat_counter_id Flex counter action identifier. 256 * 257 * \retval SHR_E_NONE No errors. 258 * \retval !SHR_E_NONE Failure. 259 */ 260 extern int 261 bcmi_ltsw_flexctr_attach_counter_id_status_update( 262 int unit, 263 uint32_t stat_counter_id); 264 265 /*! 266 * \brief Update a detached counter id status. 267 * 268 * \param [in] unit Unit Number. 269 * \param [in] stat_counter_id Flex counter action identifier. 270 * 271 * \retval SHR_E_NONE No errors. 272 * \retval !SHR_E_NONE Failure. 273 */ 274 extern int 275 bcmi_ltsw_flexctr_detach_counter_id_status_update( 276 int unit, 277 uint32_t stat_counter_id); 278 279 /*! 280 * \brief Get a flex counter stat counter id. 281 * 282 * \param [in] unit Unit Number. 283 * \param [in] info Counter information. 284 * \param [out] stat_counter_id Flex counter action identifier. 285 * 286 * \retval SHR_E_NONE No errors. 287 * \retval !SHR_E_NONE Failure. 288 */ 289 extern int 290 bcmi_ltsw_flexctr_counter_id_get( 291 int unit, 292 bcmi_ltsw_flexctr_counter_info_t *info, 293 uint32_t *stat_counter_id); 294 295 /*! 296 * \brief Hit control update. 297 * 298 * \param [in] unit Unit Number. 299 * \param [in] ctrl Hit control. 300 * 301 * \retval SHR_E_NONE No errors. 302 * \retval !SHR_E_NONE Failure. 303 */ 304 extern int 305 bcmi_ltsw_flexctr_hit_control_update( 306 int unit, 307 bcmi_ltsw_flexctr_hit_ctrl_t *ctrl); 308 309 /*! 310 * \brief Flex counter action update. 311 * 312 * \param [in] unit Unit Number. 313 * \param [in] stat_counter_id Flex counter action identifier. 314 * \param [in] act_cfg Flex counter action. 315 * 316 * \retval SHR_E_NONE No errors. 317 * \retval !SHR_E_NONE Failure. 318 */ 319 extern int 320 bcmi_ltsw_flexctr_action_update( 321 int unit, 322 uint32_t stat_counter_id, 323 bcm_flexctr_action_t *act_cfg); 324 325 /*! 326 * \brief Update flex counter info for field group. 327 * 328 * \param [in] unit Unit Number. 329 * \param [in] source Flex counter source. 330 * \param [in] group_id Field group id. 331 * \param [in] old_pri Old priority. 332 * \param [in] new_pri New priority. 333 * 334 * \retval SHR_E_NONE No errors. 335 * \retval !SHR_E_NONE Failure. 336 */ 337 extern int 338 bcmi_ltsw_flexctr_field_group_update( 339 int unit, 340 bcm_flexctr_source_t source, 341 int group_id, 342 int old_pri, 343 int new_pri); 344 345 /*! 346 * \brief Get flexctr mode. 347 * 348 * \param [in] unit Unit Number. 349 * \param [in] egr Egress or ingress pipeline, 1 for egress. 350 * \param [out] mode Flexctr mode. 351 * 352 * \retval SHR_E_NONE No errors. 353 * \retval !SHR_E_NONE Failure. 354 */ 355 extern int 356 bcmi_ltsw_flexctr_mode_get( 357 int unit, 358 bool egr, 359 bcmi_ltsw_flexctr_mode_t *mode); 360 361 /*! 362 * \brief Retrieve flex counter info like total entries num, free entries num for a source. 363 * 364 * \param [in] unit Unit Number. 365 * \param [in] source Flexctr source. 366 * \param [in] pipe Pipe id. -1 indicates global. 367 * \param [out] info Flex counter stat info. 368 * 369 * \retval SHR_E_NONE No errors. 370 * \retval !SHR_E_NONE Failure. 371 */ 372 extern int 373 bcmi_ltsw_flexctr_stat_info_get( 374 int unit, 375 bcm_flexctr_source_t source, 376 int pipe, 377 bcmi_ltsw_flexctr_stat_info_t *info); 378 379 /*! 380 * \brief Get a packet attribute profile id information. 381 * 382 * \param [in] unit Unit Number. 383 * \param [in] profile_id Flex counter action identifier. 384 * \param [out] info Packet attribute information. 385 * 386 * \retval SHR_E_NONE No errors. 387 * \retval !SHR_E_NONE Failure. 388 */ 389 extern int 390 bcmi_ltsw_flexctr_packet_attribute_id_info_get( 391 int unit, 392 int profile_id, 393 bcmi_ltsw_flexctr_packet_attribute_info_t *info); 394 395 /*! 396 * \brief Dump flexctr module sw information. 397 * 398 * \param [in] unit Unit Number. 399 * 400 * \retval SHR_E_NONE No errors. 401 * \retval !SHR_E_NONE Failure. 402 */ 403 extern int 404 bcmi_ltsw_flexctr_sw_dump(int unit); 405 406 /*! 407 * \brief Flex counter group action get function. 408 * 409 * \param [in] unit Unit Number. 410 * \param [in] group_stat_counter_id Flex counter group ID. 411 * \param [out] group_action Flex counter group action data structure. 412 * 413 * \retval SHR_E_NONE No errors. 414 * \retval !SHR_E_NONE Failure. 415 */ 416 extern int 417 bcmi_ltsw_flexctr_group_action_get( 418 int unit, 419 uint32_t group_stat_counter_id, 420 bcm_flexctr_group_action_t *group_action); 421 422 /*! 423 * \brief Flex counter action is a single pipe action. Return value: 1 for yes, 0 for no, others indicate error. 424 * 425 * \param [in] unit Unit Number. 426 * \param [in] stage Flex counter stage id. 427 * \param [in] action_index Hardware action index. 428 * 429 * \retval SHR_E_NONE No errors. 430 * \retval !SHR_E_NONE Failure. 431 */ 432 extern int 433 bcmi_ltsw_flexctr_action_is_single_pipe( 434 int unit, 435 int stage, 436 uint32_t action_index); 437 438 /*! 439 * \brief Get field opaque object value for specific flex counter action and counter index. 440 * 441 * \param [in] unit Unit Number. 442 * \param [in] stat_counter_id Flex counter action identifier. 443 * \param [in] counter_index Flex counter index. 444 * \param [in] size Element number of object value array. 445 * \param [out] obj_val Object value array. 446 * 447 * \retval SHR_E_NONE No errors. 448 * \retval !SHR_E_NONE Failure. 449 */ 450 extern int 451 bcmi_ltsw_flexctr_field_opaque_object_value_get( 452 int unit, 453 uint32_t stat_counter_id, 454 uint32_t counter_index, 455 uint32_t size, 456 uint32_t *obj_val); 457 458 /*! 459 * \brief Egress flex counter pre-select set. 460 * 461 * \param [in] unit Unit Number. 462 * \param [in] val Pre-select value. 463 * 464 * \retval SHR_E_NONE No errors. 465 * \retval !SHR_E_NONE Failure. 466 */ 467 extern int 468 bcmi_ltsw_flexctr_egr_presel_set( 469 int unit, 470 int val); 471 472 /*! 473 * \brief Egress flex counter pre-select get. 474 * 475 * \param [in] unit Unit Number. 476 * \param [out] val Pre-select value. 477 * 478 * \retval SHR_E_NONE No errors. 479 * \retval !SHR_E_NONE Failure. 480 */ 481 extern int 482 bcmi_ltsw_flexctr_egr_presel_get( 483 int unit, 484 int *val); 485 486 #endif /* BCMI_LTSW_FLEXCTR_H */