076c4c2633
Cosmetic changes to make code more unix-like. MFC after: 1 week
387 lines
19 KiB
C
387 lines
19 KiB
C
/*******************************************************************************
|
|
|
|
Copyright (c) 2001-2002 Intel Corporation
|
|
All rights reserved.
|
|
|
|
Redistribution and use in source and binary forms of the Software, with or
|
|
without modification, are permitted provided that the following conditions
|
|
are met:
|
|
|
|
1. Redistributions of source code of the Software may retain the above
|
|
copyright notice, this list of conditions and the following disclaimer.
|
|
|
|
2. Redistributions in binary form of the Software may reproduce the above
|
|
copyright notice, this list of conditions and the following disclaimer
|
|
in the documentation and/or other materials provided with the
|
|
distribution.
|
|
|
|
3. Neither the name of the Intel Corporation nor the names of its
|
|
contributors shall be used to endorse or promote products derived from
|
|
this Software without specific prior written permission.
|
|
|
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR ITS CONTRIBUTORS BE LIABLE
|
|
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
SUCH DAMAGE.
|
|
|
|
*******************************************************************************/
|
|
|
|
/*$FreeBSD$*/
|
|
/* if_em_phy.h
|
|
* Structures, enums, and macros for the PHY
|
|
*/
|
|
|
|
#ifndef _EM_PHY_H_
|
|
#define _EM_PHY_H_
|
|
|
|
#include <dev/em/if_em_osdep.h>
|
|
|
|
/* PHY status info structure and supporting enums */
|
|
typedef enum {
|
|
em_cable_length_50 = 0,
|
|
em_cable_length_50_80,
|
|
em_cable_length_80_110,
|
|
em_cable_length_110_140,
|
|
em_cable_length_140,
|
|
em_cable_length_undefined = 0xFF
|
|
} em_cable_length;
|
|
|
|
typedef enum {
|
|
em_10bt_ext_dist_enable_normal = 0,
|
|
em_10bt_ext_dist_enable_lower,
|
|
em_10bt_ext_dist_enable_undefined = 0xFF
|
|
} em_10bt_ext_dist_enable;
|
|
|
|
typedef enum {
|
|
em_rev_polarity_normal = 0,
|
|
em_rev_polarity_reversed,
|
|
em_rev_polarity_undefined = 0xFF
|
|
} em_rev_polarity;
|
|
|
|
typedef enum {
|
|
em_polarity_reversal_enabled = 0,
|
|
em_polarity_reversal_disabled,
|
|
em_polarity_reversal_undefined = 0xFF
|
|
} em_polarity_reversal;
|
|
|
|
typedef enum {
|
|
em_down_no_idle_no_detect = 0,
|
|
em_down_no_idle_detect,
|
|
em_down_no_idle_undefined = 0xFF
|
|
} em_down_no_idle;
|
|
|
|
typedef enum {
|
|
em_auto_x_mode_manual_mdi = 0,
|
|
em_auto_x_mode_manual_mdix,
|
|
em_auto_x_mode_auto1,
|
|
em_auto_x_mode_auto2,
|
|
em_auto_x_mode_undefined = 0xFF
|
|
} em_auto_x_mode;
|
|
|
|
typedef enum {
|
|
em_1000t_rx_status_not_ok = 0,
|
|
em_1000t_rx_status_ok,
|
|
em_1000t_rx_status_undefined = 0xFF
|
|
} em_1000t_rx_status;
|
|
|
|
struct em_phy_info {
|
|
em_cable_length cable_length;
|
|
em_10bt_ext_dist_enable extended_10bt_distance;
|
|
em_rev_polarity cable_polarity;
|
|
em_polarity_reversal polarity_correction;
|
|
em_down_no_idle link_reset;
|
|
em_auto_x_mode mdix_mode;
|
|
em_1000t_rx_status local_rx;
|
|
em_1000t_rx_status remote_rx;
|
|
};
|
|
|
|
struct em_phy_stats {
|
|
uint32_t idle_errors;
|
|
uint32_t receive_errors;
|
|
};
|
|
|
|
/* Function Prototypes */
|
|
uint16_t em_read_phy_reg(struct em_shared_adapter *shared, uint32_t reg_addr);
|
|
void em_write_phy_reg(struct em_shared_adapter *shared, uint32_t reg_addr, uint16_t data);
|
|
void em_phy_hw_reset(struct em_shared_adapter *shared);
|
|
boolean_t em_phy_reset(struct em_shared_adapter *shared);
|
|
boolean_t em_phy_setup(struct em_shared_adapter *shared, uint32_t ctrl_reg);
|
|
boolean_t em_phy_setup_autoneg(struct em_shared_adapter *shared);
|
|
void em_config_mac_to_phy(struct em_shared_adapter *shared, uint16_t mii_reg);
|
|
void em_config_collision_dist(struct em_shared_adapter *shared);
|
|
void em_display_mii(struct em_shared_adapter *shared);
|
|
boolean_t em_detect_gig_phy(struct em_shared_adapter *shared);
|
|
void em_phy_reset_dsp(struct em_shared_adapter *shared);
|
|
boolean_t em_wait_autoneg(struct em_shared_adapter *shared);
|
|
boolean_t em_phy_get_info(struct em_shared_adapter *shared, struct em_phy_info *phy_status_info);
|
|
boolean_t em_validate_mdi_setting(struct em_shared_adapter *shared);
|
|
|
|
/* Bit definitions for the Management Data IO (MDIO) and Management Data
|
|
* Clock (MDC) pins in the Device Control Register.
|
|
*/
|
|
#define E1000_CTRL_PHY_RESET_DIR E1000_CTRL_SWDPIO0
|
|
#define E1000_CTRL_PHY_RESET E1000_CTRL_SWDPIN0
|
|
#define E1000_CTRL_MDIO_DIR E1000_CTRL_SWDPIO2
|
|
#define E1000_CTRL_MDIO E1000_CTRL_SWDPIN2
|
|
#define E1000_CTRL_MDC_DIR E1000_CTRL_SWDPIO3
|
|
#define E1000_CTRL_MDC E1000_CTRL_SWDPIN3
|
|
#define E1000_CTRL_PHY_RESET_DIR4 E1000_CTRL_EXT_SDP4_DIR
|
|
#define E1000_CTRL_PHY_RESET4 E1000_CTRL_EXT_SDP4_DATA
|
|
|
|
/* PHY 1000 MII Register/Bit Definitions */
|
|
/* PHY Registers defined by IEEE */
|
|
#define PHY_CTRL 0x00 /* Control Register */
|
|
#define PHY_STATUS 0x01 /* Status Regiser */
|
|
#define PHY_ID1 0x02 /* Phy Id Reg (word 1) */
|
|
#define PHY_ID2 0x03 /* Phy Id Reg (word 2) */
|
|
#define PHY_AUTONEG_ADV 0x04 /* Autoneg Advertisement */
|
|
#define PHY_LP_ABILITY 0x05 /* Link Partner Ability (Base Page) */
|
|
#define PHY_AUTONEG_EXP 0x06 /* Autoneg Expansion Reg */
|
|
#define PHY_NEXT_PAGE_TX 0x07 /* Next Page TX */
|
|
#define PHY_LP_NEXT_PAGE 0x08 /* Link Partner Next Page */
|
|
#define PHY_1000T_CTRL 0x09 /* 1000Base-T Control Reg */
|
|
#define PHY_1000T_STATUS 0x0A /* 1000Base-T Status Reg */
|
|
#define PHY_EXT_STATUS 0x0F /* Extended Status Reg */
|
|
|
|
/* M88E1000 Specific Registers */
|
|
#define M88E1000_PHY_SPEC_CTRL 0x10 /* PHY Specific Control Register */
|
|
#define M88E1000_PHY_SPEC_STATUS 0x11 /* PHY Specific Status Register */
|
|
#define M88E1000_INT_ENABLE 0x12 /* Interrupt Enable Register */
|
|
#define M88E1000_INT_STATUS 0x13 /* Interrupt Status Register */
|
|
#define M88E1000_EXT_PHY_SPEC_CTRL 0x14 /* Extended PHY Specific Control */
|
|
#define M88E1000_RX_ERR_CNTR 0x15 /* Receive Error Counter */
|
|
|
|
#define MAX_PHY_REG_ADDRESS 0x1F /* 5 bit address bus (0-0x1F) */
|
|
|
|
/* PHY Control Register */
|
|
#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 */
|
|
#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 */
|
|
#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) */
|
|
#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 */
|
|
#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 */
|
|
#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 */
|
|
#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 */
|
|
#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 */
|
|
#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
|
|
#define SR_1000T_LOCAL_RX_STATUS_SHIFT 13
|
|
|
|
/* Extended Status Register */
|
|
#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 */
|
|
|
|
#define PHY_TX_POLARITY_MASK 0x0100 /* register 10h bit 8 (polarity bit) */
|
|
#define PHY_TX_NORMAL_POLARITY 0 /* register 10h bit 8 (normal polarity) */
|
|
|
|
#define AUTO_POLARITY_DISABLE 0x0010 /* register 11h bit 4 */
|
|
/* (0=enable, 1=disable) */
|
|
|
|
/* M88E1000 PHY Specific Control Register */
|
|
#define M88E1000_PSCR_JABBER_DISABLE 0x0001 /* 1=Jabber Function disabled */
|
|
#define M88E1000_PSCR_POLARITY_REVERSAL 0x0002 /* 1=Polarity Reversal enabled */
|
|
#define M88E1000_PSCR_SQE_TEST 0x0004 /* 1=SQE Test enabled */
|
|
#define M88E1000_PSCR_CLK125_DISABLE 0x0010 /* 1=CLK125 low,
|
|
* 0=CLK125 toggling
|
|
*/
|
|
#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,
|
|
* 100BASE-TX/10BASE-T:
|
|
* MDI Mode
|
|
*/
|
|
#define M88E1000_PSCR_AUTO_X_MODE 0x0060 /* Auto crossover enabled
|
|
* all speeds.
|
|
*/
|
|
#define M88E1000_PSCR_10BT_EXT_DIST_ENABLE 0x0080
|
|
/* 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 */
|
|
#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
|
|
#define M88E1000_PSSR_MDIX_SHIFT 6
|
|
#define M88E1000_PSSR_CABLE_LENGTH_SHIFT 7
|
|
|
|
/* M88E1000 Extended PHY Specific Control Register */
|
|
#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
|
|
* within 1ms in 1000BASE-T
|
|
*/
|
|
#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 */
|
|
|
|
#define M88E1000_EPSCR_DOWN_NO_IDLE_SHIFT 15
|
|
|
|
/* Bit definitions for valid PHY IDs. */
|
|
#define M88E1000_12_PHY_ID 0x01410C50
|
|
#define M88E1000_14_PHY_ID 0x01410C40
|
|
#define M88E1000_I_PHY_ID 0x01410C30
|
|
#define M88E1011_I_PHY_ID 0x01410C20
|
|
|
|
/* Miscellaneous PHY bit definitions. */
|
|
#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 AUTONEG_ADVERTISE_SPEED_DEFAULT 0x002F /* Everything but 1000-Half */
|
|
|
|
#endif /* _EM_PHY_H_ */
|