ixgbe: Fix device capabilities of 82599 single speed fiber NICs.
authorMallikarjuna R Chilakala <mallikarjuna.chilakala@intel.com>
Tue, 30 Jun 2009 11:44:16 +0000 (11:44 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 1 Jul 2009 02:46:53 +0000 (19:46 -0700)
82599 single speed fiber modules only support 10G/Full. Return
proper device capabilities while querrying the adapter and error
while changing device advertisement/speed/duplex capabilities.

Signed-off-by: Mallikarjuna R Chilakala <mallikarjuna.chilakala@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ixgbe/ixgbe_ethtool.c

index 86f4f3e36f27fc8d3ff0cccd734d8d691694bbd3..0f7b6a3a2e68240e7aa4d287ce5e22aa6ee5069a 100644 (file)
@@ -139,7 +139,7 @@ static int ixgbe_get_settings(struct net_device *netdev,
        ecmd->autoneg = AUTONEG_ENABLE;
        ecmd->transceiver = XCVR_EXTERNAL;
        if ((hw->phy.media_type == ixgbe_media_type_copper) ||
-           (hw->mac.type == ixgbe_mac_82599EB)) {
+           (hw->phy.multispeed_fiber)) {
                ecmd->supported |= (SUPPORTED_1000baseT_Full |
                                    SUPPORTED_Autoneg);
 
@@ -217,7 +217,7 @@ static int ixgbe_set_settings(struct net_device *netdev,
        s32 err = 0;
 
        if ((hw->phy.media_type == ixgbe_media_type_copper) ||
-           (hw->mac.type == ixgbe_mac_82599EB)) {
+           (hw->phy.multispeed_fiber)) {
                /* 10000/copper and 1000/copper must autoneg
                 * this function does not support any duplex forcing, but can
                 * limit the advertising of the adapter to only 10000 or 1000 */
@@ -245,6 +245,7 @@ static int ixgbe_set_settings(struct net_device *netdev,
        } else {
                /* in this case we currently only support 10Gb/FULL */
                if ((ecmd->autoneg == AUTONEG_ENABLE) ||
+                   (ecmd->advertising != ADVERTISED_10000baseT_Full) ||
                    (ecmd->speed + ecmd->duplex != SPEED_10000 + DUPLEX_FULL))
                        return -EINVAL;
        }