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