sat.h (12328B)
1 /** \file bcm_int/dnx/sat/sat.h 2 * 3 * Internal DNX SAT APIs 4 * 5 * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file. 6 * 7 * Copyright 2007-2020 Broadcom Inc. All rights reserved. 8 */ 9 #include <bcm_int/dnx_dispatch.h> 10 #include <shared/shrextend/shrextend_error.h> 11 #include <soc/dnx/dnx_data/auto_generated/dnx_data_max_sat.h> 12 13 #include <soc/dnx/dbal/dbal.h> 14 #include <soc/counter.h> 15 #include <bcm/types.h> 16 #include <bcm_int/common/debug.h> 17 #include <shared/shrextend/shrextend_debug.h> 18 #include <shared/shrextend/shrextend_error.h> 19 #include <bcm_int/dnx_dispatch.h> 20 #include <bcm_int/dnx/algo/algo_gpm.h> 21 #include <bcm_int/dnx/algo/port/algo_port_mgmt.h> 22 #include <soc/dnx/dnx_data/auto_generated/dnx_data_device.h> 23 #include <soc/dnx/dnx_data/auto_generated/dnx_data_sat.h> 24 #include <bcm_int/dnx/algo/sat/algo_sat.h> 25 26 #include <bcm_int/dnx/algo/template_mngr/template_manager_types.h> 27 28 #ifndef SAT_H_INCLUDED__ 29 /* { */ 30 #define SAT_H_INCLUDED__ 31 32 #ifndef BCM_DNX_SUPPORT 33 #error "This file is for use by DNX (JR2) family only!" 34 #endif 35 36 /* 37 * DEFINEs 38 * { 39 */ 40 41 #define DNX_ALGO_TEMPLATE_SAT_PKT_HEADER "TEMPLATE_SAT_PKT_HEADER" 42 #define DNX_SAT_BITS_PER_BYTE (8) 43 #define DNX_SAT_GTF_ID_MIN (0) 44 #define DNX_SAT_GTF_ID_MAX (DNX_DATA_MAX_SAT_GENERATOR_NOF_GTF_IDS - 1) 45 #define DNX_SAT_GTF_PKT_HDR_LEN_MIN (1) 46 #define DNX_SAT_GTF_PKT_HDR_LEN_MAX (DNX_DATA_MAX_SAT_GENERATOR_GTF_PKT_HEADER_MAX_LENGTH - 1) 47 #define DNX_SAT_GTF_PKT_LEN_PATN_INX_MIN (0) 48 #define DNX_SAT_GTF_PKT_LEN_PATN_INX_MAX (DNX_DATA_MAX_SAT_GENERATOR_GTF_PKT_LENGTH_MAX_PATN) 49 #define DNX_SAT_GTF_SEQ_PERIOD_MIN (1) 50 #define DNX_SAT_GTF_SEQ_PERIOD_MAX (DNX_DATA_MAX_SAT_GENERATOR_GTF_MAX_SEQ_PERIOD) 51 #define DNX_SAT_GTF_STAMP_INC_STEP_MIN (1) 52 #define DNX_SAT_GTF_STAMP_INC_STEP_MAX (DNX_DATA_MAX_SAT_GENERATOR_GTF_STAMP_MAX_INC_STEP ) 53 #define DNX_SAT_GTF_STAMP_INC_PERIOD_MIN (0) 54 #define DNX_SAT_GTF_STAMP_INC_PERIOD_MAX (DNX_DATA_MAX_SAT_GENERATOR_GTF_STAMP_MAX_INC_PERIOD) 55 #define DNX_SAT_GTF_STAMP_2_bit_VALUE_MIN (0) 56 #define DNX_SAT_GTF_STAMP_2_bit_VALUE_MAX (0x3) 57 #define DNX_SAT_GTF_STAMP_16_bit_VALUE_MIN (0) 58 #define DNX_SAT_GTF_STAMP_16_bit_VALUE_MAX (0xffff) 59 #define DNX_SAT_GTF_BW_BURST_MIN (0) 60 #define DNX_SAT_GTF_BW_BURST_MAX (DNX_DATA_MAX_SAT_GENERATOR_GTF_BW_MAX_VALUE) 61 #define DNX_SAT_GTF_BW_RATE_MIN (0) 62 #define DNX_SAT_GTF_BW_RATE_MAX (DNX_DATA_MAX_SAT_GENERATOR_GTF_RATE_MAX) 63 #define DNX_SAT_GTF_BW_PPS_RATE_MAX (DNX_DATA_MAX_SAT_GENERATOR_GTF_PPS_RATE_MAX) 64 #define DNX_SAT_GTF_RATE_PATN_HIGH_TH_MIN (1) 65 #define DNX_SAT_GTF_RATE_PATN_HIGH_TH_MAX (DNX_DATA_MAX_SAT_GENERATOR_GTF_RATE_MAX) 66 #define DNX_SAT_GTF_RATE_PATN_LOW_TH_MIN (1) 67 #define DNX_SAT_GTF_RATE_PATN_LOW_TH_MAX (DNX_DATA_MAX_SAT_GENERATOR_GTF_RATE_MAX) 68 #define DNX_SAT_PKT_HEADER_DEFAULT_PROFILE (0) 69 #define DNX_SAT_DEFAULT_CREDIT_BACKPRESSURE (8) 70 #define DNX_SAT_GTF_SEQ_NUM_DISABLE (-1) 71 #define DNX_SAT_GTF_PACKET_LENGTH_NUM_OF_PATTERNS (8) 72 #define DNX_SAT_GTF_PACKET_LENGTH_MIN (65) 73 #define DNX_SAT_BPS_MODE 0x1 74 #define DNX_SAT_PPS_MODE 0x2 75 76 #define DNX_SAT_CTF_ID_MIN (0) 77 #define DNX_SAT_CTF_ID_MAX (DNX_DATA_MAX_SAT_COLLECTOR_NOF_CTF_IDS - 1) 78 #define DNX_SAT_CTF_ID_HALF (DNX_DATA_MAX_SAT_COLLECTOR_NOF_CTF_IDS/2) 79 #define DNX_SAT_CTF_OAM_ID_MIN (0) 80 #define DNX_SAT_CTF_OAM_ID_MAX (DNX_DATA_MAX_SAT_COLLECTOR_NOF_OAM_IDS - 1) 81 #define DNX_SAT_PKT_HERDER_SIZE (DNX_DATA_MAX_SAT_GENERATOR_GTF_PKT_HEADER_MAX_LENGTH/4) 82 #define DNX_SAT_PKT_HERDER_LSB_FIELD_SIZE (DNX_SAT_PKT_HERDER_SIZE/2) 83 #define DNX_SAT_PKT_HERDER_MSB_FIELD_SIZE (DNX_SAT_PKT_HERDER_SIZE/2) 84 #define DNX_SAT_CTF_TRAP_ID_MIN (0) 85 #define DNX_SAT_CTF_TRAP_ID_MAX (2) 86 #define DNX_SAT_CTF_COLOR_MIN (0) 87 #define DNX_SAT_CTF_COLOR_MAX (3) 88 #define DNX_SAT_CTF_COS_MIN (0) 89 #define DNX_SAT_CTF_COS_MAX (7) 90 #define DNX_SAT_CTF_TRAP_ID_UNSET_VAL (0x0) 91 #define DNX_SAT_CTF_BINS_LIMIT_CNT_MIN (1) 92 #define DNX_SAT_CTF_BINS_LIMIT_CNT_MAX (DNX_DATA_MAX_SAT_COLLECTOR_CTF_BINS_LIMIT_ENTRIES) 93 #define DNX_SAT_CTF_REPORT_SAMPLING_PER_MAX (100) 94 #define DNX_SAT_CTF_MAX_REPORT_SHRESHOLD (255) 95 #define DNX_SAT_BITS_PER_BYTE (8) 96 #define DNX_SAT_PAYLOAD_MAX_PATTERN_NOF_U8 (8) 97 #define DNX_SAT_PAYLOAD_MAX_PATTERN_NOF_U32 (2) 98 #define DNX_SAT_PKT_LENGTH_PATTERN_FIELD_SIZE ((DNX_DATA_MAX_SAT_GENERATOR_GTF_PKT_LEN_PATTEN_SIZE/8)/4) 99 #define DNX_SAT_PKT_HERDER_BITS (DNX_DATA_MAX_SAT_GENERATOR_GTF_PKT_HEADER_MAX_LENGTH*8) 100 101 #define DNX_AM_TEMPLATE_SAT_PKT_HEADER_LOW_ID (0) 102 #define DNX_AM_TEMPLATE_SAT_PKT_HEADER_COUNT (DNX_DATA_MAX_SAT_GENERATOR_GTF_PKT_HEADER_ENTRIES + 1) 103 #define DNX_AM_TEMPLATE_SAT_PKT_HEADER_MAX_ENTRIES(unit) DNX_DATA_MAX_SAT_GENERATOR_NOF_GTF_IDS 104 #define DNX_AM_TEMPLATE_SAT_PKT_HEADER_SIZE (sizeof(dnx_sat_gtf_pkt_hdr_tbl_info_t)) 105 /* 106 * Max number of JR2 SAT events is 20 since 640 bits/32 bits = 20. 107 */ 108 #define DNX_SAT_MAX_JR2_SAT_EVENTS 20 109 110 /* Maximum number of events */ 111 #define DNX_SAT_FIFO_MAX_NUMBER_OF_EVENTS_IN_SW (10240) 112 /* convert rate compensation from float to int, inorder to save in DBAL */ 113 #define DNX_SAT_GTF_RATE_CMP_CONVERSION (1000000.0) 114 115 /* Callbacks are not supported by warmboot. Need to re-register after warmboot */ 116 bcm_sat_event_cb _g_dnx_sat_event_cb[BCM_MAX_NUM_UNITS][bcmSATEventCount]; 117 118 /* User data */ 119 void *_g_dnx_sat_event_ud[BCM_MAX_NUM_UNITS][bcmSATEventCount]; 120 121 /** JR2 SAT EVENT FORMAT */ 122 typedef struct dnx_sat_event_data_s 123 { 124 uint8 is_valid; 125 uint8 flow_id; 126 uint8 d_set; 127 uint8 s_set; 128 uint8 size; 129 uint8 event_type; 130 uint32 frame_delay; 131 uint32 seq_num; 132 } dnx_sat_event_data_t; 133 134 /** The interrupt event data. Format and the data array */ 135 typedef struct dnx_sat_interrupt_event_data_s 136 { 137 dnx_sat_event_data_t jr2_sat_event_data[DNX_SAT_MAX_JR2_SAT_EVENTS]; 138 } dnx_sat_interrupt_event_data_t; 139 140 /* SAT event types generated by OAMP */ 141 typedef enum 142 { 143 DNX_SAT_OAMP_DMA_EVENT_TYPE_EVENT, 144 DNX_SAT_OAMP_DMA_EVENT_TYPE_STAT_EVENT, 145 DNX_SAT_OAMP_DMA_EVENT_TYPE_NOF 146 } dnx_sat_dma_event_type_t; 147 148 typedef enum dnx_sat_max_value_type_s 149 { 150 dnxSATPayloadOffset = 0, 151 dnxSATSeqNumOffset = 1, 152 dnxSATTimeStampOffset = 2, 153 dnxSATCrcOffset = 3, 154 dnxSATGtfRateStopIter = 4, 155 dnxSATNumSlotForStateToSwitch = 5, 156 dnxSATThersholdPerSlot = 6, 157 dnxSATCtfTrapData = 7, 158 dnxSATCtfTrapDataMask = 8, 159 dnxSATCtfTrapSessionId = 9, 160 dnxSATRportShreshold = 10, 161 dnxSATCtfTrapId = 11, 162 dnxSATGtfSeqNumOffset = 12, 163 dnxSATGtfCrcOffset = 13, 164 dnxSATMaxValueTypeCnt = 14 165 } dnx_sat_max_value_type_t; 166 167 typedef struct dnx_sat_init_s 168 { 169 uint32 rate_num_clks_cycle; 170 uint32 num_clks_sec; 171 } dnx_sat_init_t; 172 173 typedef struct dnx_sat_ctf_trap_data_s 174 { 175 uint16 trap_data; 176 uint16 trap_mask; 177 uint8 ssid; 178 } dnx_sat_ctf_trap_data_t; 179 180 typedef struct dnx_sat_data_s 181 { 182 uint32 ctf_trap_id[DNX_DATA_MAX_SAT_COLLECTOR_TRAP_ID_ENTRIES]; 183 dnx_sat_ctf_trap_data_t trap_data[DNX_DATA_MAX_SAT_COLLECTOR_TRAP_DATA_ENTRIES]; 184 uint32 gtf_header_id[DNX_DATA_MAX_SAT_GENERATOR_NOF_GTF_IDS]; 185 uint8 is_dirty; 186 uint8 rate_mode; /* 1: bps 2:pps */ 187 uint8 granularity_flag; /* flag for granularity */ 188 } dnx_sat_data_t; 189 190 typedef struct dnx_sat_gtf_pkt_hdr_tbl_info_s 191 { 192 uint32 pkt_header[DNX_SAT_PKT_HERDER_SIZE]; 193 uint32 pkt_header_len; 194 } dnx_sat_gtf_pkt_hdr_tbl_info_t; 195 196 typedef enum dnx_sat_rx_flv_bin_limit_s 197 { 198 dnxSATRxFLVBinLimit0 = 0, 199 dnxSATRxFLVBinLimit1 = 1, 200 dnxSATRxFLVBinLimit2 = 2, 201 dnxSATRxFLVBinLimit3 = 3, 202 dnxSATRxFLVBinLimit4 = 4, 203 dnxSATRxFLVBinLimit5 = 5, 204 dnxSATRxFLVBinLimit6 = 6, 205 dnxSATRxFLVBinLimit7 = 7, 206 dnxSATRxFLVBinLimit8 = 8, 207 dnxSATRxFLVBinLimitCnt = 9 208 } dnx_sat_rx_flv_bin_limit_s; 209 210 typedef struct dnx_sat_gtf_stamp_field_tbl_info_s 211 { 212 uint32 stamp_2_ena; 213 uint32 stamp_2_offset; 214 uint32 stamp_2_shift; 215 uint32 stamp_2_value; 216 uint32 counter_8_ena; 217 uint32 counter_8_offset; 218 uint32 counter_8_shift; 219 uint32 counter_8_mask; 220 uint32 counter_8_inc_step; 221 uint32 counter_8_period; 222 uint32 counter_16_ena; 223 uint32 counter_16_offset; 224 uint32 counter_16_shift; 225 uint32 counter_16_mask; 226 uint32 counter_16_inc_step; 227 uint32 counter_16_period; 228 uint32 stamp_16_ena; 229 uint32 stamp_16_offset; 230 uint32 stamp_16_shift; 231 uint32 stamp_16_value; 232 } dnx_sat_gtf_stamp_field_tbl_info_t; 233 234 /* 235 * } 236 */ 237 /* 238 * MACROs 239 * { 240 */ 241 242 /* } */ 243 244 shr_error_e dnx_sat_init( 245 int unit); 246 247 shr_error_e dnx_sat_deinit( 248 int unit); 249 250 shr_error_e dnx_sat_gtf_stat_multi_get( 251 int unit, 252 bcm_sat_gtf_t gtf_id, 253 uint64 *packet_cnt, 254 uint64 *byte_cnt); 255 256 void dnx_gtf_stat_update_callback( 257 int unit); 258 259 shr_error_e dnx_am_template_sat_pkt_header_create( 260 int unit, 261 int default_profile, 262 dnx_sat_gtf_pkt_hdr_tbl_info_t * header_info); 263 264 shr_error_e dnx_am_template_sat_pkt_header_allocate( 265 int unit, 266 int flags, 267 dnx_sat_gtf_pkt_hdr_tbl_info_t * header_info, 268 int *is_allocated, 269 int *header_template); 270 271 shr_error_e dnx_am_template_sat_pkt_header_free( 272 int unit, 273 int header_template, 274 int *is_last); 275 276 shr_error_e dnx_am_template_sat_pkt_header_data_get( 277 int unit, 278 int header_template, 279 dnx_sat_gtf_pkt_hdr_tbl_info_t * header_info); 280 281 shr_error_e dnx_am_template_sat_pkt_header_exchange( 282 int unit, 283 int flags, 284 dnx_sat_gtf_pkt_hdr_tbl_info_t * header_info, 285 int old_header_template, 286 int *is_last, 287 int *new_header_template, 288 int *is_allocated); 289 290 void dnx_algo_sat_pkt_header_print_cb( 291 int unit, 292 const void *data); 293 294 shr_error_e dnx_sat_gtf_id_allocate( 295 int unit, 296 uint32 flags, 297 bcm_sat_gtf_t * gtf_id); 298 299 shr_error_e dnx_sat_gtf_id_free( 300 int unit, 301 bcm_sat_gtf_t gtf_id); 302 303 shr_error_e dnx_sat_nof_free_gtf( 304 int unit, 305 int *nof_free_gtf); 306 307 shr_error_e dnx_sat_ctf_id_allocate( 308 int unit, 309 uint32 flags, 310 bcm_sat_ctf_t * ctf_id); 311 312 shr_error_e dnx_sat_ctf_id_free( 313 int unit, 314 bcm_sat_ctf_t ctf_id); 315 316 shr_error_e dnx_sat_ctf_trap_entry_allocate( 317 int unit, 318 int *trap_entry_idx); 319 320 shr_error_e dnx_sat_ctf_trap_entry_free( 321 int unit, 322 int trap_entry_idx); 323 324 shr_error_e dnx_sat_ctf_trap_id_allocate( 325 int unit, 326 int *trap_idx); 327 328 shr_error_e dnx_sat_ctf_trap_id_free( 329 int unit, 330 int trap_idx); 331 332 shr_error_e dnx_sat_packet_config_exp_payload_uint8_to_long( 333 uint8 exp_payload_u8[DNX_SAT_PAYLOAD_MAX_PATTERN_NOF_U8], 334 uint8 num_of_bytes, 335 uint32 is_reverse, 336 uint32 exp_payload_long[DNX_SAT_PAYLOAD_MAX_PATTERN_NOF_U32]); 337 338 shr_error_e dnx_sat_packet_config_exp_payload_long_to_uint8( 339 uint8 exp_payload_u8[DNX_SAT_PAYLOAD_MAX_PATTERN_NOF_U8], 340 uint8 num_of_bytes, 341 uint32 is_reverse, 342 uint32 exp_payload_long[DNX_SAT_PAYLOAD_MAX_PATTERN_NOF_U32]); 343 344 shr_error_e dnx_sat_max_value_get( 345 int unit, 346 dnx_sat_max_value_type_t type, 347 int *max_value); 348 349 shr_error_e dnx_sat_data_set( 350 int unit, 351 dnx_sat_data_t * psat_data); 352 353 shr_error_e dnx_sat_data_get( 354 int unit, 355 dnx_sat_data_t * psat_data); 356 357 shr_error_e dnx_sat_dynamic_memory_access_set( 358 int unit, 359 uint32 enable); 360 361 shr_error_e dnx_sat_gtf_credit_config( 362 int unit, 363 int pipe_id, 364 int credit); 365 366 void dnx_sat_dma_event_handler( 367 int unit, 368 void *entry, 369 int entry_size); 370 371 void dnx_sat_event_handler( 372 int unit); 373 374 shr_error_e dnx_sat_fifo_interrupt_handler( 375 int unit, 376 void *host_entry); 377 378 shr_error_e dnx_sat_ctf_reports_config_set( 379 int unit, 380 bcm_sat_ctf_t ctf_id, 381 bcm_sat_ctf_report_config_t * reports); 382 383 shr_error_e dnx_sat_session_inuse( 384 int unit, 385 int session_id, 386 int *found); 387 388 shr_error_e dnx_sat_trap_idx_get( 389 int unit, 390 uint32 trap_id, 391 int *trap_idx); 392 393 shr_error_e dnx_sat_gtf_config_rate_set( 394 int unit, 395 bcm_sat_gtf_t gtf_id, 396 uint32 gtf_config_rate, 397 uint32 gtf_rate_compensation, 398 int packet_length_compensation); 399 400 /* } */ 401 #endif /* SAT_H_INCLUDED__ */