katana.h (7366B)
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 * File: katana.h 8 */ 9 10 #ifndef _SOC_KATANA_H_ 11 #define _SOC_KATANA_H_ 12 13 #include <soc/drv.h> 14 15 #define _SOC_KT_NODE_CONFIG_MEM(n) \ 16 (((n)==_SOC_KT_COSQ_NODE_LEVEL_ROOT) ? LLS_PORT_CONFIGm : \ 17 (((n) == _SOC_KT_COSQ_NODE_LEVEL_L0) ? LLS_L0_CONFIGm : \ 18 ((n) == _SOC_KT_COSQ_NODE_LEVEL_L1 ? LLS_L1_CONFIGm : -1 ))) 19 20 #define _SOC_KT_NODE_WIEGHT_MEM(n) \ 21 (((n)==_SOC_KT_COSQ_NODE_LEVEL_L0) ? LLS_L0_CHILD_WEIGHT_CFG_CNTm : \ 22 (((n) == _SOC_KT_COSQ_NODE_LEVEL_L1) ? LLS_L1_CHILD_WEIGHT_CFG_CNTm : \ 23 (((n) == _SOC_KT_COSQ_NODE_LEVEL_L2) ? LLS_L2_CHILD_WEIGHT_CFG_CNTm : -1 ))) 24 25 typedef enum { 26 _SOC_KT_COSQ_NODE_LEVEL_ROOT, 27 _SOC_KT_COSQ_NODE_LEVEL_L0, 28 _SOC_KT_COSQ_NODE_LEVEL_L1, 29 _SOC_KT_COSQ_NODE_LEVEL_L2, 30 _SOC_KT_COSQ_NODE_LEVEL_MAX 31 }_soc_katana_cosq_node_level_t; 32 33 typedef enum { 34 SOC_KT_SCHED_MODE_UNKNOWN = 0, 35 SOC_KT_SCHED_MODE_STRICT, 36 SOC_KT_SCHED_MODE_WRR, 37 SOC_KT_SCHED_MODE_WDRR 38 } soc_kt_sched_mode_e; 39 40 extern soc_functions_t soc_katana_drv_funs; 41 42 extern int _soc_katana_mem_parity_control(int unit, soc_mem_t mem, 43 int copyno, int enable); 44 extern void soc_katana_stat_nack(int unit, int *fixed); 45 extern void soc_katana_parity_error(void *unit_vp, void *d1, void *d2, 46 void *d3, void *d4); 47 extern void soc_katana_mem_nack(void *unit_vp, void *d1, void *d2, 48 void *d3, void *d4); 49 extern int soc_katana_pipe_mem_clear(int unit); 50 extern int soc_katana_ser_mem_clear(int unit, soc_mem_t mem); 51 extern void soc_katana_ser_fail(int unit); 52 extern int soc_katana_get_egr_perq_xmt_counters_size(int unit, 53 int *num_entries_x, 54 int *num_entries_y); 55 extern int soc_katana_get_port_mapping(int unit, uint16 dev_id, 56 int *bandwidth, 57 const int **speed_max, 58 const int **p2l_mapping, 59 const int **p2m_mapping); 60 extern int soc_katana_init_port_mapping(int unit); 61 extern int soc_katana_num_cosq_init(int unit); 62 extern void _kt_lls_workaround(int unit); 63 extern int soc_katana_temperature_monitor_get(int unit, 64 int temperature_max, 65 soc_switch_temperature_monitor_t *temperature_array, 66 int *temperature_count); 67 extern int soc_katana_show_ring_osc(int unit); 68 69 typedef int (*soc_kt_oam_handler_t)(int unit, soc_field_t fault_field); 70 extern void soc_kt_oam_handler_register(int unit, soc_kt_oam_handler_t handler); 71 72 #if defined(BCM_KATANA_SUPPORT) && defined(BCM_CMICM_SUPPORT) 73 extern int _soc_mem_kt_fifo_dma_start (int unit, 74 int chan, 75 soc_mem_t mem, 76 int copyno, 77 int host_entries, 78 void * host_buf); 79 extern int _soc_mem_kt_fifo_dma_stop (int unit, int chan); 80 extern int _soc_mem_kt_fifo_dma_get_read_ptr(int unit, 81 int chan, 82 void **host_ptr, 83 int *count); 84 extern int _soc_mem_kt_fifo_dma_advance_read_ptr (int unit, 85 int chan, 86 int count); 87 extern soc_reg_t _soc_kt_fifo_reg_get(int unit, int cmc, int chan, int type); 88 #endif 89 90 /* 91 * Base queue definitions 92 */ 93 #define KATANA_BASE_QUEUES_MAX 1024 94 95 /* 96 * Shaper definitions 97 */ 98 #define KATANA_SHAPER_RATE_MIN_EXPONENT 0 99 #define KATANA_SHAPER_RATE_MAX_EXPONENT 13 100 #define KATANA_SHAPER_RATE_MIN_MANTISSA 0 101 #define KATANA_SHAPER_RATE_MAX_MANTISSA 1023 102 #define KATANA_SHAPER_BURST_MIN_EXPONENT 0 103 #define KATANA_SHAPER_BURST_MAX_EXPONENT 14 104 #define KATANA_SHAPER_BURST_MIN_MANTISSA 0 105 #define KATANA_SHAPER_BURST_MAX_MANTISSA 127 106 107 typedef struct katanaRateInfo_s { 108 uint32 rate; 109 uint32 exponent; 110 uint32 mantissa; 111 } katanaRateInfo_t; 112 113 typedef struct katanaShaperInfo_s { 114 katanaRateInfo_t *basic_rate_info; 115 katanaRateInfo_t *burst_size_info; 116 } katanaShaperInfo_t; 117 118 extern int 119 soc_katana_get_shaper_rate_info(int unit, uint32 rate, 120 uint32 *rate_mantissa, uint32 *rate_exponent); 121 extern int 122 soc_katana_get_shaper_burst_info(int unit, uint32 rate, 123 uint32 *burst_mantissa, uint32 *burst_exponent, 124 uint32 flags); 125 extern int 126 soc_katana_compute_shaper_rate(int unit, uint32 rate_mantissa, 127 uint32 rate_exponent, uint32 *rate); 128 extern int 129 soc_katana_compute_refresh_rate(int unit, uint32 rate_exp, 130 uint32 rate_mantissa, 131 uint32 burst_exp, uint32 burst_mantissa, 132 uint32 *cycle_sel); 133 extern int 134 soc_katana_compute_burst_rate_check(int unit, uint32 rate_exp, 135 uint32 rate_mantissa, 136 uint32 burst_exp, uint32 burst_mantissa, 137 uint32 cycle_sel); 138 extern int 139 soc_katana_compute_shaper_burst(int unit, uint32 burst_mantissa, 140 uint32 burst_exponent, uint32 *rate); 141 extern void soc_kt_oam_error(void *unit_vp, void *d1, void *d2, 142 void *d3, void *d4); 143 extern int soc_kt_lls_bmap_alloc(int unit); 144 extern int soc_kt_port_flush(int unit, int port, int enable); 145 146 extern int soc_kt_cosq_max_bucket_set(int unit, int port, 147 int index, uint32 level); 148 extern int soc_kt_port_flush_state_set(int unit, int port, int enable); 149 extern int soc_kt_port_flush_state_get(int unit, int port, int *mode); 150 151 extern int 152 soc_kt_cosq_get_sched_mode(int unit, soc_port_t port, int level, int index, 153 soc_kt_sched_mode_e *pmode, int *weight); 154 extern int 155 soc_kt_sched_get_node_config(int unit, soc_port_t port, int level, int index, 156 int *pnum_spri, int *pfirst_child, 157 uint32 *pspmap); 158 extern int soc_kt_l3_defip_index_remap(int unit, soc_mem_t mem, int index); 159 extern int soc_kt_l3_defip_mem_index_get(int unit, int pindex, soc_mem_t *mem); 160 extern int soc_kt_l3_defip_index_map(int unit, soc_mem_t mem, int index); 161 extern int soc_kt_mem_config(int unit, int dev_id); 162 163 extern int _soc_kt_cosq_begin_port_flush(int unit, int port, 164 int hw_index); 165 extern int _soc_kt_cosq_end_port_flush(int unit, 166 int hw_index); 167 #endif /* !_SOC_KATANA_H_ */ 168