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