openbcm

Git mirror of https://github.com/Broadcom-Network-Switching-Software/OpenBCM
git clone git://git.finwo.net/mirror/broadcom/openbcm
Log | Files | Refs | README

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__ */