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