system.h (12767B)
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 * This header file defines important constants and structures for 8 * use with the SOC Diagnostics Shell which is built upon the SOC 9 * driver and SAL (System Abstraction Layer) 10 */ 11 12 #ifndef _DIAG_SYSTEM_H 13 #define _DIAG_SYSTEM_H 14 15 #ifndef __KERNEL__ 16 #include <stdlib.h> 17 #include <string.h> 18 #include <ctype.h> 19 #else 20 #include <sal/core/libc.h> 21 #endif 22 23 #include <soc/drv.h> 24 #include <soc/debug.h> 25 26 #include <sal/core/thread.h> 27 28 #include <bcm/types.h> 29 30 #include <appl/diag/cmdlist.h> 31 #include <sal/appl/sal.h> 32 33 #include <bcm/l2.h> 34 #include <bcm/l3.h> 35 #include <bcm/tunnel.h> 36 37 #include <bcm/field.h> 38 #include <bcm/switch.h> 39 40 /* 41 * Define: SOC_SCRIPT_EXT 42 * Purpose: Define standard BCM script file name extension 43 */ 44 #ifndef SOC_SCRIPT_EXT 45 #define SOC_SCRIPT_EXT ".soc" 46 #endif 47 48 /* 49 * Define: SOC_INIT_RC 50 * Purpose: Defines a default run command/init file to load on startup. 51 * This is read from the default directory, which is commonly 52 * the same as where the image was booted from. 53 * This can be overridden globally by defining SOC_INIT_RC 54 * on the compile line, or on a per-unit basis by calling 55 * diag_rc_set() before diag_shell(). 56 */ 57 #ifndef SOC_INIT_RC 58 #define SOC_INIT_RC "rc.soc" 59 #endif 60 61 /* 62 * Register types we understand 63 */ 64 65 typedef struct regtype_entry_t { 66 char *name; /* Name of register for setreg/getreg commands */ 67 soc_regtype_t type; /* Type of register (e.g. soc_cpureg) */ 68 char *help; /* Description of register for help command */ 69 } regtype_entry_t; 70 71 72 73 #define REGTEST_FLAG_MINIMAL 0x0001 74 #define REGTEST_FLAG_MASK64 0x0002 75 #define REGTEST_FLAG_INC_PORT_MACROS 0x0004 76 #define REGTEST_FLAG_ACCESS_ONLY 0x0008 77 #define SOC_REG_FIRST_BLK_TYPE(regblklist) regblklist[0] 78 79 typedef struct reg_data { 80 int unit; 81 int start_from; 82 int count; 83 int error; 84 int flags; 85 } reg_data_t; 86 87 88 extern regtype_entry_t *regtype_lookup_name(char *str); 89 extern void regtype_print_all(void); 90 91 92 /* 93 * Diagnostic shell utilities: diag/util.c 94 */ 95 96 #define FORMAT_PBMP_MAX 400 /* "0xdeadbeefdeadbeef; fe0,fe2,....ge2,hg" */ 97 #define FORMAT_GPORT_MAX 128 98 99 extern int i2xdigit(int digit); 100 extern int xdigit2i(int digit); 101 extern int isint(char *); 102 extern void tabify_line(char *out, char *in, int tab_width); 103 extern sal_vaddr_t parse_address(char *str); 104 extern uint32 parse_integer(char *str); 105 extern int parse_small_integers(int unit, char *s, soc_pbmp_t *pbmp); 106 extern int diag_parse_range(char *low, char *high, 107 int *min, int *max, 108 int legal_min, int legal_max); 109 extern void parse_long_integer(uint32 *val, int nval, char *str); 110 extern void format_long_integer(char *buf, uint32 *val, int nval); 111 extern void format_spec_long_integer(char *buf, uint32 *val, int nval); 112 extern void add_long_integer(uint32 *dst, uint32 *src, int nval); 113 extern void sub_long_integer(uint32 *dst, uint32 *src, int nval); 114 extern void neg_long_integer(uint32 *dst, int nval); 115 extern void format_uint64(char *buf, uint64 n); 116 extern void format_uint64_decimal(char *buf, uint64 n, int comma); 117 extern uint64 parse_uint64(char *str); 118 extern int parse_macaddr(char *str, sal_mac_addr_t macaddr); 119 extern void format_macaddr(char buf[MACADDR_STR_LEN], sal_mac_addr_t macaddr); 120 extern void increment_macaddr(sal_mac_addr_t macaddr, int amount); 121 extern int parse_ipaddr(char *str, ip_addr_t *ipaddr); 122 extern int parse_ip6addr(char *str, ip6_addr_t ipaddr); 123 extern void increment_ip6addr(ip6_addr_t ipaddr, uint32 byte_pos, int amount); 124 extern void format_ipaddr(char buf[IPADDR_STR_LEN], ip_addr_t ipaddr); 125 extern void format_ipaddr_mask(char *buf, ip_addr_t ipaddr, ip_addr_t mask); 126 extern void format_ip6addr(char buf[IP6ADDR_STR_LEN], ip6_addr_t ipaddr); 127 extern int parse_pbmp(int unit, char *s, soc_pbmp_t *pbmp); 128 extern int parse_pp_pbmp(int unit, char *s, soc_pbmp_t *pbmp); 129 extern int parse_bcm_pbmp(int unit, char *s, bcm_pbmp_t *pbmp); 130 extern int parse_pbmp_no_error(int unit, char *s, soc_pbmp_t *pbmp); 131 extern char *format_pbmp(int unit, char *buf, int bufsize, soc_pbmp_t pbmp); 132 extern char *format_bcm_pbmp(int unit, char *buf, int bufsize, bcm_pbmp_t pbmp); 133 extern char *bcm_port_name(int unit, int port); 134 extern char *mod_port_name(int unit, int modid, int port); 135 extern int parse_port(int unit, char *s, soc_port_t *portp); 136 extern char *format_gport(char *buf, bcm_gport_t gport); 137 extern int parse_gport(int unit, char *s, soc_port_t *portp); 138 extern int parse_bcm_port(int unit, char *s, bcm_port_t *portp); 139 extern int parse_mod_port(int unit, char *s, bcm_mod_port_t *mp); 140 extern bcm_field_qualify_t parse_field_qualifier(char *str); 141 extern char *format_field_qualifier(char *buf, bcm_field_qualify_t qual, 142 int brief); 143 extern int parse_field_qset(char *str, bcm_field_qset_t *qset); 144 extern char *format_field_qset(char *buf, bcm_field_qset_t qset, 145 char *separator); 146 extern bcm_field_group_mode_t parse_field_group_mode(char *str); 147 extern char *format_field_group_mode(char *buf, bcm_field_group_mode_t mode, 148 int brief); 149 extern bcm_field_action_t parse_field_action(char *str); 150 extern char *format_field_action(char *buf, bcm_field_action_t action, 151 int brief); 152 extern int parse_field_aset(char *str, bcm_field_aset_t *aset, uint8 add); 153 extern char *format_field_aset(char *buf, bcm_field_aset_t aset, 154 char *separator); 155 156 extern bcm_field_decap_t parse_field_decap(char *str); 157 extern bcm_field_MplsOam_Control_pktType_t parse_field_MplsOamCtrlPktType(char *str); 158 extern bcm_field_oam_type_t parse_field_oam_type(char *str); 159 extern bcm_field_olp_header_type_t parse_field_olp_hdr_type(char *str); 160 extern bcm_field_roe_frame_type_t parse_field_roe_frame_type(char *str); 161 extern char *format_field_decap(char *buf, bcm_field_decap_t decap); 162 extern int parse_num_range(int unit, char *s, int *min, int *max, 163 int legal_min, int legal_max); 164 extern int parse_block_range(int unit, soc_block_types_t regtype, char *s, 165 int *min, int *max, soc_block_types_t mask); 166 extern int parse_memory_name(int unit, soc_mem_t *result, char *str, int *copyno, unsigned *array_index); 167 extern int parse_memory_index(int unit, soc_mem_t mem, char *val_str); 168 extern unsigned parse_memory_array_index(int unit, soc_mem_t mem, char *val_str); 169 extern int parse_cmic_regname(int unit, char *name, uint32 *offset_ptr); 170 extern int parse_port_mode(char *str, soc_port_mode_t *mode); 171 extern int parse_port_ability(char *str, soc_port_ability_t *mode); 172 extern void format_port_mode(char *buf, int bufsize, 173 soc_port_mode_t mode, int abbrev); 174 extern char *format_system_control(bcm_switch_control_t control); 175 176 extern pbmp_t soc_property_get_bcm_pbmp(int unit, const char *name, int defneg); 177 extern uint32 soc_property_bcm_port_get(int unit, bcm_port_t aport, const char *name, uint32 defl); 178 179 extern int parse_phy_control_longreach_ability(char *str, 180 soc_phy_control_longreach_ability_t *ability); 181 extern void format_phy_control_longreach_ability(char *buf, int bufsize, 182 soc_phy_control_longreach_ability_t ability); 183 184 extern int parse_format_name(int unit, char *str, soc_format_t *format); 185 186 #ifdef __KERNEL__ 187 #include <linux/kernel.h> 188 extern char *strtok(char *s, const char *delim); 189 #endif 190 extern const char *strcaseindex(const char *s, const char *sub); 191 extern char *strrepl(char *s, int start, int len, const char *repstr); 192 193 extern uint32 packet_load(uint8 *addr, int size); 194 extern void packet_random_store(uint8 *buf, int size); 195 extern uint32 packet_store(uint8 *buf, int size, uint32 val, uint32 inc); 196 extern int packet_compare(uint8 *p1, uint8 *p2, int size); 197 extern void dump_l2_addr(int unit, char *pfx, bcm_l2_addr_t *l2addr); 198 extern void dump_l2_cache_addr(int unit, char *pfx, bcm_l2_cache_addr_t *l2caddr); 199 200 201 #define BCM_PORT_NAME(_u,_p) bcm_port_name(_u,_p) 202 203 /* 204 * A couple of routines in reg.c 205 */ 206 207 #define REG_PRINT_HEX 0x01 208 #define REG_PRINT_RAW 0x02 209 #define REG_PRINT_DO_PRINT 0x04 210 #define REG_PRINT_CHG 0x08 211 #define REG_PRINT_ADDR 0x10 212 #define REG_PRINT_BLOCK 0x20 213 214 extern void reg_print(int unit, soc_regaddrinfo_t *ainfo, uint64 val, uint32 flags, 215 char *fld_sep, int wrap, char *field_names); 216 extern int reg_print_all(int unit, soc_regaddrlist_t *alist, uint32 flags, char *field_names); 217 218 /* 219 * symtab.c 220 */ 221 extern void init_symtab(void); 222 223 extern int parse_symbolic_reference(int unit, soc_regaddrlist_t *alist, char *ref); 224 225 /* 226 * reg_skip.c 227 */ 228 extern int reg_mask_subset(int unit, soc_regaddrinfo_t *ainfo, uint64 *mask); 229 extern int rval_test_skip_reg(int unit, soc_regaddrinfo_t *ainfo, reg_data_t *rd); 230 231 /* 232 * Shell routines: internal, used for diagnostics shell. 233 */ 234 235 extern void diag_init(void); 236 extern void diag_rc_set(int unit, const char *fname); 237 extern void diag_rc_get(int unit, const char **fname); 238 extern int diag_rc_load(int unit); 239 extern void diag_shell(void); 240 241 extern int parseEndOk(args_t *, parse_table_t *, cmd_result_t *); 242 243 #if defined(INCLUDE_EDITLINE) 244 extern int diag_list_possib(char *regpref, char ***avp); 245 extern char *diag_complete(char *regpref, int *unique); 246 #endif 247 248 #if defined (BCM_ESW_SUPPORT) || defined (BCM_DFE_SUPPORT)|| defined (BCM_PETRA_SUPPORT) 249 extern int bist_args_to_mems(int unit, args_t *a, soc_mem_t *mems, int *num_mems); 250 #endif 251 #ifdef BCM_PETRA_SUPPORT 252 extern uint8 blocks_can_be_disabled(soc_block_types_t blocks); 253 extern uint8 block_can_be_disabled(soc_block_type_t block); 254 #endif 255 256 /* Packet Watcher */ 257 258 extern int pw_running(int unit); 259 extern cmd_result_t pw_stop(int unit, int sync); 260 261 /* Build Information */ 262 263 extern char *_build_release; 264 extern char *_build_user; 265 extern char *_build_host; 266 extern char *_build_date; 267 extern char *_build_datestamp; 268 extern char *_build_tree; 269 extern char *_build_arch; 270 extern char *_build_os; 271 272 #define UNSUPPORTED_COMMAND(unit, chiptype, a)\ 273 if (SOC_CHIP_GROUP(unit) == chiptype) { \ 274 LOG_ERROR(BSL_LS_APPL_SHELL, \ 275 (BSL_META_U(unit, \ 276 "%s: command unsupported on %s\n"), \ 277 ARG_CMD(a), soc_dev_name(unit))); \ 278 ARG_DISCARD(a);\ 279 return CMD_OK; /* Don't error out, or scripts may fail */\ 280 } 281 282 /* counter.c */ 283 284 #define SHOW_CTR_CHANGED 0x01 285 #define SHOW_CTR_SAME 0x02 286 #define SHOW_CTR_Z 0x04 287 #define SHOW_CTR_NZ 0x08 288 #define SHOW_CTR_HEX 0x10 289 #define SHOW_CTR_RAW 0x20 290 #define SHOW_CTR_ED 0x40 291 #define SHOW_CTR_MS 0x80 292 #define SHOW_TOTAL 0x100 293 #define SHOW_SELECTED_PORTS 0x200 294 #define SHOW_FABRIC 0x400 295 #define SHOW_NIF 0x800 296 #define SHOW_COMPACT 0x1000 297 #define SHOW_FULL 0x2000 298 #define SHOW_CTR_DBG 0x4000 299 #define SHOW_CTR_ALL_QUEUE 0x8000 300 301 #define SHOW_INTR_Z 0x01 302 #define SHOW_INTR_MASK 0x02 303 #define SHOW_INTR_UNMASK 0x04 304 #define SHOW_INTR_ALL 0x08 305 306 extern void do_show_counter(int unit, soc_port_t port, soc_reg_t ctr_reg, 307 int ar_idx, int flags); 308 extern int do_show_counters(int unit, soc_reg_t ctr_reg, soc_pbmp_t pbmp, 309 int flags); 310 311 312 extern int do_resync_counters(int unit, soc_pbmp_t pbmp); 313 314 extern void counter_val_set_by_port(int unit, soc_pbmp_t pbmp, uint64 val); 315 316 extern int system_init(int unit); 317 extern int system_shutdown(int unit, int cleanup); 318 319 320 extern int sys_board_type_mng_get(void); 321 322 /* Memory watch utility */ 323 typedef struct mem_count_s { 324 uint32 rd_count_old; /* Read counter, updated by cmd "memwatch show" */ 325 uint32 rd_count_cur; /* Read counter which shows current counts */ 326 uint32 wr_count_old; /* Write counter, updated by cmd "memwatch show" */ 327 uint32 wr_count_cur; /* Write counter which shows current counts */ 328 } mem_count_t; 329 330 #endif /* !_DIAG_SYSTEM_H */