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

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 */