Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /****************************************************************************
0003  * Driver for Solarflare network controllers and boards
0004  * Copyright 2007-2013 Solarflare Communications Inc.
0005  */
0006 
0007 #ifndef EF4_ENUM_H
0008 #define EF4_ENUM_H
0009 
0010 /**
0011  * enum ef4_loopback_mode - loopback modes
0012  * @LOOPBACK_NONE: no loopback
0013  * @LOOPBACK_DATA: data path loopback
0014  * @LOOPBACK_GMAC: loopback within GMAC
0015  * @LOOPBACK_XGMII: loopback after XMAC
0016  * @LOOPBACK_XGXS: loopback within BPX after XGXS
0017  * @LOOPBACK_XAUI: loopback within BPX before XAUI serdes
0018  * @LOOPBACK_GMII: loopback within BPX after GMAC
0019  * @LOOPBACK_SGMII: loopback within BPX within SGMII
0020  * @LOOPBACK_XGBR: loopback within BPX within XGBR
0021  * @LOOPBACK_XFI: loopback within BPX before XFI serdes
0022  * @LOOPBACK_XAUI_FAR: loopback within BPX after XAUI serdes
0023  * @LOOPBACK_GMII_FAR: loopback within BPX before SGMII
0024  * @LOOPBACK_SGMII_FAR: loopback within BPX after SGMII
0025  * @LOOPBACK_XFI_FAR: loopback after XFI serdes
0026  * @LOOPBACK_GPHY: loopback within 1G PHY at unspecified level
0027  * @LOOPBACK_PHYXS: loopback within 10G PHY at PHYXS level
0028  * @LOOPBACK_PCS: loopback within 10G PHY at PCS level
0029  * @LOOPBACK_PMAPMD: loopback within 10G PHY at PMAPMD level
0030  * @LOOPBACK_XPORT: cross port loopback
0031  * @LOOPBACK_XGMII_WS: wireside loopback excluding XMAC
0032  * @LOOPBACK_XAUI_WS: wireside loopback within BPX within XAUI serdes
0033  * @LOOPBACK_XAUI_WS_FAR: wireside loopback within BPX including XAUI serdes
0034  * @LOOPBACK_XAUI_WS_NEAR: wireside loopback within BPX excluding XAUI serdes
0035  * @LOOPBACK_GMII_WS: wireside loopback excluding GMAC
0036  * @LOOPBACK_XFI_WS: wireside loopback excluding XFI serdes
0037  * @LOOPBACK_XFI_WS_FAR: wireside loopback including XFI serdes
0038  * @LOOPBACK_PHYXS_WS: wireside loopback within 10G PHY at PHYXS level
0039  */
0040 /* Please keep up-to-date w.r.t the following two #defines */
0041 enum ef4_loopback_mode {
0042     LOOPBACK_NONE = 0,
0043     LOOPBACK_DATA = 1,
0044     LOOPBACK_GMAC = 2,
0045     LOOPBACK_XGMII = 3,
0046     LOOPBACK_XGXS = 4,
0047     LOOPBACK_XAUI = 5,
0048     LOOPBACK_GMII = 6,
0049     LOOPBACK_SGMII = 7,
0050     LOOPBACK_XGBR = 8,
0051     LOOPBACK_XFI = 9,
0052     LOOPBACK_XAUI_FAR = 10,
0053     LOOPBACK_GMII_FAR = 11,
0054     LOOPBACK_SGMII_FAR = 12,
0055     LOOPBACK_XFI_FAR = 13,
0056     LOOPBACK_GPHY = 14,
0057     LOOPBACK_PHYXS = 15,
0058     LOOPBACK_PCS = 16,
0059     LOOPBACK_PMAPMD = 17,
0060     LOOPBACK_XPORT = 18,
0061     LOOPBACK_XGMII_WS = 19,
0062     LOOPBACK_XAUI_WS = 20,
0063     LOOPBACK_XAUI_WS_FAR = 21,
0064     LOOPBACK_XAUI_WS_NEAR = 22,
0065     LOOPBACK_GMII_WS = 23,
0066     LOOPBACK_XFI_WS = 24,
0067     LOOPBACK_XFI_WS_FAR = 25,
0068     LOOPBACK_PHYXS_WS = 26,
0069     LOOPBACK_MAX
0070 };
0071 #define LOOPBACK_TEST_MAX LOOPBACK_PMAPMD
0072 
0073 /* These loopbacks occur within the controller */
0074 #define LOOPBACKS_INTERNAL ((1 << LOOPBACK_DATA) |      \
0075                 (1 << LOOPBACK_GMAC) |      \
0076                 (1 << LOOPBACK_XGMII)|      \
0077                 (1 << LOOPBACK_XGXS) |      \
0078                 (1 << LOOPBACK_XAUI) |      \
0079                 (1 << LOOPBACK_GMII) |      \
0080                 (1 << LOOPBACK_SGMII) |     \
0081                 (1 << LOOPBACK_XGBR) |      \
0082                 (1 << LOOPBACK_XFI) |       \
0083                 (1 << LOOPBACK_XAUI_FAR) |      \
0084                 (1 << LOOPBACK_GMII_FAR) |      \
0085                 (1 << LOOPBACK_SGMII_FAR) |     \
0086                 (1 << LOOPBACK_XFI_FAR) |       \
0087                 (1 << LOOPBACK_XGMII_WS) |      \
0088                 (1 << LOOPBACK_XAUI_WS) |       \
0089                 (1 << LOOPBACK_XAUI_WS_FAR) |   \
0090                 (1 << LOOPBACK_XAUI_WS_NEAR) |  \
0091                 (1 << LOOPBACK_GMII_WS) |       \
0092                 (1 << LOOPBACK_XFI_WS) |        \
0093                 (1 << LOOPBACK_XFI_WS_FAR))
0094 
0095 #define LOOPBACKS_WS ((1 << LOOPBACK_XGMII_WS) |        \
0096               (1 << LOOPBACK_XAUI_WS) |         \
0097               (1 << LOOPBACK_XAUI_WS_FAR) |     \
0098               (1 << LOOPBACK_XAUI_WS_NEAR) |        \
0099               (1 << LOOPBACK_GMII_WS) |         \
0100               (1 << LOOPBACK_XFI_WS) |          \
0101               (1 << LOOPBACK_XFI_WS_FAR) |      \
0102               (1 << LOOPBACK_PHYXS_WS))
0103 
0104 #define LOOPBACKS_EXTERNAL(_efx)                    \
0105     ((_efx)->loopback_modes & ~LOOPBACKS_INTERNAL &         \
0106      ~(1 << LOOPBACK_NONE))
0107 
0108 #define LOOPBACK_MASK(_efx)         \
0109     (1 << (_efx)->loopback_mode)
0110 
0111 #define LOOPBACK_INTERNAL(_efx)             \
0112     (!!(LOOPBACKS_INTERNAL & LOOPBACK_MASK(_efx)))
0113 
0114 #define LOOPBACK_EXTERNAL(_efx)             \
0115     (!!(LOOPBACK_MASK(_efx) & LOOPBACKS_EXTERNAL(_efx)))
0116 
0117 #define LOOPBACK_CHANGED(_from, _to, _mask)             \
0118     (!!((LOOPBACK_MASK(_from) ^ LOOPBACK_MASK(_to)) & (_mask)))
0119 
0120 #define LOOPBACK_OUT_OF(_from, _to, _mask)              \
0121     ((LOOPBACK_MASK(_from) & (_mask)) && !(LOOPBACK_MASK(_to) & (_mask)))
0122 
0123 /*****************************************************************************/
0124 
0125 /**
0126  * enum reset_type - reset types
0127  *
0128  * %RESET_TYPE_INVSIBLE, %RESET_TYPE_ALL, %RESET_TYPE_WORLD and
0129  * %RESET_TYPE_DISABLE specify the method/scope of the reset.  The
0130  * other valuesspecify reasons, which ef4_schedule_reset() will choose
0131  * a method for.
0132  *
0133  * Reset methods are numbered in order of increasing scope.
0134  *
0135  * @RESET_TYPE_INVISIBLE: Reset datapath and MAC
0136  * @RESET_TYPE_RECOVER_OR_ALL: Try to recover. Apply RESET_TYPE_ALL
0137  * if unsuccessful.
0138  * @RESET_TYPE_ALL: Reset datapath, MAC and PHY
0139  * @RESET_TYPE_WORLD: Reset as much as possible
0140  * @RESET_TYPE_RECOVER_OR_DISABLE: Try to recover. Apply RESET_TYPE_DISABLE if
0141  * unsuccessful.
0142  * @RESET_TYPE_DATAPATH: Reset datapath only.
0143  * @RESET_TYPE_DISABLE: Reset datapath, MAC and PHY; leave NIC disabled
0144  * @RESET_TYPE_TX_WATCHDOG: reset due to TX watchdog
0145  * @RESET_TYPE_INT_ERROR: reset due to internal error
0146  * @RESET_TYPE_RX_RECOVERY: reset to recover from RX datapath errors
0147  * @RESET_TYPE_DMA_ERROR: DMA error
0148  * @RESET_TYPE_TX_SKIP: hardware completed empty tx descriptors
0149  */
0150 enum reset_type {
0151     RESET_TYPE_INVISIBLE,
0152     RESET_TYPE_RECOVER_OR_ALL,
0153     RESET_TYPE_ALL,
0154     RESET_TYPE_WORLD,
0155     RESET_TYPE_RECOVER_OR_DISABLE,
0156     RESET_TYPE_DATAPATH,
0157     RESET_TYPE_DISABLE,
0158     RESET_TYPE_MAX_METHOD,
0159     RESET_TYPE_TX_WATCHDOG,
0160     RESET_TYPE_INT_ERROR,
0161     RESET_TYPE_RX_RECOVERY,
0162     RESET_TYPE_DMA_ERROR,
0163     RESET_TYPE_TX_SKIP,
0164     RESET_TYPE_MAX,
0165 };
0166 
0167 #endif /* EF4_ENUM_H */