aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/cassini.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/cassini.c')
-rw-r--r--drivers/net/cassini.c37
1 files changed, 19 insertions, 18 deletions
diff --git a/drivers/net/cassini.c b/drivers/net/cassini.c
index 143a28c666a..22ce03e55b8 100644
--- a/drivers/net/cassini.c
+++ b/drivers/net/cassini.c
@@ -709,10 +709,11 @@ static void cas_begin_auto_negotiation(struct cas *cp, struct ethtool_cmd *ep)
709 if (ep->autoneg == AUTONEG_ENABLE) 709 if (ep->autoneg == AUTONEG_ENABLE)
710 cp->link_cntl = BMCR_ANENABLE; 710 cp->link_cntl = BMCR_ANENABLE;
711 else { 711 else {
712 u32 speed = ethtool_cmd_speed(ep);
712 cp->link_cntl = 0; 713 cp->link_cntl = 0;
713 if (ep->speed == SPEED_100) 714 if (speed == SPEED_100)
714 cp->link_cntl |= BMCR_SPEED100; 715 cp->link_cntl |= BMCR_SPEED100;
715 else if (ep->speed == SPEED_1000) 716 else if (speed == SPEED_1000)
716 cp->link_cntl |= CAS_BMCR_SPEED1000; 717 cp->link_cntl |= CAS_BMCR_SPEED1000;
717 if (ep->duplex == DUPLEX_FULL) 718 if (ep->duplex == DUPLEX_FULL)
718 cp->link_cntl |= BMCR_FULLDPLX; 719 cp->link_cntl |= BMCR_FULLDPLX;
@@ -4605,18 +4606,17 @@ static int cas_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
4605 if (bmcr & BMCR_ANENABLE) { 4606 if (bmcr & BMCR_ANENABLE) {
4606 cmd->advertising |= ADVERTISED_Autoneg; 4607 cmd->advertising |= ADVERTISED_Autoneg;
4607 cmd->autoneg = AUTONEG_ENABLE; 4608 cmd->autoneg = AUTONEG_ENABLE;
4608 cmd->speed = ((speed == 10) ? 4609 ethtool_cmd_speed_set(cmd, ((speed == 10) ?
4609 SPEED_10 : 4610 SPEED_10 :
4610 ((speed == 1000) ? 4611 ((speed == 1000) ?
4611 SPEED_1000 : SPEED_100)); 4612 SPEED_1000 : SPEED_100)));
4612 cmd->duplex = full_duplex ? DUPLEX_FULL : DUPLEX_HALF; 4613 cmd->duplex = full_duplex ? DUPLEX_FULL : DUPLEX_HALF;
4613 } else { 4614 } else {
4614 cmd->autoneg = AUTONEG_DISABLE; 4615 cmd->autoneg = AUTONEG_DISABLE;
4615 cmd->speed = 4616 ethtool_cmd_speed_set(cmd, ((bmcr & CAS_BMCR_SPEED1000) ?
4616 (bmcr & CAS_BMCR_SPEED1000) ? 4617 SPEED_1000 :
4617 SPEED_1000 : 4618 ((bmcr & BMCR_SPEED100) ?
4618 ((bmcr & BMCR_SPEED100) ? SPEED_100: 4619 SPEED_100 : SPEED_10)));
4619 SPEED_10);
4620 cmd->duplex = 4620 cmd->duplex =
4621 (bmcr & BMCR_FULLDPLX) ? 4621 (bmcr & BMCR_FULLDPLX) ?
4622 DUPLEX_FULL : DUPLEX_HALF; 4622 DUPLEX_FULL : DUPLEX_HALF;
@@ -4633,14 +4633,14 @@ static int cas_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
4633 * settings that we configured. 4633 * settings that we configured.
4634 */ 4634 */
4635 if (cp->link_cntl & BMCR_ANENABLE) { 4635 if (cp->link_cntl & BMCR_ANENABLE) {
4636 cmd->speed = 0; 4636 ethtool_cmd_speed_set(cmd, 0);
4637 cmd->duplex = 0xff; 4637 cmd->duplex = 0xff;
4638 } else { 4638 } else {
4639 cmd->speed = SPEED_10; 4639 ethtool_cmd_speed_set(cmd, SPEED_10);
4640 if (cp->link_cntl & BMCR_SPEED100) { 4640 if (cp->link_cntl & BMCR_SPEED100) {
4641 cmd->speed = SPEED_100; 4641 ethtool_cmd_speed_set(cmd, SPEED_100);
4642 } else if (cp->link_cntl & CAS_BMCR_SPEED1000) { 4642 } else if (cp->link_cntl & CAS_BMCR_SPEED1000) {
4643 cmd->speed = SPEED_1000; 4643 ethtool_cmd_speed_set(cmd, SPEED_1000);
4644 } 4644 }
4645 cmd->duplex = (cp->link_cntl & BMCR_FULLDPLX)? 4645 cmd->duplex = (cp->link_cntl & BMCR_FULLDPLX)?
4646 DUPLEX_FULL : DUPLEX_HALF; 4646 DUPLEX_FULL : DUPLEX_HALF;
@@ -4653,6 +4653,7 @@ static int cas_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
4653{ 4653{
4654 struct cas *cp = netdev_priv(dev); 4654 struct cas *cp = netdev_priv(dev);
4655 unsigned long flags; 4655 unsigned long flags;
4656 u32 speed = ethtool_cmd_speed(cmd);
4656 4657
4657 /* Verify the settings we care about. */ 4658 /* Verify the settings we care about. */
4658 if (cmd->autoneg != AUTONEG_ENABLE && 4659 if (cmd->autoneg != AUTONEG_ENABLE &&
@@ -4660,9 +4661,9 @@ static int cas_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
4660 return -EINVAL; 4661 return -EINVAL;
4661 4662
4662 if (cmd->autoneg == AUTONEG_DISABLE && 4663 if (cmd->autoneg == AUTONEG_DISABLE &&
4663 ((cmd->speed != SPEED_1000 && 4664 ((speed != SPEED_1000 &&
4664 cmd->speed != SPEED_100 && 4665 speed != SPEED_100 &&
4665 cmd->speed != SPEED_10) || 4666 speed != SPEED_10) ||
4666 (cmd->duplex != DUPLEX_HALF && 4667 (cmd->duplex != DUPLEX_HALF &&
4667 cmd->duplex != DUPLEX_FULL))) 4668 cmd->duplex != DUPLEX_FULL)))
4668 return -EINVAL; 4669 return -EINVAL;