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

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