diag.h (7083B)
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: diag.h 8 * Purpose: 9 */ 10 11 #ifndef _DIAG_H_ 12 #define _DIAG_H_ 13 14 #include <soc/defs.h> 15 #include <bcm/port.h> 16 #include <bcm/switch.h> 17 #include <bcm/link.h> 18 19 #include <sal/types.h> 20 #include <appl/diag/shell.h> 21 #include <soc/portmode.h> 22 #include <soc/register.h> 23 #include <soc/types.h> 24 25 #define SOC_CLI_THREAD_PRI 100 26 #define SOC_BG_THREAD_PRI (SOC_CLI_THREAD_PRI+10) 27 28 extern cmd_t *cur_cmd_list[SOC_MAX_NUM_DEVICES]; 29 extern int cur_cmd_cnt[SOC_MAX_NUM_DEVICES]; 30 31 /* These commands are visible in all (both) modes */ 32 extern cmd_t bcm_cmd_common[]; 33 extern int bcm_cmd_common_cnt; 34 extern cmd_t* dyn_cmd_list[SOC_MAX_NUM_DEVICES]; 35 extern int dyn_cmd_cnt[SOC_MAX_NUM_DEVICES]; 36 37 extern int cur_mode[SOC_MAX_NUM_DEVICES]; 38 39 extern char *discard_mode[]; 40 extern char *linkscan_mode[]; 41 extern char *interface_mode[]; 42 extern char *phymaster_mode[]; 43 extern char *loopback_mode[]; 44 extern char *forward_mode[]; 45 extern char *encap_mode[]; 46 extern char *mdix_mode[]; 47 extern char *mdix_status[]; 48 extern char *medium_status[]; 49 50 51 52 53 #define _E2S(x, max, string_array) \ 54 ((((size_t)(x) < (max))) ? (string_array)[(x)] : "?") 55 56 #define DIAG_FUNC_STR_MATCH(_function, _string, _short_string) \ 57 !(sal_strncasecmp(function, _string, \ 58 SOC_SAND_MAX(sal_strlen(function), \ 59 sal_strlen(_string)))) || \ 60 !(sal_strncasecmp(function, _short_string, \ 61 SOC_SAND_MAX(sal_strlen(function),\ 62 sal_strlen(_short_string)))) 63 64 #define DISCARD_MODE(x) _E2S(x, BCM_PORT_DISCARD_COUNT, discard_mode) 65 #define LINKSCAN_MODE(x) _E2S(x, BCM_LINKSCAN_MODE_COUNT, linkscan_mode) 66 #define INTERFACE_MODE(x) _E2S(x, BCM_PORT_IF_COUNT, interface_mode) 67 #define PHYMASTER_MODE(x) _E2S(x, BCM_PORT_MS_COUNT, phymaster_mode) 68 #define LOOPBACK_MODE(x) _E2S(x, BCM_PORT_LOOPBACK_COUNT, loopback_mode) 69 #define FORWARD_MODE(x) _E2S(x, BCM_STG_STP_COUNT, forward_mode) 70 #define ENCAP_MODE(x) _E2S(x, COUNTOF(encap_mode), encap_mode) 71 #define MDIX_MODE(x) _E2S(x, BCM_PORT_MDIX_COUNT, mdix_mode) 72 #define MDIX_STATUS(x) _E2S(x, BCM_PORT_MDIX_STATUS_COUNT, mdix_status) 73 #define MEDIUM_STATUS(x) _E2S(x, BCM_PORT_MEDIUM_COUNT, medium_status) 74 #define MCAST_FLOOD(x) _E2S(x, BCM_PORT_MCAST_FLOOD_COUNT, mcast_flood) 75 76 extern void command_mode_set(int unit, int mode); 77 extern int command_mode_get(int unit); 78 79 typedef enum sh_cmd_mode_e { 80 BCMX_CMD_MODE, 81 ESW_CMD_MODE, 82 DPP_CMD_MODE, 83 DNX_CMD_MODE, 84 DNXF_CMD_MODE, 85 ILLEGAL_CMD_MODE 86 } sh_cmd_mode_t; 87 88 /* 89 * Switch-case enums for Custom handler 90 */ 91 #define CUSTOM_HANDLER_STAT_GET 1 92 #define CUSTOM_HANDLER_STAT_SYNC_GET 2 93 #define CUSTOM_HANDLER_VLAN_GET 3 94 95 96 #define DSC3B0_CDR_STATUS2_OSCDR_MODE_MASK 0x01c0 97 #define DSC3B0_CDR_STATUS2_OSCDR_MODE_SHIFT 6 98 99 /* System related diag functions */ 100 extern void _diag_assert(const char *expr, const char *file, int line); 101 102 /* Port related diag functions */ 103 extern void brief_port_info_header(int unit); 104 extern int brief_port_info(int unit, int port, bcm_port_info_t *info, 105 uint32 flags); 106 extern void disp_port_info(int unit, char *port_ref, bcm_port_t port, bcm_port_info_t *info, 107 int st_port, uint32 flags); 108 extern void port_parse_setup(int unit, parse_table_t *pt, 109 bcm_port_info_t *info); 110 extern void port_parse_mask_get(parse_table_t *pt, uint32 *seen, 111 uint32 *parsed); 112 extern int port_parse_port_info_set(uint32 flags, 113 bcm_port_info_t *src, bcm_port_info_t *dest); 114 115 extern void port_info_init(int unit, int port, bcm_port_info_t *info, 116 uint32 actions); 117 extern void format_port_speed_ability(char *buf, int bufsize, soc_port_mode_t ability); 118 extern void format_port_intf_ability(char *buf, int bufsize, soc_port_mode_t ability); 119 extern void format_port_medium_ability(char *buf, int bufsize, soc_port_mode_t ability); 120 extern void format_port_pause_ability(char *buf, int bufsize, soc_port_mode_t ability); 121 extern void format_port_lb_ability(char *buf, int bufsize, soc_port_mode_t ability); 122 extern void format_port_flags_ability(char *buf, int bufsize, soc_port_mode_t ability); 123 124 extern cmd_result_t _phy_diag_eyescan(int unit, bcm_pbmp_t pbmp,args_t *args); 125 extern cmd_result_t _phy_diag_pcs(int unit, bcm_pbmp_t pbmp,args_t *args); 126 extern cmd_result_t _phy_diag_berproj(int unit, bcm_pbmp_t pbmp, args_t *args); 127 extern int port_to_phyaddr(int unit, int port); 128 extern int port_to_phyaddr_int(int unit, int port); 129 extern int port_diag_ctrl(int unit, int port, uint32 inst, int op_type, int op_cmd, void *arg); 130 extern char *get_core_str(int unit, int core); 131 extern char *if_fmt_speed(char *b, int speed); 132 133 #if defined(BCM_TOMAHAWK_SUPPORT) 134 extern int esw_brief_port_info(int unit, int port, bcm_port_info_t *info, 135 uint32 flags); 136 #endif 137 138 139 /* Register/mem diagnostic functions */ 140 typedef soc_reg_above_64_val_t reg_val; 141 typedef uint32 mem_val[SOC_MAX_MEM_WORDS]; 142 143 extern int diag_reg_bits(int unit, char* reg_name); 144 extern int diag_reg_field_bits(int unit, char *reg_name, char* field_name); 145 146 extern int diag_reg_get(int unit, char *name, reg_val value); 147 extern int diag_reg_field_get(int unit, char *name, char* field_name, 148 reg_val value); 149 extern int diag_reg_field_only_get(int unit, char *name, reg_val reg_value, char* field_name, 150 reg_val field_value); 151 152 extern int diag_reg_set(int unit, char *name, reg_val value); 153 extern int diag_reg_field_set(int unit, char *name, char* field_name, 154 reg_val value); 155 156 extern int diag_reg_field_only_set(int unit, char *name, reg_val reg_value, char* field_name, 157 reg_val field_value); 158 159 extern int diag_mem_get(int unit, char *name, int index, mem_val value); 160 extern int diag_mem_field_get(int unit, char *name, char* field_name, 161 int index, mem_val value); 162 extern int diag_mem_field_only_get(int unit, char *name, char* field_name, 163 int index, mem_val value); 164 extern int diag_soc_mem_read_range(int unit, char *name, int index1, 165 int index2, void *buffer); 166 167 extern int diag_mem_set(int unit, char *name, int start, int count, 168 mem_val value); 169 extern int diag_mem_field_set(int unit, char *name, char* field_name, 170 int start, int count, mem_val value); 171 extern int diag_mem_field_only_set(int unit, char *name, char* field_name, 172 int start, int count, mem_val value); 173 extern int diag_soc_mem_write_range(int unit, char *name, int index1, 174 int index2, void *buffer); 175 176 #endif /* _DIAG_H_ */