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

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