diff options
Diffstat (limited to 'drivers/net/cassini.c')
-rw-r--r-- | drivers/net/cassini.c | 37 |
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; |