Commit c2ade1a4 authored by Bruce Allan's avatar Bruce Allan Committed by Jeff Kirsher

e1000e: use generic IEEE MII definitions

For standard IEEE MII-compatible transceivers, the kernel has generic
register and bit definitions.  Use those instead of redundant local
defines.

Do not replace references of MII_CR_SPEED_10 with BMCR_SPEED10 (0x0000)
when it is not necessary (i.e. when it is bitwise OR'ed with another
value).

Some whitespace issues in the surrounding context of the above changes are
also cleaned up.
Signed-off-by: default avatarBruce Allan <bruce.w.allan@intel.com>
Tested-by: default avatarAaron Brown <aaron.f.brown@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent 8bb62869
...@@ -624,16 +624,16 @@ static s32 e1000_phy_force_speed_duplex_80003es2lan(struct e1000_hw *hw) ...@@ -624,16 +624,16 @@ static s32 e1000_phy_force_speed_duplex_80003es2lan(struct e1000_hw *hw)
e_dbg("GG82563 PSCR: %X\n", phy_data); e_dbg("GG82563 PSCR: %X\n", phy_data);
ret_val = e1e_rphy(hw, PHY_CONTROL, &phy_data); ret_val = e1e_rphy(hw, MII_BMCR, &phy_data);
if (ret_val) if (ret_val)
return ret_val; return ret_val;
e1000e_phy_force_speed_duplex_setup(hw, &phy_data); e1000e_phy_force_speed_duplex_setup(hw, &phy_data);
/* Reset the phy to commit changes. */ /* Reset the phy to commit changes. */
phy_data |= MII_CR_RESET; phy_data |= BMCR_RESET;
ret_val = e1e_wphy(hw, PHY_CONTROL, phy_data); ret_val = e1e_wphy(hw, MII_BMCR, phy_data);
if (ret_val) if (ret_val)
return ret_val; return ret_val;
......
...@@ -447,13 +447,13 @@ static s32 e1000_get_phy_id_82571(struct e1000_hw *hw) ...@@ -447,13 +447,13 @@ static s32 e1000_get_phy_id_82571(struct e1000_hw *hw)
break; break;
case e1000_82574: case e1000_82574:
case e1000_82583: case e1000_82583:
ret_val = e1e_rphy(hw, PHY_ID1, &phy_id); ret_val = e1e_rphy(hw, MII_PHYSID1, &phy_id);
if (ret_val) if (ret_val)
return ret_val; return ret_val;
phy->id = (u32)(phy_id << 16); phy->id = (u32)(phy_id << 16);
udelay(20); udelay(20);
ret_val = e1e_rphy(hw, PHY_ID2, &phy_id); ret_val = e1e_rphy(hw, MII_PHYSID2, &phy_id);
if (ret_val) if (ret_val)
return ret_val; return ret_val;
......
...@@ -563,66 +563,6 @@ ...@@ -563,66 +563,6 @@
E1000_GCR_TXDSCW_NO_SNOOP | \ E1000_GCR_TXDSCW_NO_SNOOP | \
E1000_GCR_TXDSCR_NO_SNOOP) E1000_GCR_TXDSCR_NO_SNOOP)
/* PHY Control Register */
#define MII_CR_FULL_DUPLEX 0x0100 /* FDX =1, half duplex =0 */
#define MII_CR_RESTART_AUTO_NEG 0x0200 /* Restart auto negotiation */
#define MII_CR_POWER_DOWN 0x0800 /* Power down */
#define MII_CR_AUTO_NEG_EN 0x1000 /* Auto Neg Enable */
#define MII_CR_LOOPBACK 0x4000 /* 0 = normal, 1 = loopback */
#define MII_CR_RESET 0x8000 /* 0 = normal, 1 = PHY reset */
#define MII_CR_SPEED_1000 0x0040
#define MII_CR_SPEED_100 0x2000
#define MII_CR_SPEED_10 0x0000
/* PHY Status Register */
#define MII_SR_LINK_STATUS 0x0004 /* Link Status 1 = link */
#define MII_SR_AUTONEG_COMPLETE 0x0020 /* Auto Neg Complete */
/* Autoneg Advertisement Register */
#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_PAUSE 0x0400 /* Pause operation desired */
#define NWAY_AR_ASM_DIR 0x0800 /* Asymmetric Pause Direction bit */
/* Link Partner Ability Register (Base Page) */
#define NWAY_LPAR_100TX_FD_CAPS 0x0100 /* LP 100TX Full Dplx Capable */
#define NWAY_LPAR_PAUSE 0x0400 /* LP Pause operation desired */
#define NWAY_LPAR_ASM_DIR 0x0800 /* LP Asymmetric Pause Direction bit */
/* Autoneg Expansion Register */
#define NWAY_ER_LP_NWAY_CAPS 0x0001 /* LP has Auto Neg Capability */
/* 1000BASE-T Control Register */
#define CR_1000T_HD_CAPS 0x0100 /* Advertise 1000T HD capability */
#define CR_1000T_FD_CAPS 0x0200 /* Advertise 1000T FD capability */
/* 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 */
/* 1000BASE-T Status Register */
#define SR_1000T_REMOTE_RX_STATUS 0x1000 /* Remote receiver OK */
#define SR_1000T_LOCAL_RX_STATUS 0x2000 /* Local receiver OK */
/* PHY 1000 MII Register/Bit Definitions */
/* PHY Registers defined by IEEE */
#define PHY_CONTROL 0x00 /* Control Register */
#define PHY_STATUS 0x01 /* Status Register */
#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_1000T_CTRL 0x09 /* 1000Base-T Control Reg */
#define PHY_1000T_STATUS 0x0A /* 1000Base-T Status Reg */
#define PHY_EXT_STATUS 0x0F /* Extended Status Reg */
#define PHY_CONTROL_LB 0x4000 /* PHY Loopback bit */
/* NVM Control */ /* NVM Control */
#define E1000_EECD_SK 0x00000001 /* NVM Clock */ #define E1000_EECD_SK 0x00000001 /* NVM Clock */
#define E1000_EECD_CS 0x00000002 /* NVM Chip Select */ #define E1000_EECD_CS 0x00000002 /* NVM Chip Select */
......
...@@ -45,6 +45,7 @@ ...@@ -45,6 +45,7 @@
#include <linux/net_tstamp.h> #include <linux/net_tstamp.h>
#include <linux/ptp_clock_kernel.h> #include <linux/ptp_clock_kernel.h>
#include <linux/ptp_classify.h> #include <linux/ptp_classify.h>
#include <linux/mii.h>
#include "hw.h" #include "hw.h"
struct e1000_info; struct e1000_info;
......
...@@ -473,7 +473,7 @@ static void e1000_get_regs(struct net_device *netdev, ...@@ -473,7 +473,7 @@ static void e1000_get_regs(struct net_device *netdev,
regs_buff[23] = regs_buff[13]; /* mdix mode */ regs_buff[23] = regs_buff[13]; /* mdix mode */
} }
regs_buff[21] = 0; /* was idle_errors */ regs_buff[21] = 0; /* was idle_errors */
e1e_rphy(hw, PHY_1000T_STATUS, &phy_data); e1e_rphy(hw, MII_STAT1000, &phy_data);
regs_buff[24] = (u32)phy_data; /* phy local receiver status */ regs_buff[24] = (u32)phy_data; /* phy local receiver status */
regs_buff[25] = regs_buff[24]; /* phy remote receiver status */ regs_buff[25] = regs_buff[24]; /* phy remote receiver status */
} }
...@@ -1284,7 +1284,7 @@ static int e1000_integrated_phy_loopback(struct e1000_adapter *adapter) ...@@ -1284,7 +1284,7 @@ static int e1000_integrated_phy_loopback(struct e1000_adapter *adapter)
if (hw->phy.type == e1000_phy_ife) { if (hw->phy.type == e1000_phy_ife) {
/* force 100, set loopback */ /* force 100, set loopback */
e1e_wphy(hw, PHY_CONTROL, 0x6100); e1e_wphy(hw, MII_BMCR, 0x6100);
/* Now set up the MAC to the same speed/duplex as the PHY. */ /* Now set up the MAC to the same speed/duplex as the PHY. */
ctrl_reg = er32(CTRL); ctrl_reg = er32(CTRL);
...@@ -1307,9 +1307,9 @@ static int e1000_integrated_phy_loopback(struct e1000_adapter *adapter) ...@@ -1307,9 +1307,9 @@ static int e1000_integrated_phy_loopback(struct e1000_adapter *adapter)
/* Auto-MDI/MDIX Off */ /* Auto-MDI/MDIX Off */
e1e_wphy(hw, M88E1000_PHY_SPEC_CTRL, 0x0808); e1e_wphy(hw, M88E1000_PHY_SPEC_CTRL, 0x0808);
/* reset to update Auto-MDI/MDIX */ /* reset to update Auto-MDI/MDIX */
e1e_wphy(hw, PHY_CONTROL, 0x9140); e1e_wphy(hw, MII_BMCR, 0x9140);
/* autoneg off */ /* autoneg off */
e1e_wphy(hw, PHY_CONTROL, 0x8140); e1e_wphy(hw, MII_BMCR, 0x8140);
break; break;
case e1000_phy_gg82563: case e1000_phy_gg82563:
e1e_wphy(hw, GG82563_PHY_KMRN_MODE_CTRL, 0x1CC); e1e_wphy(hw, GG82563_PHY_KMRN_MODE_CTRL, 0x1CC);
...@@ -1363,7 +1363,7 @@ static int e1000_integrated_phy_loopback(struct e1000_adapter *adapter) ...@@ -1363,7 +1363,7 @@ static int e1000_integrated_phy_loopback(struct e1000_adapter *adapter)
} }
/* force 1000, set loopback */ /* force 1000, set loopback */
e1e_wphy(hw, PHY_CONTROL, 0x4140); e1e_wphy(hw, MII_BMCR, 0x4140);
mdelay(250); mdelay(250);
/* Now set up the MAC to the same speed/duplex as the PHY. */ /* Now set up the MAC to the same speed/duplex as the PHY. */
...@@ -1538,10 +1538,10 @@ static void e1000_loopback_cleanup(struct e1000_adapter *adapter) ...@@ -1538,10 +1538,10 @@ static void e1000_loopback_cleanup(struct e1000_adapter *adapter)
hw->mac.autoneg = 1; hw->mac.autoneg = 1;
if (hw->phy.type == e1000_phy_gg82563) if (hw->phy.type == e1000_phy_gg82563)
e1e_wphy(hw, GG82563_PHY_KMRN_MODE_CTRL, 0x180); e1e_wphy(hw, GG82563_PHY_KMRN_MODE_CTRL, 0x180);
e1e_rphy(hw, PHY_CONTROL, &phy_reg); e1e_rphy(hw, MII_BMCR, &phy_reg);
if (phy_reg & MII_CR_LOOPBACK) { if (phy_reg & BMCR_LOOPBACK) {
phy_reg &= ~MII_CR_LOOPBACK; phy_reg &= ~BMCR_LOOPBACK;
e1e_wphy(hw, PHY_CONTROL, phy_reg); e1e_wphy(hw, MII_BMCR, phy_reg);
if (hw->phy.ops.commit) if (hw->phy.ops.commit)
hw->phy.ops.commit(hw); hw->phy.ops.commit(hw);
} }
......
...@@ -312,12 +312,12 @@ static bool e1000_phy_is_accessible_pchlan(struct e1000_hw *hw) ...@@ -312,12 +312,12 @@ static bool e1000_phy_is_accessible_pchlan(struct e1000_hw *hw)
u16 retry_count; u16 retry_count;
for (retry_count = 0; retry_count < 2; retry_count++) { for (retry_count = 0; retry_count < 2; retry_count++) {
ret_val = e1e_rphy_locked(hw, PHY_ID1, &phy_reg); ret_val = e1e_rphy_locked(hw, MII_PHYSID1, &phy_reg);
if (ret_val || (phy_reg == 0xFFFF)) if (ret_val || (phy_reg == 0xFFFF))
continue; continue;
phy_id = (u32)(phy_reg << 16); phy_id = (u32)(phy_reg << 16);
ret_val = e1e_rphy_locked(hw, PHY_ID2, &phy_reg); ret_val = e1e_rphy_locked(hw, MII_PHYSID2, &phy_reg);
if (ret_val || (phy_reg == 0xFFFF)) { if (ret_val || (phy_reg == 0xFFFF)) {
phy_id = 0; phy_id = 0;
continue; continue;
...@@ -882,8 +882,8 @@ static s32 e1000_set_eee_pchlan(struct e1000_hw *hw) ...@@ -882,8 +882,8 @@ static s32 e1000_set_eee_pchlan(struct e1000_hw *hw)
lpi_ctrl |= I82579_LPI_CTRL_1000_ENABLE; lpi_ctrl |= I82579_LPI_CTRL_1000_ENABLE;
if (dev_spec->eee_lp_ability & I82579_EEE_100_SUPPORTED) { if (dev_spec->eee_lp_ability & I82579_EEE_100_SUPPORTED) {
e1e_rphy_locked(hw, PHY_LP_ABILITY, &data); e1e_rphy_locked(hw, MII_LPA, &data);
if (data & NWAY_LPAR_100TX_FD_CAPS) if (data & LPA_100FULL)
lpi_ctrl |= I82579_LPI_CTRL_100_ENABLE; lpi_ctrl |= I82579_LPI_CTRL_100_ENABLE;
else else
/* EEE is not supported in 100Half, so ignore /* EEE is not supported in 100Half, so ignore
...@@ -1792,7 +1792,7 @@ static s32 e1000_hv_phy_workarounds_ich8lan(struct e1000_hw *hw) ...@@ -1792,7 +1792,7 @@ static s32 e1000_hv_phy_workarounds_ich8lan(struct e1000_hw *hw)
*/ */
if (hw->phy.revision < 2) { if (hw->phy.revision < 2) {
e1000e_phy_sw_reset(hw); e1000e_phy_sw_reset(hw);
ret_val = e1e_wphy(hw, PHY_CONTROL, 0x3140); ret_val = e1e_wphy(hw, MII_BMCR, 0x3140);
} }
} }
......
...@@ -1053,14 +1053,14 @@ s32 e1000e_config_fc_after_link_up(struct e1000_hw *hw) ...@@ -1053,14 +1053,14 @@ s32 e1000e_config_fc_after_link_up(struct e1000_hw *hw)
* has completed. We read this twice because this reg has * has completed. We read this twice because this reg has
* some "sticky" (latched) bits. * some "sticky" (latched) bits.
*/ */
ret_val = e1e_rphy(hw, PHY_STATUS, &mii_status_reg); ret_val = e1e_rphy(hw, MII_BMSR, &mii_status_reg);
if (ret_val) if (ret_val)
return ret_val; return ret_val;
ret_val = e1e_rphy(hw, PHY_STATUS, &mii_status_reg); ret_val = e1e_rphy(hw, MII_BMSR, &mii_status_reg);
if (ret_val) if (ret_val)
return ret_val; return ret_val;
if (!(mii_status_reg & MII_SR_AUTONEG_COMPLETE)) { if (!(mii_status_reg & BMSR_ANEGCOMPLETE)) {
e_dbg("Copper PHY and Auto Neg has not completed.\n"); e_dbg("Copper PHY and Auto Neg has not completed.\n");
return ret_val; return ret_val;
} }
...@@ -1071,11 +1071,10 @@ s32 e1000e_config_fc_after_link_up(struct e1000_hw *hw) ...@@ -1071,11 +1071,10 @@ s32 e1000e_config_fc_after_link_up(struct e1000_hw *hw)
* Page Ability Register (Address 5) to determine how * Page Ability Register (Address 5) to determine how
* flow control was negotiated. * flow control was negotiated.
*/ */
ret_val = e1e_rphy(hw, PHY_AUTONEG_ADV, &mii_nway_adv_reg); ret_val = e1e_rphy(hw, MII_ADVERTISE, &mii_nway_adv_reg);
if (ret_val) if (ret_val)
return ret_val; return ret_val;
ret_val = e1e_rphy(hw, PHY_LP_ABILITY, ret_val = e1e_rphy(hw, MII_LPA, &mii_nway_lp_ability_reg);
&mii_nway_lp_ability_reg);
if (ret_val) if (ret_val)
return ret_val; return ret_val;
...@@ -1112,8 +1111,8 @@ s32 e1000e_config_fc_after_link_up(struct e1000_hw *hw) ...@@ -1112,8 +1111,8 @@ s32 e1000e_config_fc_after_link_up(struct e1000_hw *hw)
* 1 | DC | 1 | DC | E1000_fc_full * 1 | DC | 1 | DC | E1000_fc_full
* *
*/ */
if ((mii_nway_adv_reg & NWAY_AR_PAUSE) && if ((mii_nway_adv_reg & ADVERTISE_PAUSE_CAP) &&
(mii_nway_lp_ability_reg & NWAY_LPAR_PAUSE)) { (mii_nway_lp_ability_reg & LPA_PAUSE_CAP)) {
/* Now we need to check if the user selected Rx ONLY /* Now we need to check if the user selected Rx ONLY
* of pause frames. In this case, we had to advertise * of pause frames. In this case, we had to advertise
* FULL flow control because we could not advertise Rx * FULL flow control because we could not advertise Rx
...@@ -1135,10 +1134,10 @@ s32 e1000e_config_fc_after_link_up(struct e1000_hw *hw) ...@@ -1135,10 +1134,10 @@ s32 e1000e_config_fc_after_link_up(struct e1000_hw *hw)
*-------|---------|-------|---------|-------------------- *-------|---------|-------|---------|--------------------
* 0 | 1 | 1 | 1 | e1000_fc_tx_pause * 0 | 1 | 1 | 1 | e1000_fc_tx_pause
*/ */
else if (!(mii_nway_adv_reg & NWAY_AR_PAUSE) && else if (!(mii_nway_adv_reg & ADVERTISE_PAUSE_CAP) &&
(mii_nway_adv_reg & NWAY_AR_ASM_DIR) && (mii_nway_adv_reg & ADVERTISE_PAUSE_ASYM) &&
(mii_nway_lp_ability_reg & NWAY_LPAR_PAUSE) && (mii_nway_lp_ability_reg & LPA_PAUSE_CAP) &&
(mii_nway_lp_ability_reg & NWAY_LPAR_ASM_DIR)) { (mii_nway_lp_ability_reg & LPA_PAUSE_ASYM)) {
hw->fc.current_mode = e1000_fc_tx_pause; hw->fc.current_mode = e1000_fc_tx_pause;
e_dbg("Flow Control = Tx PAUSE frames only.\n"); e_dbg("Flow Control = Tx PAUSE frames only.\n");
} }
...@@ -1149,10 +1148,10 @@ s32 e1000e_config_fc_after_link_up(struct e1000_hw *hw) ...@@ -1149,10 +1148,10 @@ s32 e1000e_config_fc_after_link_up(struct e1000_hw *hw)
*-------|---------|-------|---------|-------------------- *-------|---------|-------|---------|--------------------
* 1 | 1 | 0 | 1 | e1000_fc_rx_pause * 1 | 1 | 0 | 1 | e1000_fc_rx_pause
*/ */
else if ((mii_nway_adv_reg & NWAY_AR_PAUSE) && else if ((mii_nway_adv_reg & ADVERTISE_PAUSE_CAP) &&
(mii_nway_adv_reg & NWAY_AR_ASM_DIR) && (mii_nway_adv_reg & ADVERTISE_PAUSE_ASYM) &&
!(mii_nway_lp_ability_reg & NWAY_LPAR_PAUSE) && !(mii_nway_lp_ability_reg & LPA_PAUSE_CAP) &&
(mii_nway_lp_ability_reg & NWAY_LPAR_ASM_DIR)) { (mii_nway_lp_ability_reg & LPA_PAUSE_ASYM)) {
hw->fc.current_mode = e1000_fc_rx_pause; hw->fc.current_mode = e1000_fc_rx_pause;
e_dbg("Flow Control = Rx PAUSE frames only.\n"); e_dbg("Flow Control = Rx PAUSE frames only.\n");
} else { } else {
......
...@@ -42,7 +42,6 @@ ...@@ -42,7 +42,6 @@
#include <linux/slab.h> #include <linux/slab.h>
#include <net/checksum.h> #include <net/checksum.h>
#include <net/ip6_checksum.h> #include <net/ip6_checksum.h>
#include <linux/mii.h>
#include <linux/ethtool.h> #include <linux/ethtool.h>
#include <linux/if_vlan.h> #include <linux/if_vlan.h>
#include <linux/cpu.h> #include <linux/cpu.h>
...@@ -1117,9 +1116,9 @@ static void e1000_print_hw_hang(struct work_struct *work) ...@@ -1117,9 +1116,9 @@ static void e1000_print_hw_hang(struct work_struct *work)
adapter->tx_hang_recheck = false; adapter->tx_hang_recheck = false;
netif_stop_queue(netdev); netif_stop_queue(netdev);
e1e_rphy(hw, PHY_STATUS, &phy_status); e1e_rphy(hw, MII_BMSR, &phy_status);
e1e_rphy(hw, PHY_1000T_STATUS, &phy_1000t_status); e1e_rphy(hw, MII_STAT1000, &phy_1000t_status);
e1e_rphy(hw, PHY_EXT_STATUS, &phy_ext_status); e1e_rphy(hw, MII_ESTATUS, &phy_ext_status);
pci_read_config_word(adapter->pdev, PCI_STATUS, &pci_status); pci_read_config_word(adapter->pdev, PCI_STATUS, &pci_status);
...@@ -4677,14 +4676,14 @@ static void e1000_phy_read_status(struct e1000_adapter *adapter) ...@@ -4677,14 +4676,14 @@ static void e1000_phy_read_status(struct e1000_adapter *adapter)
(adapter->hw.phy.media_type == e1000_media_type_copper)) { (adapter->hw.phy.media_type == e1000_media_type_copper)) {
int ret_val; int ret_val;
ret_val = e1e_rphy(hw, PHY_CONTROL, &phy->bmcr); ret_val = e1e_rphy(hw, MII_BMCR, &phy->bmcr);
ret_val |= e1e_rphy(hw, PHY_STATUS, &phy->bmsr); ret_val |= e1e_rphy(hw, MII_BMSR, &phy->bmsr);
ret_val |= e1e_rphy(hw, PHY_AUTONEG_ADV, &phy->advertise); ret_val |= e1e_rphy(hw, MII_ADVERTISE, &phy->advertise);
ret_val |= e1e_rphy(hw, PHY_LP_ABILITY, &phy->lpa); ret_val |= e1e_rphy(hw, MII_LPA, &phy->lpa);
ret_val |= e1e_rphy(hw, PHY_AUTONEG_EXP, &phy->expansion); ret_val |= e1e_rphy(hw, MII_EXPANSION, &phy->expansion);
ret_val |= e1e_rphy(hw, PHY_1000T_CTRL, &phy->ctrl1000); ret_val |= e1e_rphy(hw, MII_CTRL1000, &phy->ctrl1000);
ret_val |= e1e_rphy(hw, PHY_1000T_STATUS, &phy->stat1000); ret_val |= e1e_rphy(hw, MII_STAT1000, &phy->stat1000);
ret_val |= e1e_rphy(hw, PHY_EXT_STATUS, &phy->estatus); ret_val |= e1e_rphy(hw, MII_ESTATUS, &phy->estatus);
if (ret_val) if (ret_val)
e_warn("Error reading PHY register\n"); e_warn("Error reading PHY register\n");
} else { } else {
...@@ -4856,9 +4855,9 @@ static void e1000_watchdog_task(struct work_struct *work) ...@@ -4856,9 +4855,9 @@ static void e1000_watchdog_task(struct work_struct *work)
(adapter->link_duplex == HALF_DUPLEX)) { (adapter->link_duplex == HALF_DUPLEX)) {
u16 autoneg_exp; u16 autoneg_exp;
e1e_rphy(hw, PHY_AUTONEG_EXP, &autoneg_exp); e1e_rphy(hw, MII_EXPANSION, &autoneg_exp);
if (!(autoneg_exp & NWAY_ER_LP_NWAY_CAPS)) if (!(autoneg_exp & EXPANSION_NWAY))
e_info("Autonegotiated half duplex but link partner cannot autoneg. Try forcing full duplex if link gets many collisions.\n"); e_info("Autonegotiated half duplex but link partner cannot autoneg. Try forcing full duplex if link gets many collisions.\n");
} }
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment