2008-04-27 15:55:59 +04:00
/****************************************************************************
* Driver for Solarflare Solarstorm network controllers and boards
2009-11-29 18:16:19 +03:00
* Copyright 2007 - 2009 Solarflare Communications Inc .
2008-04-27 15:55:59 +04:00
*
* This program is free software ; you can redistribute it and / or modify it
* under the terms of the GNU General Public License version 2 as published
* by the Free Software Foundation , incorporated herein by reference .
*/
# ifndef EFX_ENUM_H
# define EFX_ENUM_H
2008-05-07 16:36:19 +04:00
/**
* enum efx_loopback_mode - loopback modes
* @ LOOPBACK_NONE : no loopback
2009-11-29 18:08:41 +03:00
* @ LOOPBACK_DATA : data path loopback
* @ LOOPBACK_GMAC : loopback within GMAC
* @ LOOPBACK_XGMII : loopback after XMAC
* @ LOOPBACK_XGXS : loopback within BPX after XGXS
* @ LOOPBACK_XAUI : loopback within BPX before XAUI serdes
* @ LOOPBACK_GMII : loopback within BPX after GMAC
* @ LOOPBACK_SGMII : loopback within BPX within SGMII
* @ LOOPBACK_XGBR : loopback within BPX within XGBR
* @ LOOPBACK_XFI : loopback within BPX before XFI serdes
* @ LOOPBACK_XAUI_FAR : loopback within BPX after XAUI serdes
* @ LOOPBACK_GMII_FAR : loopback within BPX before SGMII
* @ LOOPBACK_SGMII_FAR : loopback within BPX after SGMII
* @ LOOPBACK_XFI_FAR : loopback after XFI serdes
2008-12-13 08:50:08 +03:00
* @ LOOPBACK_GPHY : loopback within 1 G PHY at unspecified level
* @ LOOPBACK_PHYXS : loopback within 10 G PHY at PHYXS level
* @ LOOPBACK_PCS : loopback within 10 G PHY at PCS level
* @ LOOPBACK_PMAPMD : loopback within 10 G PHY at PMAPMD level
2009-11-29 18:08:41 +03:00
* @ LOOPBACK_XPORT : cross port loopback
* @ LOOPBACK_XGMII_WS : wireside loopback excluding XMAC
* @ LOOPBACK_XAUI_WS : wireside loopback within BPX within XAUI serdes
* @ LOOPBACK_XAUI_WS_FAR : wireside loopback within BPX including XAUI serdes
* @ LOOPBACK_XAUI_WS_NEAR : wireside loopback within BPX excluding XAUI serdes
* @ LOOPBACK_GMII_WS : wireside loopback excluding GMAC
* @ LOOPBACK_XFI_WS : wireside loopback excluding XFI serdes
* @ LOOPBACK_XFI_WS_FAR : wireside loopback including XFI serdes
* @ LOOPBACK_PHYXS_WS : wireside loopback within 10 G PHY at PHYXS level
2008-05-07 16:36:19 +04:00
*/
2009-11-29 18:08:41 +03:00
/* Please keep up-to-date w.r.t the following two #defines */
2008-05-07 16:36:19 +04:00
enum efx_loopback_mode {
LOOPBACK_NONE = 0 ,
2009-11-29 18:08:41 +03:00
LOOPBACK_DATA = 1 ,
LOOPBACK_GMAC = 2 ,
LOOPBACK_XGMII = 3 ,
LOOPBACK_XGXS = 4 ,
LOOPBACK_XAUI = 5 ,
LOOPBACK_GMII = 6 ,
LOOPBACK_SGMII = 7 ,
LOOPBACK_XGBR = 8 ,
LOOPBACK_XFI = 9 ,
LOOPBACK_XAUI_FAR = 10 ,
LOOPBACK_GMII_FAR = 11 ,
LOOPBACK_SGMII_FAR = 12 ,
LOOPBACK_XFI_FAR = 13 ,
LOOPBACK_GPHY = 14 ,
LOOPBACK_PHYXS = 15 ,
LOOPBACK_PCS = 16 ,
LOOPBACK_PMAPMD = 17 ,
LOOPBACK_XPORT = 18 ,
LOOPBACK_XGMII_WS = 19 ,
LOOPBACK_XAUI_WS = 20 ,
LOOPBACK_XAUI_WS_FAR = 21 ,
LOOPBACK_XAUI_WS_NEAR = 22 ,
LOOPBACK_GMII_WS = 23 ,
LOOPBACK_XFI_WS = 24 ,
LOOPBACK_XFI_WS_FAR = 25 ,
LOOPBACK_PHYXS_WS = 26 ,
2008-05-07 16:36:19 +04:00
LOOPBACK_MAX
} ;
# define LOOPBACK_TEST_MAX LOOPBACK_PMAPMD
/* These loopbacks occur within the controller */
2009-11-29 18:08:41 +03:00
# define LOOPBACKS_INTERNAL ((1 << LOOPBACK_DATA) | \
( 1 < < LOOPBACK_GMAC ) | \
( 1 < < LOOPBACK_XGMII ) | \
( 1 < < LOOPBACK_XGXS ) | \
( 1 < < LOOPBACK_XAUI ) | \
( 1 < < LOOPBACK_GMII ) | \
( 1 < < LOOPBACK_SGMII ) | \
( 1 < < LOOPBACK_SGMII ) | \
( 1 < < LOOPBACK_XGBR ) | \
( 1 < < LOOPBACK_XFI ) | \
( 1 < < LOOPBACK_XAUI_FAR ) | \
( 1 < < LOOPBACK_GMII_FAR ) | \
( 1 < < LOOPBACK_SGMII_FAR ) | \
( 1 < < LOOPBACK_XFI_FAR ) | \
( 1 < < LOOPBACK_XGMII_WS ) | \
( 1 < < LOOPBACK_XAUI_WS ) | \
( 1 < < LOOPBACK_XAUI_WS_FAR ) | \
( 1 < < LOOPBACK_XAUI_WS_NEAR ) | \
( 1 < < LOOPBACK_GMII_WS ) | \
( 1 < < LOOPBACK_XFI_WS ) | \
( 1 < < LOOPBACK_XFI_WS_FAR ) )
# define LOOPBACKS_WS ((1 << LOOPBACK_XGMII_WS) | \
( 1 < < LOOPBACK_XAUI_WS ) | \
( 1 < < LOOPBACK_XAUI_WS_FAR ) | \
( 1 < < LOOPBACK_XAUI_WS_NEAR ) | \
( 1 < < LOOPBACK_GMII_WS ) | \
( 1 < < LOOPBACK_XFI_WS ) | \
( 1 < < LOOPBACK_XFI_WS_FAR ) | \
( 1 < < LOOPBACK_PHYXS_WS ) )
# define LOOPBACKS_EXTERNAL(_efx) \
( ( _efx ) - > loopback_modes & ~ LOOPBACKS_INTERNAL & \
~ ( 1 < < LOOPBACK_NONE ) )
2008-05-07 16:36:19 +04:00
# define LOOPBACK_MASK(_efx) \
( 1 < < ( _efx ) - > loopback_mode )
2008-09-01 15:46:50 +04:00
# define LOOPBACK_INTERNAL(_efx) \
2008-12-13 08:50:08 +03:00
( ! ! ( LOOPBACKS_INTERNAL & LOOPBACK_MASK ( _efx ) ) )
2008-05-07 16:36:19 +04:00
2009-11-29 18:08:41 +03:00
# define LOOPBACK_EXTERNAL(_efx) \
( ! ! ( LOOPBACK_MASK ( _efx ) & LOOPBACKS_EXTERNAL ( _efx ) ) )
2008-12-13 09:00:17 +03:00
# define LOOPBACK_CHANGED(_from, _to, _mask) \
( ! ! ( ( LOOPBACK_MASK ( _from ) ^ LOOPBACK_MASK ( _to ) ) & ( _mask ) ) )
2008-09-01 15:46:50 +04:00
# define LOOPBACK_OUT_OF(_from, _to, _mask) \
( ( LOOPBACK_MASK ( _from ) & ( _mask ) ) & & ! ( LOOPBACK_MASK ( _to ) & ( _mask ) ) )
2008-05-07 16:36:19 +04:00
2008-04-27 15:55:59 +04:00
/*****************************************************************************/
/**
* enum reset_type - reset types
*
* % RESET_TYPE_INVSIBLE , % RESET_TYPE_ALL , % RESET_TYPE_WORLD and
* % RESET_TYPE_DISABLE specify the method / scope of the reset . The
* other valuesspecify reasons , which efx_schedule_reset ( ) will choose
* a method for .
*
2011-06-24 23:46:31 +04:00
* Reset methods are numbered in order of increasing scope .
*
2008-04-27 15:55:59 +04:00
* @ RESET_TYPE_INVISIBLE : don ' t reset the PHYs or interrupts
* @ RESET_TYPE_ALL : reset everything but PCI core blocks
* @ RESET_TYPE_WORLD : reset everything , save & restore PCI config
* @ RESET_TYPE_DISABLE : disable NIC
2008-11-04 23:35:36 +03:00
* @ RESET_TYPE_TX_WATCHDOG : reset due to TX watchdog
2008-04-27 15:55:59 +04:00
* @ RESET_TYPE_INT_ERROR : reset due to internal error
* @ RESET_TYPE_RX_RECOVERY : reset to recover from RX datapath errors
* @ RESET_TYPE_RX_DESC_FETCH : pcie error during rx descriptor fetch
* @ RESET_TYPE_TX_DESC_FETCH : pcie error during tx descriptor fetch
* @ RESET_TYPE_TX_SKIP : hardware completed empty tx descriptors
2009-11-29 18:15:41 +03:00
* @ RESET_TYPE_MC_FAILURE : MC reboot / assertion
2008-04-27 15:55:59 +04:00
*/
enum reset_type {
RESET_TYPE_INVISIBLE = 0 ,
RESET_TYPE_ALL = 1 ,
RESET_TYPE_WORLD = 2 ,
RESET_TYPE_DISABLE = 3 ,
RESET_TYPE_MAX_METHOD ,
2008-11-04 23:35:36 +03:00
RESET_TYPE_TX_WATCHDOG ,
2008-04-27 15:55:59 +04:00
RESET_TYPE_INT_ERROR ,
RESET_TYPE_RX_RECOVERY ,
RESET_TYPE_RX_DESC_FETCH ,
RESET_TYPE_TX_DESC_FETCH ,
RESET_TYPE_TX_SKIP ,
2009-11-29 18:15:41 +03:00
RESET_TYPE_MC_FAILURE ,
2008-04-27 15:55:59 +04:00
RESET_TYPE_MAX ,
} ;
# endif /* EFX_ENUM_H */