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

streaming_lib.h (10379B)


      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  * Extern declarations for test functions in streaming_library.c
      8  */
      9 
     10 #ifndef STREAMING_LIB_H
     11 #define STREAMING_LIB_H
     12 
     13 /* test type */
     14 #define PKT_TYPE_L2 0
     15 #define PKT_TYPE_IPMC 1
     16 #define PKT_TYPE_L3UC 2
     17 #define PKT_TYPE_L2_TS 3
     18 
     19 /* tx/rx channel */
     20 #define TX_CHAN 0
     21 #define RX_CHAN 1
     22 
     23 #define TPID 0x8100
     24 #define NUM_BYTES_MAC_ADDR 6
     25 #define NUM_BYTES_CRC 4
     26 
     27 #define MIN_PKT_SIZE 64
     28 #define MTU 9216
     29 #define MTU_CELL_CNT 45
     30 #define TARGET_CELL_COUNT 100
     31 
     32 #define NUM_SUBP_OBM 4
     33 
     34 /* packet size */
     35 #define HG2_WC_PKT_SIZE 64
     36 #define ENET_WC_PKT_SIZE 145
     37 #define ENET_IPG 12
     38 #define ENET_PREAMBLE 8
     39 #define HG2_IPG 8
     40 #define HG2_HDR 12
     41 
     42 /* cell size */
     43 #define CELL_SIZE 208
     44 #define FIRST_CELL_ENET 144
     45 #define FIRST_CELL_HG2 148
     46 
     47 #define TXDMA_TIMEOUT 100000
     48 #define RXDMA_TIMEOUT 100000
     49 
     50 /* CMIC */
     51 #define CMICM_MMU_BKP_OFF_THRESHOLD 0x20
     52 #define CMICX_MMU_BKP_OFF_THRESHOLD 0xFF
     53 
     54 /* ANCL bandwidth */
     55 #define TH_MISC_BW 10000
     56 #define TD2P_MISC_BW 10000
     57 #define TH2_MISC_BW 25000
     58 #define TD3_MISC_BW 30000
     59 
     60 /* freq and bandwidth : TH */
     61 #define TH_FREQ_850 850
     62 #define TH_FREQ_765 765
     63 #define TH_FREQ_672 672
     64 #define TH_FREQ_645 645
     65 #define TH_FREQ_545 545
     66 #define TH_BW_850 561000
     67 #define TH_BW_765 504000
     68 #define TH_BW_672 442000
     69 #define TH_BW_645 423000
     70 #define TH_BW_545 358000
     71 
     72 /* freq and bandwidth : TD2P */
     73 #define TD2P_FREQ_793 793
     74 #define TD2P_FREQ_635 635
     75 #define TD2P_FREQ_529 529
     76 #define TD2P_FREQ_421 421
     77 #define TD2P_BW_793 500000
     78 #define TD2P_BW_635 380000
     79 #define TD2P_BW_529 340000
     80 #define TD2P_BW_421 260000
     81 
     82 /* freq and bandwidth : TH2 */
     83 #define TH2_FREQ_1700 1700
     84 #define TH2_FREQ_1625 1625
     85 #define TH2_FREQ_1525 1525
     86 #define TH2_FREQ_1425 1425
     87 #define TH2_FREQ_1325 1325
     88 #define TH2_FREQ_1275 1275
     89 #define TH2_FREQ_1225 1225
     90 #define TH2_FREQ_1125 1125
     91 #define TH2_FREQ_1050 1050
     92 #define TH2_FREQ_950 950
     93 #define TH2_FREQ_850 850
     94 
     95 /* freq and bandwidth : TD3 */
     96 #define TD3_FREQ_1700 1700
     97 #define TD3_FREQ_1625 1625
     98 #define TD3_FREQ_1525 1525
     99 #define TD3_FREQ_1425 1425
    100 #define TD3_FREQ_1325 1325
    101 #define TD3_FREQ_1275 1275
    102 #define TD3_FREQ_1012 1012
    103 #define TD3_FREQ_850 850
    104 #define TD3_BW_1700 1142000
    105 #define TD3_BW_1625 1092000
    106 #define TD3_BW_1525 1024000
    107 #define TD3_BW_1425 957000
    108 #define TD3_BW_1325 890000
    109 #define TD3_BW_1275 856000
    110 #define TD3_BW_1012 680000
    111 #define TD3_BW_850 571000
    112 
    113 #define TD3_FREQ_1525_CAL_LEN 409
    114 #define TD3_FREQ_1425_CAL_LEN 383
    115 #define TD3_FREQ_1325_CAL_LEN 356
    116 #define TD3_FREQ_1012_CAL_LEN 272
    117 #define TD3_FREQ_850_CAL_LEN 228
    118 
    119 #define TD3_ANCL_CELLS 12
    120 
    121 #if defined(BCM_ESW_SUPPORT)
    122 
    123 /*
    124  * Struct:
    125  *      stream_rate_t
    126  *
    127  * Description:
    128  */
    129 typedef struct stream_rate_calc_s {
    130     pbmp_t pbmp;         /* port bitmap */
    131     uint32 mode;         /* 0-> check by max rx speed;
    132                             1-> check by actual tx speed */
    133     uint32 pkt_size;     /* packet size */
    134     uint32 interval_len; /* length of interval in second */
    135     uint32 tolerance_lr; /* rate tolerance percentage for linerate */
    136     uint32 tolerance_os; /* rate tolerance percentage for oversub */
    137     uint32 src_port[SOC_MAX_NUM_PORTS];/* source port array */
    138     uint32 num_rep[SOC_MAX_NUM_PORTS]; /* number of same-port replications */
    139     uint32 scaling_factor;             /* emulator speedup factor */
    140     uint32 emulation_param;             /* emulator speedup factor */
    141     uint32 traffic_load;
    142 } stream_rate_t;
    143 
    144 /*
    145  * Struct:
    146  *      stream_integrity_t
    147  *
    148  * Description:
    149  */
    150 typedef struct stream_pkt_intg_s{
    151     int type;       /* packet type: PKT_TYPE_L2, PKT_TYPE_IPMC, etc. */
    152     int ipv6_en;    /* enable ipv6, 1->enable, 0->disable  */
    153     pbmp_t tx_pbmp; /* tx port bitmap */
    154     pbmp_t rx_pbmp; /* rx port bitmap */
    155     uint32 tx_vlan[SOC_MAX_NUM_PORTS];        /* tx vlan array */
    156     uint32 rx_vlan[SOC_MAX_NUM_PORTS];        /* tx vlan array */
    157     uint32 port_pkt_seed[SOC_MAX_NUM_PORTS];  /* port packet seed array */
    158     uint32 port_flood_cnt[SOC_MAX_NUM_PORTS]; /* port flood count array */
    159     uint8 mac_da[SOC_MAX_NUM_PORTS][NUM_BYTES_MAC_ADDR];
    160     uint8 mac_sa[SOC_MAX_NUM_PORTS][NUM_BYTES_MAC_ADDR];
    161     uint32 ip_da[SOC_MAX_NUM_PORTS]; /* port ip DA array */
    162     uint32 ip_sa[SOC_MAX_NUM_PORTS]; /* port ip SA array */
    163 } stream_integrity_t;
    164 
    165 /*
    166  * Struct:
    167  *      stream_pkt_t
    168  *
    169  * Parameters:
    170  */
    171 typedef struct stream_pkt_s{
    172     int port;
    173     int num_pkt;           /* expected number of tx/rx packets */
    174     int cnt_pkt;           /* actual number of tx/rx packets */
    175     uint32 pkt_seed;       /* random seed for pkt generation */
    176     uint32 pkt_size;       /* constant pkt size */
    177     int rand_pkt_size_en;  /* enable random pkt size */
    178     uint32 *rand_pkt_size; /* random pkt size array */
    179     int l3_en;             /* 1 -> enable, 0 -> disable (default) */
    180     uint8 ipv6_en;         /* 1 -> enable, 0 -> disable (default) */
    181     uint32 tx_vlan;
    182     uint32 rx_vlan;
    183     uint8 mac_da[NUM_BYTES_MAC_ADDR];
    184     uint8 mac_sa[NUM_BYTES_MAC_ADDR];
    185     uint32 ip_da;
    186     uint32 ip_sa;
    187     uint8 ttl;
    188     uint8 new_flow_en;  /* Enables MPLS, IPv4/6 & L2 pkts */
    189     uint8 l3_mpls_en;   /* 3 MPLS labels + L3 pkt: 1 -> enable, 0 -> disable (default) */
    190     /* mpls_labels[0] -  Top MPLS label Not-BOS
    191      * mpls_labels[1] -  Middle MPLS label Not-BOS
    192      * mpls_labels[2] -  BOS MPLS label
    193      */
    194     uint32 *mpls_labels; /* Top MPLS label Not-BOS */
    195     /*
    196      * ipv6_da[0]    31:0
    197      * ipv6_da[1]   63:32
    198      * ipv6_da[2]   95:64
    199      * ipv6_da[3]  127:96
    200      */
    201     uint32 *ipv6_da;
    202     uint32 *ipv6_sa;
    203 } stream_pkt_t;
    204 
    205 extern void stream_print_port_config(int unit, pbmp_t pbmp);
    206 
    207 extern uint32 stream_get_port_pipe(int unit, int port);
    208 extern uint32 stream_get_pkt_cell_cnt(int unit, uint32 pkt_size, int port);
    209 extern uint32 stream_get_safe_pkt_size(int unit, int ovs_ratio_x1000);
    210 extern uint32 stream_get_ll_flood_cnt(int unit, int port, uint32 pkt_size,
    211                                       uint32 *pkt_size_rand);
    212 extern uint32 stream_get_pipe_bandwidth(int unit, uint32 flag);
    213 extern uint32 stream_get_ancl_bandwidth(int unit, uint32 flag);
    214 extern uint32 stream_get_wc_pkt_size(int unit, int hg_en);
    215 
    216 extern void stream_set_vlan(int unit, bcm_vlan_t vlan, int enable);
    217 extern void stream_set_vlan_valid(int unit, bcm_vlan_t vlan);
    218 extern void stream_set_vlan_invalid(int unit, bcm_vlan_t vlan);
    219 extern bcm_error_t stream_set_lpbk(int unit, pbmp_t pbmp, int loopback);
    220 extern bcm_error_t stream_set_pmd_lpbk(int unit, bcm_port_t port,
    221                                        bcm_port_phy_control_t type,
    222                                        uint32 value);
    223 extern void stream_set_mac_lpbk(int unit, pbmp_t pbmp);
    224 extern void stream_set_phy_lpbk(int unit, pbmp_t pbmp);
    225 extern void stream_set_no_lpbk(int unit, pbmp_t pbmp);
    226 
    227 extern void stream_set_l3mtu_valid(int unit, bcm_vlan_t vlan);
    228 
    229 extern void stream_turn_off_cmic_mmu_bkp(int unit);
    230 extern void stream_turn_off_fc(int unit, pbmp_t pbmp);
    231 
    232 extern void stream_gen_random_l2_pkt(uint8 *pkt_ptr,
    233                                      uint32 pkt_size,uint32 seq_id,
    234                                      uint8 mac_da[NUM_BYTES_MAC_ADDR],
    235                                      uint8 mac_sa[NUM_BYTES_MAC_ADDR],
    236                                      uint16 tpid, uint16 vlan_id);
    237 extern void stream_gen_random_l3_pkt(uint8 *pkt_ptr, uint8 ipv6_en,
    238                                      uint32 pkt_size, uint32 seq_id,
    239                                      uint8 mac_da[NUM_BYTES_MAC_ADDR],
    240                                      uint8 mac_sa[NUM_BYTES_MAC_ADDR],
    241                                      uint16 vlan_id,
    242                                      uint32 ip_da, uint32 ip_sa,
    243                                      uint8 ttl, uint8 tos);
    244 
    245 extern void stream_gen_random_mpls_l3_pkt(uint8 *pkt_ptr,
    246                                      stream_pkt_t *tx_pkt,
    247                                      uint32 pkt_size,
    248                                      uint32 seq_id,
    249                                      uint8 tos);
    250 
    251 extern bcm_error_t stream_pktdma_tx(int unit, dv_t *dv, uint8 *pkt, uint16 cnt);
    252 extern bcm_error_t stream_pktdma_rx(int unit, int rst_vlan, bcm_vlan_t vlan,
    253                                     dv_t *dv, uint8 *pkt, uint16 cnt);
    254 
    255 extern bcm_error_t stream_tx_pkt(int unit, stream_pkt_t *tx_pkt);
    256 
    257 extern bcm_error_t stream_chk_dma_chain_done(int unit, int vchan,
    258                                              soc_dma_poll_type_t type,
    259                                              int *detected);
    260 extern bcm_error_t stream_chk_mib_counters(int unit, pbmp_t pbmp, int flag);
    261 extern bcm_error_t stream_chk_port_rate(int unit, pbmp_t pbmp,
    262                                         stream_rate_t *rate_calc);
    263 extern bcm_error_t stream_chk_pkt_integrity(int unit,
    264                                             stream_integrity_t *pkt_intg);
    265 extern bcm_error_t stream_calc_exp_rate_by_rx(int unit, uint64 *port_rate_exp,
    266                                 stream_rate_t *rate_calc);
    267 extern bcm_error_t stream_get_reg_tpkt_tbyt(int unit, int port,
    268                                 soc_reg_t* reg_tpkt, soc_reg_t* reg_tbyt);
    269 extern bcm_error_t record_rate_information(int unit, uint32 emulation_param,
    270                 pbmp_t pbmp, uint64 *time, uint64 *pkt_cnt, uint64 *byt_cnt);
    271 extern void calc_act_port_rate(int unit, pbmp_t pbmp, uint64 *start_time,
    272                 uint64 *end_time, uint64 *pkt_start, uint64 *pkt_end,
    273                 uint64 *byt_start, uint64 *byt_end, uint64 *port_rate);
    274 extern bcm_error_t compare_rates(int unit, pbmp_t pbmp, uint32 tolerance_lr,
    275               uint32 tolerance_os, uint64 *port_rate_exp, uint64 *port_rate_act);
    276 extern int stream_get_exact_speed(int speed, int encap);
    277 extern uint64 get_cur_time(int unit, uint32 emulation_param);
    278 extern void start_cmic_timesync(int unit);
    279 extern uint64 get_ts_count(int unit);
    280 
    281 
    282 extern bcm_error_t stream_gen_ref_pkt(int unit, int port,
    283                                       stream_integrity_t *pkt_intg,
    284                                       uint8 *rx_pkt, uint8 *ref_pkt,
    285                                       uint32 *pkt_size);
    286 extern void stream_set_l3mtu_valid(int unit, bcm_vlan_t vlan);
    287 
    288 
    289 #endif /* BCM_ESW_SUPPORT */
    290 
    291 #endif /* STREAMING_LIB_H */