162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/**************************************************************************** 362306a36Sopenharmony_ci * Driver for Solarflare network controllers and boards 462306a36Sopenharmony_ci * Copyright 2007-2013 Solarflare Communications Inc. 562306a36Sopenharmony_ci */ 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#ifndef EFX_ENUM_H 862306a36Sopenharmony_ci#define EFX_ENUM_H 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci/** 1162306a36Sopenharmony_ci * enum efx_loopback_mode - loopback modes 1262306a36Sopenharmony_ci * @LOOPBACK_NONE: no loopback 1362306a36Sopenharmony_ci * @LOOPBACK_DATA: data path loopback 1462306a36Sopenharmony_ci * @LOOPBACK_GMAC: loopback within GMAC 1562306a36Sopenharmony_ci * @LOOPBACK_XGMII: loopback after XMAC 1662306a36Sopenharmony_ci * @LOOPBACK_XGXS: loopback within BPX after XGXS 1762306a36Sopenharmony_ci * @LOOPBACK_XAUI: loopback within BPX before XAUI serdes 1862306a36Sopenharmony_ci * @LOOPBACK_GMII: loopback within BPX after GMAC 1962306a36Sopenharmony_ci * @LOOPBACK_SGMII: loopback within BPX within SGMII 2062306a36Sopenharmony_ci * @LOOPBACK_XGBR: loopback within BPX within XGBR 2162306a36Sopenharmony_ci * @LOOPBACK_XFI: loopback within BPX before XFI serdes 2262306a36Sopenharmony_ci * @LOOPBACK_XAUI_FAR: loopback within BPX after XAUI serdes 2362306a36Sopenharmony_ci * @LOOPBACK_GMII_FAR: loopback within BPX before SGMII 2462306a36Sopenharmony_ci * @LOOPBACK_SGMII_FAR: loopback within BPX after SGMII 2562306a36Sopenharmony_ci * @LOOPBACK_XFI_FAR: loopback after XFI serdes 2662306a36Sopenharmony_ci * @LOOPBACK_GPHY: loopback within 1G PHY at unspecified level 2762306a36Sopenharmony_ci * @LOOPBACK_PHYXS: loopback within 10G PHY at PHYXS level 2862306a36Sopenharmony_ci * @LOOPBACK_PCS: loopback within 10G PHY at PCS level 2962306a36Sopenharmony_ci * @LOOPBACK_PMAPMD: loopback within 10G PHY at PMAPMD level 3062306a36Sopenharmony_ci * @LOOPBACK_XPORT: cross port loopback 3162306a36Sopenharmony_ci * @LOOPBACK_XGMII_WS: wireside loopback excluding XMAC 3262306a36Sopenharmony_ci * @LOOPBACK_XAUI_WS: wireside loopback within BPX within XAUI serdes 3362306a36Sopenharmony_ci * @LOOPBACK_XAUI_WS_FAR: wireside loopback within BPX including XAUI serdes 3462306a36Sopenharmony_ci * @LOOPBACK_XAUI_WS_NEAR: wireside loopback within BPX excluding XAUI serdes 3562306a36Sopenharmony_ci * @LOOPBACK_GMII_WS: wireside loopback excluding GMAC 3662306a36Sopenharmony_ci * @LOOPBACK_XFI_WS: wireside loopback excluding XFI serdes 3762306a36Sopenharmony_ci * @LOOPBACK_XFI_WS_FAR: wireside loopback including XFI serdes 3862306a36Sopenharmony_ci * @LOOPBACK_PHYXS_WS: wireside loopback within 10G PHY at PHYXS level 3962306a36Sopenharmony_ci */ 4062306a36Sopenharmony_ci/* Please keep up-to-date w.r.t the following two #defines */ 4162306a36Sopenharmony_cienum efx_loopback_mode { 4262306a36Sopenharmony_ci LOOPBACK_NONE = 0, 4362306a36Sopenharmony_ci LOOPBACK_DATA = 1, 4462306a36Sopenharmony_ci LOOPBACK_GMAC = 2, 4562306a36Sopenharmony_ci LOOPBACK_XGMII = 3, 4662306a36Sopenharmony_ci LOOPBACK_XGXS = 4, 4762306a36Sopenharmony_ci LOOPBACK_XAUI = 5, 4862306a36Sopenharmony_ci LOOPBACK_GMII = 6, 4962306a36Sopenharmony_ci LOOPBACK_SGMII = 7, 5062306a36Sopenharmony_ci LOOPBACK_XGBR = 8, 5162306a36Sopenharmony_ci LOOPBACK_XFI = 9, 5262306a36Sopenharmony_ci LOOPBACK_XAUI_FAR = 10, 5362306a36Sopenharmony_ci LOOPBACK_GMII_FAR = 11, 5462306a36Sopenharmony_ci LOOPBACK_SGMII_FAR = 12, 5562306a36Sopenharmony_ci LOOPBACK_XFI_FAR = 13, 5662306a36Sopenharmony_ci LOOPBACK_GPHY = 14, 5762306a36Sopenharmony_ci LOOPBACK_PHYXS = 15, 5862306a36Sopenharmony_ci LOOPBACK_PCS = 16, 5962306a36Sopenharmony_ci LOOPBACK_PMAPMD = 17, 6062306a36Sopenharmony_ci LOOPBACK_XPORT = 18, 6162306a36Sopenharmony_ci LOOPBACK_XGMII_WS = 19, 6262306a36Sopenharmony_ci LOOPBACK_XAUI_WS = 20, 6362306a36Sopenharmony_ci LOOPBACK_XAUI_WS_FAR = 21, 6462306a36Sopenharmony_ci LOOPBACK_XAUI_WS_NEAR = 22, 6562306a36Sopenharmony_ci LOOPBACK_GMII_WS = 23, 6662306a36Sopenharmony_ci LOOPBACK_XFI_WS = 24, 6762306a36Sopenharmony_ci LOOPBACK_XFI_WS_FAR = 25, 6862306a36Sopenharmony_ci LOOPBACK_PHYXS_WS = 26, 6962306a36Sopenharmony_ci LOOPBACK_MAX 7062306a36Sopenharmony_ci}; 7162306a36Sopenharmony_ci#define LOOPBACK_TEST_MAX LOOPBACK_PMAPMD 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_ci/* These loopbacks occur within the controller */ 7462306a36Sopenharmony_ci#define LOOPBACKS_INTERNAL ((1 << LOOPBACK_DATA) | \ 7562306a36Sopenharmony_ci (1 << LOOPBACK_GMAC) | \ 7662306a36Sopenharmony_ci (1 << LOOPBACK_XGMII)| \ 7762306a36Sopenharmony_ci (1 << LOOPBACK_XGXS) | \ 7862306a36Sopenharmony_ci (1 << LOOPBACK_XAUI) | \ 7962306a36Sopenharmony_ci (1 << LOOPBACK_GMII) | \ 8062306a36Sopenharmony_ci (1 << LOOPBACK_SGMII) | \ 8162306a36Sopenharmony_ci (1 << LOOPBACK_XGBR) | \ 8262306a36Sopenharmony_ci (1 << LOOPBACK_XFI) | \ 8362306a36Sopenharmony_ci (1 << LOOPBACK_XAUI_FAR) | \ 8462306a36Sopenharmony_ci (1 << LOOPBACK_GMII_FAR) | \ 8562306a36Sopenharmony_ci (1 << LOOPBACK_SGMII_FAR) | \ 8662306a36Sopenharmony_ci (1 << LOOPBACK_XFI_FAR) | \ 8762306a36Sopenharmony_ci (1 << LOOPBACK_XGMII_WS) | \ 8862306a36Sopenharmony_ci (1 << LOOPBACK_XAUI_WS) | \ 8962306a36Sopenharmony_ci (1 << LOOPBACK_XAUI_WS_FAR) | \ 9062306a36Sopenharmony_ci (1 << LOOPBACK_XAUI_WS_NEAR) | \ 9162306a36Sopenharmony_ci (1 << LOOPBACK_GMII_WS) | \ 9262306a36Sopenharmony_ci (1 << LOOPBACK_XFI_WS) | \ 9362306a36Sopenharmony_ci (1 << LOOPBACK_XFI_WS_FAR)) 9462306a36Sopenharmony_ci 9562306a36Sopenharmony_ci#define LOOPBACKS_WS ((1 << LOOPBACK_XGMII_WS) | \ 9662306a36Sopenharmony_ci (1 << LOOPBACK_XAUI_WS) | \ 9762306a36Sopenharmony_ci (1 << LOOPBACK_XAUI_WS_FAR) | \ 9862306a36Sopenharmony_ci (1 << LOOPBACK_XAUI_WS_NEAR) | \ 9962306a36Sopenharmony_ci (1 << LOOPBACK_GMII_WS) | \ 10062306a36Sopenharmony_ci (1 << LOOPBACK_XFI_WS) | \ 10162306a36Sopenharmony_ci (1 << LOOPBACK_XFI_WS_FAR) | \ 10262306a36Sopenharmony_ci (1 << LOOPBACK_PHYXS_WS)) 10362306a36Sopenharmony_ci 10462306a36Sopenharmony_ci#define LOOPBACKS_EXTERNAL(_efx) \ 10562306a36Sopenharmony_ci ((_efx)->loopback_modes & ~LOOPBACKS_INTERNAL & \ 10662306a36Sopenharmony_ci ~(1 << LOOPBACK_NONE)) 10762306a36Sopenharmony_ci 10862306a36Sopenharmony_ci#define LOOPBACK_MASK(_efx) \ 10962306a36Sopenharmony_ci (1 << (_efx)->loopback_mode) 11062306a36Sopenharmony_ci 11162306a36Sopenharmony_ci#define LOOPBACK_INTERNAL(_efx) \ 11262306a36Sopenharmony_ci (!!(LOOPBACKS_INTERNAL & LOOPBACK_MASK(_efx))) 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_ci#define LOOPBACK_EXTERNAL(_efx) \ 11562306a36Sopenharmony_ci (!!(LOOPBACK_MASK(_efx) & LOOPBACKS_EXTERNAL(_efx))) 11662306a36Sopenharmony_ci 11762306a36Sopenharmony_ci#define LOOPBACK_CHANGED(_from, _to, _mask) \ 11862306a36Sopenharmony_ci (!!((LOOPBACK_MASK(_from) ^ LOOPBACK_MASK(_to)) & (_mask))) 11962306a36Sopenharmony_ci 12062306a36Sopenharmony_ci#define LOOPBACK_OUT_OF(_from, _to, _mask) \ 12162306a36Sopenharmony_ci ((LOOPBACK_MASK(_from) & (_mask)) && !(LOOPBACK_MASK(_to) & (_mask))) 12262306a36Sopenharmony_ci 12362306a36Sopenharmony_ci/*****************************************************************************/ 12462306a36Sopenharmony_ci 12562306a36Sopenharmony_ci/** 12662306a36Sopenharmony_ci * enum reset_type - reset types 12762306a36Sopenharmony_ci * 12862306a36Sopenharmony_ci * %RESET_TYPE_INVSIBLE, %RESET_TYPE_ALL, %RESET_TYPE_WORLD and 12962306a36Sopenharmony_ci * %RESET_TYPE_DISABLE specify the method/scope of the reset. The 13062306a36Sopenharmony_ci * other valuesspecify reasons, which efx_siena_schedule_reset() will choose 13162306a36Sopenharmony_ci * a method for. 13262306a36Sopenharmony_ci * 13362306a36Sopenharmony_ci * Reset methods are numbered in order of increasing scope. 13462306a36Sopenharmony_ci * 13562306a36Sopenharmony_ci * @RESET_TYPE_INVISIBLE: Reset datapath and MAC (Falcon only) 13662306a36Sopenharmony_ci * @RESET_TYPE_RECOVER_OR_ALL: Try to recover. Apply RESET_TYPE_ALL 13762306a36Sopenharmony_ci * if unsuccessful. 13862306a36Sopenharmony_ci * @RESET_TYPE_ALL: Reset datapath, MAC and PHY 13962306a36Sopenharmony_ci * @RESET_TYPE_WORLD: Reset as much as possible 14062306a36Sopenharmony_ci * @RESET_TYPE_RECOVER_OR_DISABLE: Try to recover. Apply RESET_TYPE_DISABLE if 14162306a36Sopenharmony_ci * unsuccessful. 14262306a36Sopenharmony_ci * @RESET_TYPE_DATAPATH: Reset datapath only. 14362306a36Sopenharmony_ci * @RESET_TYPE_MC_BIST: MC entering BIST mode. 14462306a36Sopenharmony_ci * @RESET_TYPE_DISABLE: Reset datapath, MAC and PHY; leave NIC disabled 14562306a36Sopenharmony_ci * @RESET_TYPE_TX_WATCHDOG: reset due to TX watchdog 14662306a36Sopenharmony_ci * @RESET_TYPE_INT_ERROR: reset due to internal error 14762306a36Sopenharmony_ci * @RESET_TYPE_DMA_ERROR: DMA error 14862306a36Sopenharmony_ci * @RESET_TYPE_TX_SKIP: hardware completed empty tx descriptors 14962306a36Sopenharmony_ci * @RESET_TYPE_MC_FAILURE: MC reboot/assertion 15062306a36Sopenharmony_ci * @RESET_TYPE_MCDI_TIMEOUT: MCDI timeout. 15162306a36Sopenharmony_ci */ 15262306a36Sopenharmony_cienum reset_type { 15362306a36Sopenharmony_ci RESET_TYPE_INVISIBLE, 15462306a36Sopenharmony_ci RESET_TYPE_RECOVER_OR_ALL, 15562306a36Sopenharmony_ci RESET_TYPE_ALL, 15662306a36Sopenharmony_ci RESET_TYPE_WORLD, 15762306a36Sopenharmony_ci RESET_TYPE_RECOVER_OR_DISABLE, 15862306a36Sopenharmony_ci RESET_TYPE_DATAPATH, 15962306a36Sopenharmony_ci RESET_TYPE_MC_BIST, 16062306a36Sopenharmony_ci RESET_TYPE_DISABLE, 16162306a36Sopenharmony_ci RESET_TYPE_MAX_METHOD, 16262306a36Sopenharmony_ci RESET_TYPE_TX_WATCHDOG, 16362306a36Sopenharmony_ci RESET_TYPE_INT_ERROR, 16462306a36Sopenharmony_ci RESET_TYPE_DMA_ERROR, 16562306a36Sopenharmony_ci RESET_TYPE_TX_SKIP, 16662306a36Sopenharmony_ci RESET_TYPE_MC_FAILURE, 16762306a36Sopenharmony_ci /* RESET_TYPE_MCDI_TIMEOUT is actually a method, not just a reason, but 16862306a36Sopenharmony_ci * it doesn't fit the scope hierarchy (not well-ordered by inclusion). 16962306a36Sopenharmony_ci * We encode this by having its enum value be greater than 17062306a36Sopenharmony_ci * RESET_TYPE_MAX_METHOD. 17162306a36Sopenharmony_ci */ 17262306a36Sopenharmony_ci RESET_TYPE_MCDI_TIMEOUT, 17362306a36Sopenharmony_ci RESET_TYPE_MAX, 17462306a36Sopenharmony_ci}; 17562306a36Sopenharmony_ci 17662306a36Sopenharmony_ci#endif /* EFX_ENUM_H */ 177