qmod16_main.h (8473B)
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 * Broadcom Corporation 8 * Proprietary and Confidential information 9 * $Copyright: (c) 2012 Broadcom Corp. 10 * All Rights Reserved.$ 11 * This source file is the property of Broadcom Corporation, and 12 * may not be copied or distributed in any isomorphic form without the 13 * prior written consent of Broadcom Corporation. 14 *---------------------------------------------------------------------- 15 * Description: Main header file for TEMod. 16 *---------------------------------------------------------------------*/ 17 18 #ifndef _QMOD16_MAIN_H_ 19 #define _QMOD16_MAIN_H_ 20 21 #ifndef STATIC 22 #define STATIC static 23 #endif /* STATIC */ 24 25 #include <stdio.h> 26 #include <string.h> 27 #include <stdlib.h> 28 #include "errno.h" 29 30 #include "qmod16_defines.h" 31 32 #ifndef STANDALONE 33 #define printf io_printf 34 #endif 35 36 #ifdef CADENCE 37 #include <veriuser.h> 38 #endif /* CADENCE */ 39 40 #ifdef SYNOPSYS 41 #include <vcsuser.h> 42 #endif /* SYNOPSYS */ 43 44 typedef unsigned char uint8_t; /* 8-bit quantity */ 45 typedef unsigned short uint16_t; /* 16-bit quantity */ 46 typedef unsigned int uint32_t; /* 32-bit quantity */ 47 48 typedef uint32_t sal_usecs_t; /* from "sal/core/time.h" */ 49 typedef int soc_port_t; /* from "soc/types.h" */ 50 51 #define SOC_MAX_NUM_PORTS 72 52 #define NUM_PORTS SOC_MAX_NUM_PORTS 53 54 #define SOC_E_MULT_REG 1 /*! not error, but multiple regs. */ 55 #define SOC_E_FUNC_NOT_FOUND 3 /*! tier1 not found. Continue search */ 56 #define PHYMOD_E_NONE 0 /*! No errors */ 57 #define SOC_E_UNAVAIL -1 /*! register or resource not there */ 58 #define SOC_E_FAIL -2 /*! catchall completion failure */ 59 #define SOC_E_TIMEOUT -3 /*! register access timeout */ 60 #define PHYMOD_E_FAIL -4 /*! catchall failure */ 61 #define SOC_E_FUNC_ERROR -5 /*! function found. But did not execute well. */ 62 #define SOC_E_PARAM -6 63 64 #define INT_PHY_SW_STATE(unit, port) (int_phy_ctrl[unit][port]) 65 66 #define TE_REG_READ(_unit, _pc, _flags, _reg_addr, _val) \ 67 qmod16_reg_aer_read((_unit), (_pc), (_reg_addr), (_val)) 68 69 #define TE_REG_WRITE(_unit, _pc, _flags, _reg_addr, _val) \ 70 qmod16_reg_aer_write((_unit), (_pc), (_reg_addr), (_val)) 71 72 #define TE_REG_MODIFY(_unit, _pc, _flags, _reg_addr, _val, _mask) \ 73 qmod16_reg_aer_modify((_unit), (_pc), (_reg_addr), (_val),(_mask)) 74 75 #define TE_UDELAY(_time) sal_udelay(_time) 76 77 #define WC40_REG_READ(_unit, _pc, _flags, _reg_addr, _val) \ 78 wcmod_reg_aer_read((_unit), (_pc), (_reg_addr), (_val)) 79 80 #define WC40_REG_WRITE(_unit, _pc, _flags, _reg_addr, _val) \ 81 wcmod_reg_aer_write((_unit), (_pc), (_reg_addr), (_val)) 82 83 #define WC40_REG_MODIFY(_unit, _pc, _flags, _reg_addr, _val, _mask) \ 84 wcmod_reg_aer_modify((_unit), (_pc), (_reg_addr), (_val),(_mask)) 85 86 #define WC40_UDELAY(_time) sal_udelay(_time) 87 88 #define PHYMOD_DEBUG_ERROR(stuff_) printf stuff_ 89 90 #define PHYMOD_IF_ERR_RETURN(op) \ 91 do { int __rv__; if ((__rv__ = (op)) < 0) \ 92 { PHYMOD_DEBUG_ERROR ((__FILE__ " : " #op " %d\n", __LINE__)); \ 93 return(__rv__);} } \ 94 while(0) 95 96 #define PHYMOD_VDBG(flags_, pa_, stuff_) \ 97 if (phymod_debug_check(flags_, pa_)) \ 98 PHYMOD_DEBUG_ERROR (stuff_) 99 100 #define PHY_AER_REG_ADDR_AER(_addr) (((_addr) >> 16) & 0x0000FFFF) 101 #define PHY_AER_REG_ADDR_BLK(_addr) (((_addr) & 0x000FFF0)) 102 #define PHY_AER_REG_ADDR_REGAD(_addr) ((((_addr) & 0x00008000) >> 11) | \ 103 ((_addr) & 0x0000000F)) 104 105 #define FALSE 0 106 #define TRUE 1 107 108 /* Borrowed from SDK. This struct controls iterations and time durations 109 * while executing a 'wait' or a 'poll'. No doxygen documentation for this. 110 */ 111 typedef struct soc_timeout_s 112 { 113 sal_usecs_t expire; 114 sal_usecs_t usec; 115 int min_polls; 116 int polls; 117 int exp_delay; 118 } soc_timeout_t; 119 120 typedef enum { 121 TEMOD_PRBS_POLYNOMIAL_7 = 0, 122 TEMOD_PRBS_POLYNOMIAL_9, 123 TEMOD_PRBS_POLYNOMIAL_11, 124 TEMOD_PRBS_POLYNOMIAL_15, 125 TEMOD_PRBS_POLYNOMIAL_23, 126 TEMOD_PRBS_POLYNOMIAL_31, 127 TEMOD_PRBS_POLYNOMIAL_58, 128 TEMOD_PRBS_POLYNOMIAL_TYPE_COUNT 129 }prbs_polynomial_type_t; 130 131 typedef enum { 132 TSCMOD_CL72_HW_ENABLE = 0, 133 TSCMOD_CL72_HW_DISABLE, 134 TSCMOD_CL72_HW_RESTART, 135 TSCMOD_CL72_HW_RESTART_STOP, 136 TSCMOD_CL72_AN_FORCED_ENABLE, 137 TSCMOD_CL72_AN_FORCED_DISABLE, 138 TSCMOD_CL72_AN_NO_FORCED, 139 TEMOD_CL72_TYPE_COUNT 140 }cl72_type_t; 141 142 typedef enum { 143 TEMOD_AN_SET_RF_DISABLE = 0, 144 TEMOD_AN_SET_SGMII_SPEED, 145 TEMOD_AN_SET_SGMII_MASTER, 146 TEMOD_AN_SET_HG_MODE, 147 TEMOD_AN_SET_FEC_MODE, 148 TEMOD_AN_SET_CL72_MODE, 149 TEMOD_AN_SET_CL37_ATTR, 150 TEMOD_AN_SET_CL48_SYNC, 151 TEMOD_AN_SET_LK_FAIL_INHIBIT_TIMER_NO_CL72, 152 TEMOD_AN_SET_CL73_FEC_OFF, 153 TEMOD_AN_SET_CL73_FEC_ON, 154 TEMOD_AN_SET_SPEED_PAUSE, 155 TEMOD_AN_SET_TYPE_COUNT 156 }qmod16_an_set_type_t; 157 158 #define TE40_XGXSBLK0_XGXSSTATUSr 0x8001 159 #define TE40_PLL_WAIT 2500 160 #define TE40_RX_X4_STATUS1_PMA_PMD_LIVE_STATUSr 0xc150 161 #define DSC1B0_UC_CTRLr 0xc20e 162 163 #define NUMBER_PCS_FUNCTION_TABLE_ENTRIES 100 164 165 #define TEMOD_ENABLE 0x1 166 #define TEMOD_DISABLE 0x0 167 168 #define TEMOD_MODEL_TE 0x11 169 170 #define TEMOD_DBG_FLOW 0x1 171 #define TEMOD_DBG_REG 0x2 172 #define TEMOD_DBG_MDIO 0x4 173 #define TEMOD_DBG_WRCHK 0x8 174 #define TEMOD_DBG_FUNC 0x10 175 #define TEMOD_DBG_SUB 0x40 176 #define TEMOD_DBG_SPD 0x100 177 #define TEMOD_DBG_AN 0x400 178 #define TEMOD_DBG_DSC 0x1000 179 #define TEMOD_DBG_TXDRV 0x2000 180 #define TEMOD_DBG_LINK 0x4000 181 #define TEMOD_DBG_PATH 0x8000 182 #define TEMOD_DBG_TO 0x10000 183 #define TEMOD_DBG_INIT 0x40000 184 #define TEMOD_DBG_CFG 0x100000 185 #define TEMOD_DBG_PAT 0x400000 186 #define TEMOD_DBG_UC 0x1000000 187 #define TEMOD_DBG_SCAN 0x4000000 188 #define TEMOD_DBG_ERROR 0x8000000 189 190 #define USE_CJPAT 1 191 #define USE_CRPAT 2 192 193 #define TEMOD_DIAG_PRBS_LANE_EN_GET 1 194 #define TEMOD_DIAG_PRBS_POLYNOMIAL_GET 2 195 #define TEMOD_DIAG_PRBS_INVERT_DATA_GET 3 196 #define TEMOD_DIAG_PRBS_MODE_GET 4 197 198 #define TEMOD_DIAG_P_HELP 0 199 #define TEMOD_DIAG_P_VERB 1 200 #define TEMOD_DIAG_P_LINK_UP_BERT 2 201 #define TEMOD_DIAG_P_RAM_WRITE 3 202 #define TEMOD_DIAG_P_CTRL_TYPE 4 203 #define TEMOD_DIAG_P_AN_CTL 5 204 205 #define TEMOD_CTRL_TYPE_DEFAULT 0x378a7000 206 #define TEMOD_CTRL_TYPE_MASK 0xfff 207 #define TEMOD_CTRL_TYPE_LB 0x1 208 #define TEMOD_CTRL_TYPE_HG 0x4 209 #define TEMOD_CTRL_TYPE_LINK_BER 0x8 210 #define TEMOD_CTRL_TYPE_FW_LOADED 0x10 211 #define TEMOD_CTRL_TYPE_FAULT_DIS 0x20 212 #define TEMOD_CTRL_TYPE_FW_AVAIL 0x40 213 #define TEMOD_CTRL_TYPE_PRBS_M2 0x80 214 #define TEMOD_CTRL_TYPE_CL72_ON 0x100 215 #define TEMOD_CTRL_TYPE_UC_STALL 0x200 216 217 218 #define TEMOD_REG_RD 0 219 #define TEMOD_REG_WR 1 220 #define TEMOD_REG_MO 2 221 222 #define TEMOD_AN_CTL_LINK_FAIL_ZERO_TIMER 0x1 223 #define TEMOD_AN_CTL_CL73_ERROR_TIMER 0x2 224 225 typedef struct strToPCSFunction { 226 char* p; 227 int (*fp)(qmod16_st*); 228 } str2PCSFn; 229 230 231 extern str2PCSFn str2PCSFunc; 232 233 234 int qmod16_diag(qmod16_st *ws, qmod16_diag_type diag_type); 235 extern void init_qmod16_st(/* INOUT */qmod16_st *ws); 236 extern void qmod16_init_called(int x); 237 extern void qmod16_init(void); 238 extern void qmod16_tier1_selector(qmod16_tier1_function_type tier1_type,qmod16_st* c, int *retVal); 239 extern void qmod16_read_cfg(const char* fileName); 240 extern void print_config(int unit, int port); 241 extern int qmod16_searchPCSFuncTable(const char* selStr, qmod16_st* ws); 242 extern void copy_qmod16_st(qmod16_st *from, qmod16_st *to); 243 extern const char* getLaneStr(qmod16_lane_select ls); 244 extern qmod16_spd_intfc_type qmod16_spd_intf_s2e(char* s); 245 extern qmod16_lane_select getLaneSelect(int lane) ; 246 247 int qmod16_diag(qmod16_st *ws, qmod16_diag_type diag_type); 248 249 #endif /* _QMOD16_MAIN_H_ */