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

alpm.h (10932B)


      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-2020 Broadcom Inc. All rights reserved.
      6  *
      7  * File:        alpm.h
      8  * Purpose:     Function declarations for ALPM Internal functions.
      9  */
     10 
     11 #ifndef _BCM_INT_ALPM_H_
     12 #define _BCM_INT_ALPM_H_
     13 
     14 #ifdef ALPM_ENABLE
     15 
     16 /* SOC_ALPM_LOOKUP_HIT */
     17 #define BCM_ALPM_LOOKUP_HIT             (1 << 31)
     18 /* SOC_ALPM_COOKIE_FLEX */
     19 #define ALPM_ROUTE_FULL_MD              (1 << 29)
     20 /* SOC_ALPM_LPM_LOOKUP_HIT */
     21 #define BCM_ALPM_LPM_LOOKUP_HIT         (1 << 28)
     22 
     23 /* ref: esw/dump.c
     24  #define DUMP_TABLE_RAW       0x01
     25  #define DUMP_TABLE_HEX       0x02
     26  #define DUMP_TABLE_ALL       0x04
     27  #define DUMP_TABLE_CHANGED   0x08
     28  #define DUMP_TABLE_EXT       0x10
     29  #define DUMP_TABLE_PIPE_X    0x20
     30  #define DUMP_TABLE_PIPE_Y    0x40
     31  #define DUMP_TABLE_PIPE_0    0x80
     32  #define DUMP_TABLE_PIPE_1    0x100
     33  #define DUMP_TABLE_PIPE_2    0x200
     34  #define DUMP_TABLE_PIPE_3    0x400
     35  #define DUMP_TABLE_NO_CACHE  0x800
     36  #define DUMP_TABLE_PHY_INDEX 0x1000
     37  #define DUMP_TABLE_SIMPLIFIED 0x2000
     38  #define DUMP_TABLE_FORMAT 0x4000
     39  #define DUMP_TABLE_ALL_DMA_THRESHOLD 8
     40  #define DUMP_TABLE_ITER_BEFORE_YIELD 8
     41  */
     42 #define ALPM_DUMP_TABLE_RAW          0x01
     43 #define ALPM_DUMP_TABLE_HEX          0x02
     44 #define ALPM_DUMP_TABLE_ALL          0x04
     45 #define ALPM_DUMP_TABLE_CHANGED      0x08
     46 #define ALPM_DUMP_TABLE_NOCACHE      0x800
     47 
     48 /* Max entry per bank */
     49 #define BCM_ESW_ALPM_EPB_MAX        40
     50 
     51 /* ALPM UnitTest definitions */
     52 #define ALPM_UT_FLAG_IP_INCR    (1U << 1)
     53 #define ALPM_UT_FLAG_LEN_INCR   (1U << 2)
     54 #define ALPM_UT_FLAG_VRF_INCR   (1U << 3)
     55 #define ALPM_UT_FLAG_SPEED      (1U << 4)
     56 #define ALPM_UT_FLAG_NOMSG      (1U << 5)
     57 
     58 #define ALPM_UT_V4 (1 << 0)
     59 #define ALPM_UT_V6 (1 << 1)
     60 
     61 #define ALPM_UT_OPC_ADD     0
     62 #define ALPM_UT_OPC_DEL     1
     63 
     64 typedef struct alpm_ut_route_db_s {
     65     int         type;
     66     int         vrf;
     67     char        *base_addr;
     68     uint32      pfx_len;
     69     int         count;
     70     int         opc;
     71 } alpm_ut_route_db_t;
     72 
     73 typedef enum _alpm_vrf_type_e {
     74     VT_PRIVATE = 0,
     75     VT_GLOBAL = 1,
     76     VT_OVERRIDE = 2,
     77     VTS = 3
     78 } _alpm_vrf_type_t;
     79 
     80 typedef enum _alpm_ip_type_e {
     81     IPV4 = 0,
     82     IPV6 = 1,
     83     IPS = 2
     84 } _alpm_ip_type_t;
     85 
     86 /* ALPM resource info structure */
     87 typedef struct _alpm_resource_info_s {
     88     bcm_l3_alpm_resource_t res[bcmL3RouteGroupCounter];
     89 } _alpm_resource_info_t;
     90 
     91 
     92 /* ESW externs */
     93 extern int bcm_esw_alpm_init(int u);
     94 extern int bcm_esw_alpm_inited(int u);
     95 extern int bcm_esw_alpm_cleanup(int u, _bcm_l3_trvrs_data_t *trv_data,
     96                                 _bcm_l3_trvrs_data_t *trv_data1);
     97 extern int bcm_esw_alpm_fast_delete_all(int u, _bcm_l3_trvrs_data_t *trv_data,
     98                                         _bcm_l3_trvrs_data_t *trv_data1);
     99 extern int bcm_esw_alpm_lookup(int u, _bcm_defip_cfg_t *lpm_cfg);
    100 extern int bcm_esw_alpm_insert(int u, _bcm_defip_cfg_t *lpm_cfg);
    101 extern int bcm_esw_alpm_add(int u, _bcm_defip_cfg_t *lpm_cfg);
    102 extern int bcm_esw_alpm_delete(int u, _bcm_defip_cfg_t *lpm_cfg);
    103 extern int bcm_esw_alpm_update(int u, _bcm_defip_cfg_t *lpm_cfg);
    104 extern int bcm_esw_alpm_find(int u, _bcm_defip_cfg_t *lpm_cfg,
    105                              int *nh_ecmp_idx);
    106 extern int bcm_esw_alpm_update_match(int u, _bcm_l3_trvrs_data_t *trv_data);
    107 extern int bcm_esw_alpm_vrf_data_mode_get(int u, bcm_vrf_t vrf, uint32 flags,
    108                                           bcm_l3_vrf_route_data_mode_t *mode);
    109 extern int bcm_esw_alpm_vrf_data_mode_set(int u, bcm_vrf_t vrf, uint32 flags,
    110                                           bcm_l3_vrf_route_data_mode_t mode);
    111 extern int bcm_esw_alpm_resource_check_and_free(int u, _bcm_defip_cfg_t *lpm_cfg);
    112 
    113 #if defined(BCM_TOMAHAWK_SUPPORT)
    114 extern int bcm_th3_alpm_add(int unit, _bcm_defip_cfg_t *lpm_cfg,
    115                             int nh_ecmp_idx);
    116 extern int bcm_th3_alpm_del(int unit, _bcm_defip_cfg_t *lpm_cfg);
    117 extern int bcm_th3_alpm_get(int unit, _bcm_defip_cfg_t *lpm_cfg, int
    118                             *nh_ecmp_idx);
    119 extern int bcm_th3_alpm_find(int unit, _bcm_defip_cfg_t *lpm_cfg,
    120                              int *nh_ecmp_idx);
    121 extern int bcm_th3_alpm_update_match(int unit, _bcm_l3_trvrs_data_t *trv_data);
    122 extern int bcm_th_alpm_add(int unit, _bcm_defip_cfg_t *lpm_cfg,
    123                              int nh_ecmp_idx);
    124 extern int bcm_th_alpm_del(int unit, _bcm_defip_cfg_t *lpm_cfg);
    125 extern int bcm_th_alpm_get(int unit, _bcm_defip_cfg_t *lpm_cfg, int
    126                             *nh_ecmp_idx);
    127 extern int bcm_th_alpm_find(int unit, _bcm_defip_cfg_t *lpm_cfg,
    128                              int *nh_ecmp_idx);
    129 extern int bcm_th_alpm_update_match(int unit, _bcm_l3_trvrs_data_t *trv_data);
    130 #endif
    131 
    132 /* Extern functions of alpm_tcam.c */
    133 extern int bcm_esw_alpm_tcam_insert(int u, _bcm_defip_cfg_t *lpm_cfg, uint32 write_flags);
    134 extern int bcm_esw_alpm_tcam_match(int u, _bcm_defip_cfg_t *lpm_cfg, int *idx);
    135 extern int bcm_esw_alpm_tcam_delete(int u, _bcm_defip_cfg_t *lpm_cfg);
    136 extern int bcm_esw_alpm_tcam_init(int u);
    137 extern int bcm_esw_alpm_tcam_deinit(int u);
    138 extern int bcm_esw_alpm_tcam_cleanup(int u);
    139 extern int bcm_esw_alpm_tcam_state_free_get(int, int app, int zn, int *fcnt, int *vcnt);
    140 extern void bcm_esw_alpm_tcam_zone_dump(int u, int app, char *pfx_str);
    141 extern void bcm_esw_alpm_tcam_zone_state_dump(int u, int app);
    142 extern int bcm_esw_alpm_tcam_avail(int u, int app, int vrf_id, int ipt, int key_len, int mc);
    143 
    144 /* APIs distributed hitbits */
    145 extern int bcm_esw_alpm_hit_init(int u);
    146 extern int bcm_esw_alpm_hit_deinit(int u);
    147 extern int bcm_esw_alpm_clear_hit(int u, _bcm_defip_cfg_t *lpm_cfg);
    148 extern int bcm_esw_alpm_hit_enabled(int u);
    149 extern int bcm_esw_alpm_hit_enable(int unit, int enable);
    150 extern int alpm_dist_hitbit_interval_get(int u);
    151 extern int alpm_dist_hitbit_enable_set(int u, int us);
    152 
    153 /* Extern fucntions for alpm_tr.c */
    154 typedef int (*bcm_esw_alpm_trace_dump_cb)(int u, void *user_data, char *log_data);
    155 
    156 extern int bcm_esw_alpm_trace_enabled(int u);
    157 extern int bcm_esw_alpm_trace_dump(int u, int showflags, bcm_esw_alpm_trace_dump_cb dump_cb, void *user_data);
    158 extern int bcm_esw_alpm_trace_cnt(int u);
    159 extern int bcm_esw_alpm_trace_seq(int u);
    160 extern int bcm_esw_alpm_trace_delete(int u);
    161 extern void bcm_esw_alpm_trace_delete_clear(int u);
    162 extern int bcm_esw_alpm_trace_init(int u);
    163 extern int bcm_esw_alpm_trace_deinit(int u);
    164 extern int bcm_esw_alpm_trace_set(int u, int val);
    165 extern int bcm_esw_alpm_trace_clear(int u);
    166 extern int bcm_esw_alpm_trace_sanity(int u, int enable, int start, int end);
    167 extern int bcm_esw_alpm_trace_wrap_set(int u, int val);
    168 extern int bcm_esw_alpm_trace_log(int u, int is_del, _bcm_defip_cfg_t *cfg, int nh_idx, int rc);
    169 
    170 /* Extern functions for alpm_ts.c */
    171 typedef int (*bcm_esw_alpm_data_cb)(int u, void *fp, char *data, int num);
    172 
    173 extern int bcm_esw_alpm_data_save(int u, bcm_esw_alpm_data_cb write_cb, void *fp);
    174 extern int bcm_esw_alpm_data_restore(int u, bcm_esw_alpm_data_cb read_cb, void *fp);
    175 extern void bcm_esw_alpm_sw_dump(int u);
    176 extern int bcm_esw_alpm_debug_show(int u, int app, int vrf_id, uint32 flags);
    177 extern int bcm_esw_alpm_debug_brief_show(int u, int app, int bucket, int index);
    178 extern int bcm_esw_alpm_sanity_check(int u, int app, soc_mem_t mem, int index,
    179                                      int check_sw);
    180 
    181 /* External definitions for dbg_info */
    182 #define _ALPM_DBG_INFO_PVT  (1 << 0)
    183 #define _ALPM_DBG_INFO_RTE  (1 << 1)
    184 #define _ALPM_DBG_INFO_CNT  (1 << 2)
    185 #define _ALPM_DBG_INFO_HIT  (1 << 3)
    186 #define _ALPM_DBG_INFO_MAX_NUM    4
    187 #define _ALPM_DBG_INFO_ALL  0xffffffff
    188 
    189 extern int alpm_dbg_info_bmp_show(int u);
    190 extern int alpm_dbg_info_bmp_set(int u, uint32 flags);
    191 extern int alpm_dbg_bmp_set(int u, uint32 dbg_bmp);
    192 
    193 /* External definitions for dump functions */
    194 extern int alpm_cb_pvt_dump(int u, int app, int acb_bmp, int bkt_idx);
    195 extern int alpm_cb_fmt_dump(int u, int app, int acb_bmp);
    196 extern int alpm_cb_pvtlen_dump(int u, int app, int acb_bmp);
    197 extern int alpm_cb_bkt_dump(int u, int app, int acb_bmp);
    198 extern int alpm_cb_stat_dump(int u, int app, int acb_bmp);
    199 extern int alpm_cb_conf_dump(int u, int app, int acb_bmp);
    200 extern int alpm_trie_show(int u, int app, bcm_vrf_t vrf,
    201                           bcm_l3_alpm_ipt_t ipt,
    202                           int trie_type, int acb_bmp);
    203 
    204 /* Other Externs */
    205 extern int bcm_esw_alpm_route_capacity_get(int u, soc_mem_t mem,
    206                                            int *max_entries, int *min_entries);
    207 extern void bcm_esw_bkt_node_flexctr_attr_get(uint32 *bnode, int *base_idx, int *ofst_mod, int *pool_num);
    208 extern void bcm_esw_bkt_node_flexctr_attr_set(uint32 *bnode, int base_idx, int ofst_mod, int pool_num);
    209 extern void th_alpm_table_ent_dump(int u, int app, int vrf_id, soc_mem_t mem, void *entry,
    210                 int copyno, int index, int fmt,
    211                 int ent_idx, int flags, char *pfx);
    212 extern void alpm_util_fmt_tbl_util(int unit, char *buf);
    213 extern void alpm_util_fmt_ipaddr(char buf[SAL_IPADDR_STR_LEN], ip_addr_t ipaddr);
    214 extern void alpm_util_fmt_ip6addr(char buf[IP6ADDR_STR_LEN], ip6_addr_t ipaddr);
    215 
    216 extern int  alpm_table_dump(int u, int app, int vrf_id, soc_mem_t mem, int copyno, int index,
    217                             int fmt, int ent_idx, int flags);
    218 
    219 extern int bcm_esw_alpm_resource_get(int u, bcm_l3_route_group_t grp, bcm_l3_alpm_resource_t *res);
    220 extern int alpm_resource_info_get(int u, _alpm_resource_info_t *info);
    221 
    222 extern int alpm_resource_usage_dump(int u);
    223 extern int alpm_resource_usage_show(int u);
    224 extern int alpm_route_projection(int u, int v4v6_ratio);
    225 
    226 extern int bcm_esw_alpm_route_grp_projection(int u, bcm_l3_route_group_t grp,
    227                                              _alpm_resource_info_t *info,
    228                                              int *prj_route, int *def_lvl, int *def_usage);
    229 extern int bcm_esw_alpm_route_grp_testdb(int u, bcm_l3_route_group_t grp,
    230                                          _alpm_resource_info_t *info,
    231                                          int *max_route, int *mix_route, int v4v6_ratio,
    232                                          int *def_lvl, int *def_usage);
    233 
    234 extern int bcm_esw_alpm_trace_cb_register(int unit,
    235                                           bcm_l3_alpm_trace_cb_f write_cb,
    236                                           void *user_data);
    237 extern int bcm_esw_alpm_trace_cb_unregister(int unit,
    238                                             bcm_l3_alpm_trace_cb_f write_cb);
    239 
    240 extern int bcm_esw_alpm_defrag(int u,
    241                                bcm_vrf_t vrf,
    242                                bcm_l3_alpm_ipt_t ipt,
    243                                int max_time_ms,
    244                                int max_l2_merge_cnt,
    245                                int max_l3_merge_cnt,
    246                                int *l2_merge_cnt,
    247                                int *l3_merge_cnt);
    248 
    249 #endif /* ALPM_ENABLE */
    250 
    251 #endif /* _BCM_INT_ALPM_H_ */
    252