Skip to content
Snippets Groups Projects
e1000.h 108 KiB
Newer Older
  • Learn to ignore specific revisions
  • 							* on Link-Up */
    #define IGP01E1000_GMII_SPD                    0x20 /* Enable SPD */
    
    /* IGP01E1000 Analog Register */
    #define IGP01E1000_ANALOG_SPARE_FUSE_STATUS       0x20D1
    #define IGP01E1000_ANALOG_FUSE_STATUS             0x20D0
    #define IGP01E1000_ANALOG_FUSE_CONTROL            0x20DC
    #define IGP01E1000_ANALOG_FUSE_BYPASS             0x20DE
    
    #define IGP01E1000_ANALOG_FUSE_POLY_MASK            0xF000
    #define IGP01E1000_ANALOG_FUSE_FINE_MASK            0x0F80
    #define IGP01E1000_ANALOG_FUSE_COARSE_MASK          0x0070
    #define IGP01E1000_ANALOG_SPARE_FUSE_ENABLED        0x0100
    #define IGP01E1000_ANALOG_FUSE_ENABLE_SW_CONTROL    0x0002
    
    #define IGP01E1000_ANALOG_FUSE_COARSE_THRESH        0x0040
    #define IGP01E1000_ANALOG_FUSE_COARSE_10            0x0010
    #define IGP01E1000_ANALOG_FUSE_FINE_1               0x0080
    #define IGP01E1000_ANALOG_FUSE_FINE_10              0x0500
    
    /* IGP01E1000 Specific Port Control Register - R/W */
    #define IGP01E1000_PSCR_TP_LOOPBACK            0x0010
    #define IGP01E1000_PSCR_CORRECT_NC_SCMBLR      0x0200
    #define IGP01E1000_PSCR_TEN_CRS_SELECT         0x0400
    #define IGP01E1000_PSCR_FLIP_CHIP              0x0800
    #define IGP01E1000_PSCR_AUTO_MDIX              0x1000
    #define IGP01E1000_PSCR_FORCE_MDI_MDIX         0x2000 /* 0-MDI, 1-MDIX */
    /* GG82563 PHY Specific Status Register (Page 0, Register 16 */
    #define GG82563_PSCR_DISABLE_JABBER             0x0001 /* 1=Disable Jabber */
    #define GG82563_PSCR_POLARITY_REVERSAL_DISABLE  0x0002 /* 1=Polarity Reversal
    							  Disabled */
    #define GG82563_PSCR_POWER_DOWN                 0x0004 /* 1=Power Down */
    #define GG82563_PSCR_COPPER_TRANSMITER_DISABLE  0x0008 /* 1=Transmitter
    							  Disabled */
    #define GG82563_PSCR_CROSSOVER_MODE_MASK        0x0060
    #define GG82563_PSCR_CROSSOVER_MODE_MDI         0x0000 /* 00=Manual MDI
    							  configuration */
    #define GG82563_PSCR_CROSSOVER_MODE_MDIX        0x0020 /* 01=Manual MDIX
    							  configuration */
    #define GG82563_PSCR_CROSSOVER_MODE_AUTO        0x0060 /* 11=Automatic
    							  crossover */
    #define GG82563_PSCR_ENALBE_EXTENDED_DISTANCE   0x0080 /* 1=Enable Extended
    							  Distance */
    #define GG82563_PSCR_ENERGY_DETECT_MASK         0x0300
    #define GG82563_PSCR_ENERGY_DETECT_OFF          0x0000 /* 00,01=Off */
    #define GG82563_PSCR_ENERGY_DETECT_RX           0x0200 /* 10=Sense on Rx only
    							  (Energy Detect) */
    #define GG82563_PSCR_ENERGY_DETECT_RX_TM        0x0300 /* 11=Sense and Tx NLP */
    #define GG82563_PSCR_FORCE_LINK_GOOD            0x0400 /* 1=Force Link Good */
    #define GG82563_PSCR_DOWNSHIFT_ENABLE           0x0800 /* 1=Enable Downshift */
    #define GG82563_PSCR_DOWNSHIFT_COUNTER_MASK     0x7000
    #define GG82563_PSCR_DOWNSHIFT_COUNTER_SHIFT    12
    
    /* PHY Specific Status Register (Page 0, Register 17) */
    #define GG82563_PSSR_JABBER                0x0001 /* 1=Jabber */
    #define GG82563_PSSR_POLARITY              0x0002 /* 1=Polarity Reversed */
    #define GG82563_PSSR_LINK                  0x0008 /* 1=Link is Up */
    #define GG82563_PSSR_ENERGY_DETECT         0x0010 /* 1=Sleep, 0=Active */
    #define GG82563_PSSR_DOWNSHIFT             0x0020 /* 1=Downshift */
    #define GG82563_PSSR_CROSSOVER_STATUS      0x0040 /* 1=MDIX, 0=MDI */
    #define GG82563_PSSR_RX_PAUSE_ENABLED      0x0100 /* 1=Receive Pause Enabled */
    #define GG82563_PSSR_TX_PAUSE_ENABLED      0x0200 /* 1=Transmit Pause Enabled */
    #define GG82563_PSSR_LINK_UP               0x0400 /* 1=Link Up */
    #define GG82563_PSSR_SPEED_DUPLEX_RESOLVED 0x0800 /* 1=Resolved */
    #define GG82563_PSSR_PAGE_RECEIVED         0x1000 /* 1=Page Received */
    #define GG82563_PSSR_DUPLEX                0x2000 /* 1-Full-Duplex */
    #define GG82563_PSSR_SPEED_MASK            0xC000
    #define GG82563_PSSR_SPEED_10MBPS          0x0000 /* 00=10Mbps */
    #define GG82563_PSSR_SPEED_100MBPS         0x4000 /* 01=100Mbps */
    #define GG82563_PSSR_SPEED_1000MBPS        0x8000 /* 10=1000Mbps */
    
    /* PHY Specific Status Register 2 (Page 0, Register 19) */
    #define GG82563_PSSR2_JABBER                0x0001 /* 1=Jabber */
    #define GG82563_PSSR2_POLARITY_CHANGED      0x0002 /* 1=Polarity Changed */
    #define GG82563_PSSR2_ENERGY_DETECT_CHANGED 0x0010 /* 1=Energy Detect Changed */
    #define GG82563_PSSR2_DOWNSHIFT_INTERRUPT   0x0020 /* 1=Downshift Detected */
    #define GG82563_PSSR2_MDI_CROSSOVER_CHANGE  0x0040 /* 1=Crossover Changed */
    
    York Sun's avatar
    York Sun committed
    #define GG82563_PSSR2_FALSE_CARRIER         0x0100 /* 1=false Carrier */
    
    #define GG82563_PSSR2_SYMBOL_ERROR          0x0200 /* 1=Symbol Error */
    #define GG82563_PSSR2_LINK_STATUS_CHANGED   0x0400 /* 1=Link Status Changed */
    #define GG82563_PSSR2_AUTO_NEG_COMPLETED    0x0800 /* 1=Auto-Neg Completed */
    #define GG82563_PSSR2_PAGE_RECEIVED         0x1000 /* 1=Page Received */
    #define GG82563_PSSR2_DUPLEX_CHANGED        0x2000 /* 1=Duplex Changed */
    #define GG82563_PSSR2_SPEED_CHANGED         0x4000 /* 1=Speed Changed */
    #define GG82563_PSSR2_AUTO_NEG_ERROR        0x8000 /* 1=Auto-Neg Error */
    
    /* PHY Specific Control Register 2 (Page 0, Register 26) */
    #define GG82563_PSCR2_10BT_POLARITY_FORCE           0x0002 /* 1=Force Negative
    							      Polarity */
    #define GG82563_PSCR2_1000MB_TEST_SELECT_MASK       0x000C
    #define GG82563_PSCR2_1000MB_TEST_SELECT_NORMAL     0x0000 /* 00,01=Normal
    							      Operation */
    #define GG82563_PSCR2_1000MB_TEST_SELECT_112NS      0x0008 /* 10=Select 112ns
    							      Sequence */
    #define GG82563_PSCR2_1000MB_TEST_SELECT_16NS       0x000C /* 11=Select 16ns
    							      Sequence */
    #define GG82563_PSCR2_REVERSE_AUTO_NEG              0x2000 /* 1=Reverse
    							Auto-Negotiation */
    #define GG82563_PSCR2_1000BT_DISABLE                0x4000 /* 1=Disable
    							      1000BASE-T */
    #define GG82563_PSCR2_TRANSMITER_TYPE_MASK          0x8000
    #define GG82563_PSCR2_TRANSMITTER_TYPE_CLASS_B      0x0000 /* 0=Class B */
    #define GG82563_PSCR2_TRANSMITTER_TYPE_CLASS_A      0x8000 /* 1=Class A */
    
    /* MAC Specific Control Register (Page 2, Register 21) */
    /* Tx clock speed for Link Down and 1000BASE-T for the following speeds */
    #define GG82563_MSCR_TX_CLK_MASK                    0x0007
    #define GG82563_MSCR_TX_CLK_10MBPS_2_5MHZ           0x0004
    #define GG82563_MSCR_TX_CLK_100MBPS_25MHZ           0x0005
    #define GG82563_MSCR_TX_CLK_1000MBPS_2_5MHZ         0x0006
    #define GG82563_MSCR_TX_CLK_1000MBPS_25MHZ          0x0007
    
    #define GG82563_MSCR_ASSERT_CRS_ON_TX               0x0010 /* 1=Assert */
    
    /* DSP Distance Register (Page 5, Register 26) */
    #define GG82563_DSPD_CABLE_LENGTH               0x0007 /* 0 = <50M;
    							  1 = 50-80M;
    							  2 = 80-110M;
    							  3 = 110-140M;
    							  4 = >140M */
    
    /* Kumeran Mode Control Register (Page 193, Register 16) */
    #define GG82563_KMCR_PHY_LEDS_EN                    0x0020 /* 1=PHY LEDs,
    							0=Kumeran Inband LEDs */
    #define GG82563_KMCR_FORCE_LINK_UP                  0x0040 /* 1=Force Link Up */
    #define GG82563_KMCR_SUPPRESS_SGMII_EPD_EXT         0x0080
    #define GG82563_KMCR_MDIO_BUS_SPEED_SELECT_MASK     0x0400
    #define GG82563_KMCR_MDIO_BUS_SPEED_SELECT          0x0400 /* 1=6.25MHz,
    							      0=0.8MHz */
    #define GG82563_KMCR_PASS_FALSE_CARRIER             0x0800
    
    /* Power Management Control Register (Page 193, Register 20) */
    #define GG82563_PMCR_ENABLE_ELECTRICAL_IDLE    0x0001 /* 1=Enalbe SERDES
    						Electrical Idle */
    #define GG82563_PMCR_DISABLE_PORT              0x0002 /* 1=Disable Port */
    #define GG82563_PMCR_DISABLE_SERDES            0x0004 /* 1=Disable SERDES */
    #define GG82563_PMCR_REVERSE_AUTO_NEG          0x0008 /* 1=Enable Reverse
    						Auto-Negotiation */
    #define GG82563_PMCR_DISABLE_1000_NON_D0       0x0010 /* 1=Disable 1000Mbps
    							 Auto-Neg in non D0 */
    #define GG82563_PMCR_DISABLE_1000              0x0020 /* 1=Disable 1000Mbps
    							 Auto-Neg Always */
    #define GG82563_PMCR_REVERSE_AUTO_NEG_D0A      0x0040 /* 1=Enable D0a
    						Reverse Auto-Negotiation */
    #define GG82563_PMCR_FORCE_POWER_STATE         0x0080 /* 1=Force Power State */
    #define GG82563_PMCR_PROGRAMMED_POWER_STATE_MASK    0x0300
    #define GG82563_PMCR_PROGRAMMED_POWER_STATE_DR      0x0000 /* 00=Dr */
    #define GG82563_PMCR_PROGRAMMED_POWER_STATE_D0U     0x0100 /* 01=D0u */
    #define GG82563_PMCR_PROGRAMMED_POWER_STATE_D0A     0x0200 /* 10=D0a */
    #define GG82563_PMCR_PROGRAMMED_POWER_STATE_D3      0x0300 /* 11=D3 */
    
    /* In-Band Control Register (Page 194, Register 18) */
    #define GG82563_ICR_DIS_PADDING		0x0010 /* Disable Padding Use */
    
    
    /* Bits...
     * 15-5: page
     * 4-0: register offset
     */
    #define GG82563_PAGE_SHIFT        5
    #define GG82563_REG(page, reg)    \
    	(((page) << GG82563_PAGE_SHIFT) | ((reg) & MAX_PHY_REG_ADDRESS))
    #define GG82563_MIN_ALT_REG       30
    
    /* GG82563 Specific Registers */
    #define GG82563_PHY_SPEC_CTRL           \
    	GG82563_REG(0, 16) /* PHY Specific Control */
    #define GG82563_PHY_SPEC_STATUS         \
    	GG82563_REG(0, 17) /* PHY Specific Status */
    #define GG82563_PHY_INT_ENABLE          \
    	GG82563_REG(0, 18) /* Interrupt Enable */
    #define GG82563_PHY_SPEC_STATUS_2       \
    	GG82563_REG(0, 19) /* PHY Specific Status 2 */
    #define GG82563_PHY_RX_ERR_CNTR         \
    	GG82563_REG(0, 21) /* Receive Error Counter */
    #define GG82563_PHY_PAGE_SELECT         \
    	GG82563_REG(0, 22) /* Page Select */
    #define GG82563_PHY_SPEC_CTRL_2         \
    	GG82563_REG(0, 26) /* PHY Specific Control 2 */
    #define GG82563_PHY_PAGE_SELECT_ALT     \
    	GG82563_REG(0, 29) /* Alternate Page Select */
    #define GG82563_PHY_TEST_CLK_CTRL       \
    	GG82563_REG(0, 30) /* Test Clock Control (use reg. 29 to select) */
    
    #define GG82563_PHY_MAC_SPEC_CTRL       \
    	GG82563_REG(2, 21) /* MAC Specific Control Register */
    #define GG82563_PHY_MAC_SPEC_CTRL_2     \
    	GG82563_REG(2, 26) /* MAC Specific Control 2 */
    
    #define GG82563_PHY_DSP_DISTANCE    \
    	GG82563_REG(5, 26) /* DSP Distance */
    
    /* Page 193 - Port Control Registers */
    #define GG82563_PHY_KMRN_MODE_CTRL   \
    	GG82563_REG(193, 16) /* Kumeran Mode Control */
    #define GG82563_PHY_PORT_RESET          \
    	GG82563_REG(193, 17) /* Port Reset */
    #define GG82563_PHY_REVISION_ID         \
    	GG82563_REG(193, 18) /* Revision ID */
    #define GG82563_PHY_DEVICE_ID           \
    	GG82563_REG(193, 19) /* Device ID */
    #define GG82563_PHY_PWR_MGMT_CTRL       \
    	GG82563_REG(193, 20) /* Power Management Control */
    #define GG82563_PHY_RATE_ADAPT_CTRL     \
    	GG82563_REG(193, 25) /* Rate Adaptation Control */
    
    /* Page 194 - KMRN Registers */
    #define GG82563_PHY_KMRN_FIFO_CTRL_STAT \
    	GG82563_REG(194, 16) /* FIFO's Control/Status */
    #define GG82563_PHY_KMRN_CTRL           \
    	GG82563_REG(194, 17) /* Control */
    #define GG82563_PHY_INBAND_CTRL         \
    	GG82563_REG(194, 18) /* Inband Control */
    #define GG82563_PHY_KMRN_DIAGNOSTIC     \
    	GG82563_REG(194, 19) /* Diagnostic */
    #define GG82563_PHY_ACK_TIMEOUTS        \
    	GG82563_REG(194, 20) /* Acknowledge Timeouts */
    #define GG82563_PHY_ADV_ABILITY         \
    	GG82563_REG(194, 21) /* Advertised Ability */
    #define GG82563_PHY_LINK_PARTNER_ADV_ABILITY \
    	GG82563_REG(194, 23) /* Link Partner Advertised Ability */
    #define GG82563_PHY_ADV_NEXT_PAGE       \
    	GG82563_REG(194, 24) /* Advertised Next Page */
    #define GG82563_PHY_LINK_PARTNER_ADV_NEXT_PAGE \
    	GG82563_REG(194, 25) /* Link Partner Advertised Next page */
    #define GG82563_PHY_KMRN_MISC           \
    	GG82563_REG(194, 26) /* Misc. */
    
    
    /* PHY Control Register */
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    #define MII_CR_SPEED_SELECT_MSB		0x0040	/* bits 6,13: 10=1000, 01=100, 00=10 */
    #define MII_CR_COLL_TEST_ENABLE		0x0080	/* Collision test enable */
    #define MII_CR_FULL_DUPLEX		0x0100	/* FDX =1, half duplex =0 */
    #define MII_CR_RESTART_AUTO_NEG		0x0200	/* Restart auto negotiation */
    #define MII_CR_ISOLATE			0x0400	/* Isolate PHY from MII */
    #define MII_CR_POWER_DOWN		0x0800	/* Power down */
    #define MII_CR_AUTO_NEG_EN		0x1000	/* Auto Neg Enable */
    #define MII_CR_SPEED_SELECT_LSB		0x2000	/* bits 6,13: 10=1000, 01=100, 00=10 */
    #define MII_CR_LOOPBACK			0x4000	/* 0 = normal, 1 = loopback */
    #define MII_CR_RESET			0x8000	/* 0 = normal, 1 = PHY reset */
    
    
    /* PHY Status Register */
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    #define MII_SR_EXTENDED_CAPS		0x0001	/* Extended register capabilities */
    #define MII_SR_JABBER_DETECT		0x0002	/* Jabber Detected */
    #define MII_SR_LINK_STATUS		0x0004	/* Link Status 1 = link */
    #define MII_SR_AUTONEG_CAPS		0x0008	/* Auto Neg Capable */
    #define MII_SR_REMOTE_FAULT		0x0010	/* Remote Fault Detect */
    #define MII_SR_AUTONEG_COMPLETE		0x0020	/* Auto Neg Complete */
    #define MII_SR_PREAMBLE_SUPPRESS	0x0040	/* Preamble may be suppressed */
    #define MII_SR_EXTENDED_STATUS		0x0100	/* Ext. status info in Reg 0x0F */
    #define MII_SR_100T2_HD_CAPS		0x0200	/* 100T2 Half Duplex Capable */
    #define MII_SR_100T2_FD_CAPS		0x0400	/* 100T2 Full Duplex Capable */
    #define MII_SR_10T_HD_CAPS		0x0800	/* 10T	 Half Duplex Capable */
    #define MII_SR_10T_FD_CAPS		0x1000	/* 10T	 Full Duplex Capable */
    #define MII_SR_100X_HD_CAPS		0x2000	/* 100X  Half Duplex Capable */
    #define MII_SR_100X_FD_CAPS		0x4000	/* 100X  Full Duplex Capable */
    #define MII_SR_100T4_CAPS		0x8000	/* 100T4 Capable */
    
    
    /* Autoneg Advertisement Register */
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    #define NWAY_AR_SELECTOR_FIELD		0x0001	/* indicates IEEE 802.3 CSMA/CD */
    #define NWAY_AR_10T_HD_CAPS		0x0020	/* 10T	 Half Duplex Capable */
    #define NWAY_AR_10T_FD_CAPS		0x0040	/* 10T	 Full Duplex Capable */
    #define NWAY_AR_100TX_HD_CAPS		0x0080	/* 100TX Half Duplex Capable */
    #define NWAY_AR_100TX_FD_CAPS		0x0100	/* 100TX Full Duplex Capable */
    #define NWAY_AR_100T4_CAPS		0x0200	/* 100T4 Capable */
    #define NWAY_AR_PAUSE			0x0400	/* Pause operation desired */
    #define NWAY_AR_ASM_DIR		0x0800	/* Asymmetric Pause Direction bit */
    #define NWAY_AR_REMOTE_FAULT		0x2000	/* Remote Fault detected */
    #define NWAY_AR_NEXT_PAGE		0x8000	/* Next Page ability supported */
    
    
    /* Link Partner Ability Register (Base Page) */
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    #define NWAY_LPAR_SELECTOR_FIELD	0x0000	/* LP protocol selector field */
    #define NWAY_LPAR_10T_HD_CAPS		0x0020	/* LP is 10T   Half Duplex Capable */
    #define NWAY_LPAR_10T_FD_CAPS		0x0040	/* LP is 10T   Full Duplex Capable */
    #define NWAY_LPAR_100TX_HD_CAPS	0x0080	/* LP is 100TX Half Duplex Capable */
    #define NWAY_LPAR_100TX_FD_CAPS	0x0100	/* LP is 100TX Full Duplex Capable */
    #define NWAY_LPAR_100T4_CAPS		0x0200	/* LP is 100T4 Capable */
    #define NWAY_LPAR_PAUSE			0x0400	/* LP Pause operation desired */
    #define NWAY_LPAR_ASM_DIR		0x0800	/* LP Asymmetric Pause Direction bit */
    #define NWAY_LPAR_REMOTE_FAULT		0x2000	/* LP has detected Remote Fault */
    #define NWAY_LPAR_ACKNOWLEDGE		0x4000	/* LP has rx'd link code word */
    #define NWAY_LPAR_NEXT_PAGE		0x8000	/* Next Page ability supported */
    
    
    /* Autoneg Expansion Register */
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    #define NWAY_ER_LP_NWAY_CAPS		0x0001	/* LP has Auto Neg Capability */
    #define NWAY_ER_PAGE_RXD		0x0002	/* LP is 10T   Half Duplex Capable */
    #define NWAY_ER_NEXT_PAGE_CAPS		0x0004	/* LP is 10T   Full Duplex Capable */
    #define NWAY_ER_LP_NEXT_PAGE_CAPS	0x0008	/* LP is 100TX Half Duplex Capable */
    #define NWAY_ER_PAR_DETECT_FAULT	0x0100	/* LP is 100TX Full Duplex Capable */
    
    
    /* Next Page TX Register */
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    #define NPTX_MSG_CODE_FIELD		0x0001	/* NP msg code or unformatted data */
    #define NPTX_TOGGLE			0x0800	/* Toggles between exchanges
    						 * of different NP
    						 */
    #define NPTX_ACKNOWLDGE2		0x1000	/* 1 = will comply with msg
    						 * 0 = cannot comply with msg
    						 */
    #define NPTX_MSG_PAGE			0x2000	/* formatted(1)/unformatted(0) pg */
    #define NPTX_NEXT_PAGE			0x8000	/* 1 = addition NP will follow
    						 * 0 = sending last NP
    						 */
    
    
    /* Link Partner Next Page Register */
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    #define LP_RNPR_MSG_CODE_FIELD		0x0001	/* NP msg code or unformatted data */
    #define LP_RNPR_TOGGLE			0x0800	/* Toggles between exchanges
    						 * of different NP
    						 */
    #define LP_RNPR_ACKNOWLDGE2		0x1000	/* 1 = will comply with msg
    						 * 0 = cannot comply with msg
    						 */
    #define LP_RNPR_MSG_PAGE		0x2000	/* formatted(1)/unformatted(0) pg */
    #define LP_RNPR_ACKNOWLDGE		0x4000	/* 1 = ACK / 0 = NO ACK */
    #define LP_RNPR_NEXT_PAGE		0x8000	/* 1 = addition NP will follow
    						 * 0 = sending last NP
    						 */
    
    
    /* 1000BASE-T Control Register */
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    #define CR_1000T_ASYM_PAUSE		0x0080	/* Advertise asymmetric pause bit */
    #define CR_1000T_HD_CAPS		0x0100	/* Advertise 1000T HD capability */
    #define CR_1000T_FD_CAPS		0x0200	/* Advertise 1000T FD capability  */
    #define CR_1000T_REPEATER_DTE		0x0400	/* 1=Repeater/switch device port */
    						/* 0=DTE device */
    #define CR_1000T_MS_VALUE		0x0800	/* 1=Configure PHY as Master */
    						/* 0=Configure PHY as Slave */
    #define CR_1000T_MS_ENABLE		0x1000	/* 1=Master/Slave manual config value */
    						/* 0=Automatic Master/Slave config */
    #define CR_1000T_TEST_MODE_NORMAL	0x0000	/* Normal Operation */
    #define CR_1000T_TEST_MODE_1		0x2000	/* Transmit Waveform test */
    #define CR_1000T_TEST_MODE_2		0x4000	/* Master Transmit Jitter test */
    #define CR_1000T_TEST_MODE_3		0x6000	/* Slave Transmit Jitter test */
    #define CR_1000T_TEST_MODE_4		0x8000	/* Transmitter Distortion test */
    
    
    /* 1000BASE-T Status Register */
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    #define SR_1000T_IDLE_ERROR_CNT	0x00FF	/* Num idle errors since last read */
    #define SR_1000T_ASYM_PAUSE_DIR	0x0100	/* LP asymmetric pause direction bit */
    #define SR_1000T_LP_HD_CAPS		0x0400	/* LP is 1000T HD capable */
    #define SR_1000T_LP_FD_CAPS		0x0800	/* LP is 1000T FD capable */
    #define SR_1000T_REMOTE_RX_STATUS	0x1000	/* Remote receiver OK */
    #define SR_1000T_LOCAL_RX_STATUS	0x2000	/* Local receiver OK */
    #define SR_1000T_MS_CONFIG_RES		0x4000	/* 1=Local TX is Master, 0=Slave */
    #define SR_1000T_MS_CONFIG_FAULT	0x8000	/* Master/Slave config fault */
    
    #define SR_1000T_REMOTE_RX_STATUS_SHIFT 12
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    #define SR_1000T_LOCAL_RX_STATUS_SHIFT	13
    
    
    /* Extended Status Register */
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    #define IEEE_ESR_1000T_HD_CAPS		0x1000	/* 1000T HD capable */
    #define IEEE_ESR_1000T_FD_CAPS		0x2000	/* 1000T FD capable */
    #define IEEE_ESR_1000X_HD_CAPS		0x4000	/* 1000X HD capable */
    #define IEEE_ESR_1000X_FD_CAPS		0x8000	/* 1000X FD capable */
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    #define PHY_TX_POLARITY_MASK		0x0100	/* register 10h bit 8 (polarity bit) */
    #define PHY_TX_NORMAL_POLARITY		0	/* register 10h bit 8 (normal polarity) */
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    #define AUTO_POLARITY_DISABLE		0x0010	/* register 11h bit 4 */
    						/* (0=enable, 1=disable) */
    
    
    /* M88E1000 PHY Specific Control Register */
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    #define M88E1000_PSCR_JABBER_DISABLE	0x0001	/* 1=Jabber Function disabled */
    
    #define M88E1000_PSCR_POLARITY_REVERSAL 0x0002	/* 1=Polarity Reversal enabled */
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    #define M88E1000_PSCR_SQE_TEST		0x0004	/* 1=SQE Test enabled */
    #define M88E1000_PSCR_CLK125_DISABLE	0x0010	/* 1=CLK125 low,
    
    						 * 0=CLK125 toggling
    						 */
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    #define M88E1000_PSCR_MDI_MANUAL_MODE	0x0000	/* MDI Crossover Mode bits 6:5 */
    						/* Manual MDI configuration */
    #define M88E1000_PSCR_MDIX_MANUAL_MODE	0x0020	/* Manual MDIX configuration */
    #define M88E1000_PSCR_AUTO_X_1000T	0x0040	/* 1000BASE-T: Auto crossover,
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    						 *  100BASE-TX/10BASE-T:
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    #define M88E1000_PSCR_AUTO_X_MODE	0x0060	/* Auto crossover enabled
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    						 * all speeds.
    
    						 */
    #define M88E1000_PSCR_10BT_EXT_DIST_ENABLE 0x0080
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    						/* 1=Enable Extended 10BASE-T distance
    						 * (Lower 10BASE-T RX Threshold)
    						 * 0=Normal 10BASE-T RX Threshold */
    #define M88E1000_PSCR_MII_5BIT_ENABLE	0x0100
    						/* 1=5-Bit interface in 100BASE-TX
    						 * 0=MII interface in 100BASE-TX */
    #define M88E1000_PSCR_SCRAMBLER_DISABLE 0x0200	/* 1=Scrambler disable */
    #define M88E1000_PSCR_FORCE_LINK_GOOD	0x0400	/* 1=Force link good */
    #define M88E1000_PSCR_ASSERT_CRS_ON_TX	0x0800	/* 1=Assert CRS on Transmit */
    
    #define M88E1000_PSCR_POLARITY_REVERSAL_SHIFT	 1
    #define M88E1000_PSCR_AUTO_X_MODE_SHIFT		 5
    
    #define M88E1000_PSCR_10BT_EXT_DIST_ENABLE_SHIFT 7
    
    /* M88E1000 PHY Specific Status Register */
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    #define M88E1000_PSSR_JABBER		0x0001	/* 1=Jabber */
    #define M88E1000_PSSR_REV_POLARITY	0x0002	/* 1=Polarity reversed */
    #define M88E1000_PSSR_MDIX		0x0040	/* 1=MDIX; 0=MDI */
    #define M88E1000_PSSR_CABLE_LENGTH	0x0380	/* 0=<50M;1=50-80M;2=80-110M;
    						 * 3=110-140M;4=>140M */
    #define M88E1000_PSSR_LINK		0x0400	/* 1=Link up, 0=Link down */
    #define M88E1000_PSSR_SPD_DPLX_RESOLVED 0x0800	/* 1=Speed & Duplex resolved */
    #define M88E1000_PSSR_PAGE_RCVD		0x1000	/* 1=Page received */
    #define M88E1000_PSSR_DPLX		0x2000	/* 1=Duplex 0=Half Duplex */
    #define M88E1000_PSSR_SPEED		0xC000	/* Speed, bits 14:15 */
    #define M88E1000_PSSR_10MBS		0x0000	/* 00=10Mbs */
    #define M88E1000_PSSR_100MBS		0x4000	/* 01=100Mbs */
    #define M88E1000_PSSR_1000MBS		0x8000	/* 10=1000Mbs */
    
    
    #define M88E1000_PSSR_REV_POLARITY_SHIFT 1
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    #define M88E1000_PSSR_MDIX_SHIFT	 6
    
    #define M88E1000_PSSR_CABLE_LENGTH_SHIFT 7
    
    /* M88E1000 Extended PHY Specific Control Register */
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    #define M88E1000_EPSCR_FIBER_LOOPBACK	0x4000	/* 1=Fiber loopback */
    #define M88E1000_EPSCR_DOWN_NO_IDLE	0x8000	/* 1=Lost lock detect enabled.
    
    						 * Will assert lost lock and bring
    						 * link down if idle not seen
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    						 * within 1ms in 1000BASE-T
    
    						 */
    /* Number of times we will attempt to autonegotiate before downshifting if we
     * are the master */
    #define M88E1000_EPSCR_MASTER_DOWNSHIFT_MASK 0x0C00
    #define M88E1000_EPSCR_MASTER_DOWNSHIFT_1X   0x0000
    #define M88E1000_EPSCR_MASTER_DOWNSHIFT_2X   0x0400
    #define M88E1000_EPSCR_MASTER_DOWNSHIFT_3X   0x0800
    #define M88E1000_EPSCR_MASTER_DOWNSHIFT_4X   0x0C00
    /* Number of times we will attempt to autonegotiate before downshifting if we
     * are the slave */
    #define M88E1000_EPSCR_SLAVE_DOWNSHIFT_MASK  0x0300
    #define M88E1000_EPSCR_SLAVE_DOWNSHIFT_DIS   0x0000
    #define M88E1000_EPSCR_SLAVE_DOWNSHIFT_1X    0x0100
    #define M88E1000_EPSCR_SLAVE_DOWNSHIFT_2X    0x0200
    #define M88E1000_EPSCR_SLAVE_DOWNSHIFT_3X    0x0300
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    #define M88E1000_EPSCR_TX_CLK_2_5	0x0060	/* 2.5 MHz TX_CLK */
    #define M88E1000_EPSCR_TX_CLK_25	0x0070	/* 25  MHz TX_CLK */
    #define M88E1000_EPSCR_TX_CLK_0	0x0000	/* NO  TX_CLK */
    
    
    /* Bit definitions for valid PHY IDs. */
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    #define M88E1000_E_PHY_ID		0x01410C50
    #define M88E1000_I_PHY_ID		0x01410C30
    #define M88E1011_I_PHY_ID		0x01410C20
    #define M88E1000_12_PHY_ID		M88E1000_E_PHY_ID
    #define M88E1000_14_PHY_ID		M88E1000_E_PHY_ID
    #define IGP01E1000_I_PHY_ID		0x02A80380
    
    #define M88E1011_I_REV_4   0x04
    #define M88E1111_I_PHY_ID  0x01410CC0
    #define L1LXT971A_PHY_ID   0x001378E0
    #define GG82563_E_PHY_ID   0x01410CA0
    
    #define BME1000_E_PHY_ID     0x01410CB0
    
    
    /* Miscellaneous PHY bit definitions. */
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    #define PHY_PREAMBLE			0xFFFFFFFF
    #define PHY_SOF				0x01
    #define PHY_OP_READ			0x02
    #define PHY_OP_WRITE			0x01
    #define PHY_TURNAROUND			0x02
    #define PHY_PREAMBLE_SIZE		32
    #define MII_CR_SPEED_1000		0x0040
    #define MII_CR_SPEED_100		0x2000
    #define MII_CR_SPEED_10		0x0000
    #define E1000_PHY_ADDRESS		0x01
    #define PHY_AUTO_NEG_TIME		45	/* 4.5 Seconds */
    #define PHY_FORCE_TIME			20	/* 2.0 Seconds */
    #define PHY_REVISION_MASK		0xFFFFFFF0
    #define DEVICE_SPEED_MASK		0x00000300	/* Device Ctrl Reg Speed Mask */
    #define REG4_SPEED_MASK		0x01E0
    #define REG9_SPEED_MASK		0x0300
    #define ADVERTISE_10_HALF		0x0001
    #define ADVERTISE_10_FULL		0x0002
    #define ADVERTISE_100_HALF		0x0004
    #define ADVERTISE_100_FULL		0x0008
    #define ADVERTISE_1000_HALF		0x0010
    #define ADVERTISE_1000_FULL		0x0020
    
    #define ICH_FLASH_GFPREG   0x0000
    #define ICH_FLASH_HSFSTS   0x0004
    #define ICH_FLASH_HSFCTL   0x0006
    #define ICH_FLASH_FADDR    0x0008
    #define ICH_FLASH_FDATA0   0x0010
    #define ICH_FLASH_FRACC    0x0050
    #define ICH_FLASH_FREG0    0x0054
    #define ICH_FLASH_FREG1    0x0058
    #define ICH_FLASH_FREG2    0x005C
    #define ICH_FLASH_FREG3    0x0060
    #define ICH_FLASH_FPR0     0x0074
    #define ICH_FLASH_FPR1     0x0078
    #define ICH_FLASH_SSFSTS   0x0090
    #define ICH_FLASH_SSFCTL   0x0092
    #define ICH_FLASH_PREOP    0x0094
    #define ICH_FLASH_OPTYPE   0x0096
    #define ICH_FLASH_OPMENU   0x0098
    
    #define ICH_FLASH_REG_MAPSIZE      0x00A0
    #define ICH_FLASH_SECTOR_SIZE      4096
    #define ICH_GFPREG_BASE_MASK       0x1FFF
    #define ICH_FLASH_LINEAR_ADDR_MASK 0x00FFFFFF
    
    #define E1000_SW_FW_SYNC 0x05B5C /* Software-Firmware Synchronization - RW */
    
    /* SPI EEPROM Status Register */
    #define EEPROM_STATUS_RDY_SPI  0x01
    #define EEPROM_STATUS_WEN_SPI  0x02
    #define EEPROM_STATUS_BP0_SPI  0x04
    #define EEPROM_STATUS_BP1_SPI  0x08
    #define EEPROM_STATUS_WPEN_SPI 0x80
    
    /* SW Semaphore Register */
    #define E1000_SWSM_SMBI		0x00000001 /* Driver Semaphore bit */
    #define E1000_SWSM_SWESMBI	0x00000002 /* FW Semaphore bit */
    #define E1000_SWSM_WMNG		0x00000004 /* Wake MNG Clock */
    #define E1000_SWSM_DRV_LOAD	0x00000008 /* Driver Loaded Bit */
    
    /* FW Semaphore Register */
    #define E1000_FWSM_MODE_MASK    0x0000000E /* FW mode */
    #define E1000_FWSM_MODE_SHIFT            1
    #define E1000_FWSM_FW_VALID     0x00008000 /* FW established a valid mode */
    
    #define E1000_FWSM_RSPCIPHY        0x00000040 /* Reset PHY on PCI reset */
    #define E1000_FWSM_DISSW           0x10000000 /* FW disable SW Write Access */
    #define E1000_FWSM_SKUSEL_MASK     0x60000000 /* LAN SKU select */
    #define E1000_FWSM_SKUEL_SHIFT     29
    #define E1000_FWSM_SKUSEL_EMB      0x0 /* Embedded SKU */
    #define E1000_FWSM_SKUSEL_CONS     0x1 /* Consumer SKU */
    #define E1000_FWSM_SKUSEL_PERF_100 0x2 /* Perf & Corp 10/100 SKU */
    #define E1000_FWSM_SKUSEL_PERF_GBE 0x3 /* Perf & Copr GbE SKU */
    
    #define E1000_GCR       0x05B00 /* PCI-Ex Control */
    #define E1000_GSCL_1    0x05B10 /* PCI-Ex Statistic Control #1 */
    #define E1000_GSCL_2    0x05B14 /* PCI-Ex Statistic Control #2 */
    #define E1000_GSCL_3    0x05B18 /* PCI-Ex Statistic Control #3 */
    #define E1000_GSCL_4    0x05B1C /* PCI-Ex Statistic Control #4 */
    #define E1000_FACTPS    0x05B30 /* Function Active and Power State to MNG */
    #define E1000_SWSM      0x05B50 /* SW Semaphore */
    #define E1000_FWSM      0x05B54 /* FW Semaphore */
    #define E1000_FFLT_DBG  0x05F04 /* Debug Register */
    #define E1000_HICR      0x08F00 /* Host Inteface Control */
    
    #define IGP_ACTIVITY_LED_MASK   0xFFFFF0FF
    #define IGP_ACTIVITY_LED_ENABLE 0x0300
    #define IGP_LED3_MODE           0x07000000
    
    /* Mask bit for PHY class in Word 7 of the EEPROM */
    #define EEPROM_PHY_CLASS_A   0x8000
    #define AUTONEG_ADVERTISE_SPEED_DEFAULT 0x002F  /* Everything but 1000-Half */
    #define AUTONEG_ADVERTISE_10_100_ALL    0x000F /* All 10/100 speeds*/
    #define AUTONEG_ADVERTISE_10_ALL        0x0003 /* 10Mbps Full & Half speeds*/
    
    #define E1000_KUMCTRLSTA_MASK           0x0000FFFF
    #define E1000_KUMCTRLSTA_OFFSET         0x001F0000
    #define E1000_KUMCTRLSTA_OFFSET_SHIFT   16
    #define E1000_KUMCTRLSTA_REN            0x00200000
    
    #define E1000_KUMCTRLSTA_OFFSET_FIFO_CTRL      0x00000000
    #define E1000_KUMCTRLSTA_OFFSET_CTRL           0x00000001
    #define E1000_KUMCTRLSTA_OFFSET_INB_CTRL       0x00000002
    #define E1000_KUMCTRLSTA_OFFSET_DIAG           0x00000003
    #define E1000_KUMCTRLSTA_OFFSET_TIMEOUTS       0x00000004
    #define E1000_KUMCTRLSTA_OFFSET_INB_PARAM      0x00000009
    #define E1000_KUMCTRLSTA_OFFSET_HD_CTRL        0x00000010
    #define E1000_KUMCTRLSTA_OFFSET_M2P_SERDES     0x0000001E
    #define E1000_KUMCTRLSTA_OFFSET_M2P_MODES      0x0000001F
    
    /* FIFO Control */
    #define E1000_KUMCTRLSTA_FIFO_CTRL_RX_BYPASS   0x00000008
    #define E1000_KUMCTRLSTA_FIFO_CTRL_TX_BYPASS   0x00000800
    
    /* In-Band Control */
    #define E1000_KUMCTRLSTA_INB_CTRL_LINK_STATUS_TX_TIMEOUT_DEFAULT    0x00000500
    #define E1000_KUMCTRLSTA_INB_CTRL_DIS_PADDING  0x00000010
    
    /* Half-Duplex Control */
    #define E1000_KUMCTRLSTA_HD_CTRL_10_100_DEFAULT 0x00000004
    #define E1000_KUMCTRLSTA_HD_CTRL_1000_DEFAULT  0x00000000
    
    #define E1000_KUMCTRLSTA_OFFSET_K0S_CTRL       0x0000001E
    
    #define E1000_KUMCTRLSTA_DIAG_FELPBK           0x2000
    #define E1000_KUMCTRLSTA_DIAG_NELPBK           0x1000
    
    #define E1000_KUMCTRLSTA_K0S_100_EN            0x2000
    #define E1000_KUMCTRLSTA_K0S_GBE_EN            0x1000
    #define E1000_KUMCTRLSTA_K0S_ENTRY_LATENCY_MASK   0x0003
    
    #define E1000_MNG_ICH_IAMT_MODE         0x2
    #define E1000_MNG_IAMT_MODE             0x3
    #define E1000_MANC_BLK_PHY_RST_ON_IDE   0x00040000 /* Block phy resets */
    #define E1000_KUMCTRLSTA 0x00034 /* MAC-PHY interface - RW */
    /* Number of milliseconds we wait for PHY configuration done after MAC reset */
    #define PHY_CFG_TIMEOUT             100
    #define DEFAULT_80003ES2LAN_TIPG_IPGT_10_100 0x00000009
    #define DEFAULT_80003ES2LAN_TIPG_IPGT_1000   0x00000008
    #define AUTO_ALL_MODES	0
    
    #ifndef E1000_MASTER_SLAVE
    /* Switch to override PHY master/slave setting */
    #define E1000_MASTER_SLAVE	e1000_ms_hw_default
    #endif
    /* Extended Transmit Control */
    #define E1000_TCTL_EXT_BST_MASK  0x000003FF /* Backoff Slot Time */
    #define E1000_TCTL_EXT_GCEX_MASK 0x000FFC00 /* Gigabit Carry Extend Padding */
    
    #define DEFAULT_80003ES2LAN_TCTL_EXT_GCEX   0x00010000
    
    #define PCI_EX_82566_SNOOP_ALL PCI_EX_NO_SNOOP_ALL
    
    #define E1000_GCR_L1_ACT_WITHOUT_L0S_RX 0x08000000
    #define E1000_MC_TBL_SIZE_ICH8LAN  32
    
    #define E1000_CTRL_EXT_INT_TIMER_CLR  0x20000000 /* Clear Interrupt timers
    							after IMS clear */
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    #endif	/* _E1000_HW_H_ */