|
@@ -214,7 +214,6 @@ skip:
|
|
|
check_sfp_module = netif_running(dev) &&
|
|
|
adapter->has_link_events;
|
|
|
} else {
|
|
|
- ecmd->autoneg = AUTONEG_ENABLE;
|
|
|
ecmd->supported |= (SUPPORTED_TP |SUPPORTED_Autoneg);
|
|
|
ecmd->advertising |=
|
|
|
(ADVERTISED_TP | ADVERTISED_Autoneg);
|
|
@@ -252,53 +251,24 @@ static int
|
|
|
netxen_nic_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
|
|
|
{
|
|
|
struct netxen_adapter *adapter = netdev_priv(dev);
|
|
|
- __u32 status;
|
|
|
+ int ret;
|
|
|
|
|
|
- /* read which mode */
|
|
|
- if (adapter->ahw.port_type == NETXEN_NIC_GBE) {
|
|
|
- /* autonegotiation */
|
|
|
- if (adapter->phy_write &&
|
|
|
- adapter->phy_write(adapter,
|
|
|
- NETXEN_NIU_GB_MII_MGMT_ADDR_AUTONEG,
|
|
|
- ecmd->autoneg) != 0)
|
|
|
- return -EIO;
|
|
|
- else
|
|
|
- adapter->link_autoneg = ecmd->autoneg;
|
|
|
+ if (adapter->ahw.port_type != NETXEN_NIC_GBE)
|
|
|
+ return -EOPNOTSUPP;
|
|
|
|
|
|
- if (adapter->phy_read &&
|
|
|
- adapter->phy_read(adapter,
|
|
|
- NETXEN_NIU_GB_MII_MGMT_ADDR_PHY_STATUS,
|
|
|
- &status) != 0)
|
|
|
- return -EIO;
|
|
|
+ if (!(adapter->capabilities & NX_FW_CAPABILITY_GBE_LINK_CFG))
|
|
|
+ return -EOPNOTSUPP;
|
|
|
|
|
|
- /* speed */
|
|
|
- switch (ecmd->speed) {
|
|
|
- case SPEED_10:
|
|
|
- netxen_set_phy_speed(status, 0);
|
|
|
- break;
|
|
|
- case SPEED_100:
|
|
|
- netxen_set_phy_speed(status, 1);
|
|
|
- break;
|
|
|
- case SPEED_1000:
|
|
|
- netxen_set_phy_speed(status, 2);
|
|
|
- break;
|
|
|
- }
|
|
|
- /* set duplex mode */
|
|
|
- if (ecmd->duplex == DUPLEX_HALF)
|
|
|
- netxen_clear_phy_duplex(status);
|
|
|
- if (ecmd->duplex == DUPLEX_FULL)
|
|
|
- netxen_set_phy_duplex(status);
|
|
|
- if (adapter->phy_write &&
|
|
|
- adapter->phy_write(adapter,
|
|
|
- NETXEN_NIU_GB_MII_MGMT_ADDR_PHY_STATUS,
|
|
|
- *((int *)&status)) != 0)
|
|
|
- return -EIO;
|
|
|
- else {
|
|
|
- adapter->link_speed = ecmd->speed;
|
|
|
- adapter->link_duplex = ecmd->duplex;
|
|
|
- }
|
|
|
- } else
|
|
|
+ ret = nx_fw_cmd_set_gbe_port(adapter, ecmd->speed, ecmd->duplex,
|
|
|
+ ecmd->autoneg);
|
|
|
+ if (ret == NX_RCODE_NOT_SUPPORTED)
|
|
|
return -EOPNOTSUPP;
|
|
|
+ else if (ret)
|
|
|
+ return -EIO;
|
|
|
+
|
|
|
+ adapter->link_speed = ecmd->speed;
|
|
|
+ adapter->link_duplex = ecmd->duplex;
|
|
|
+ adapter->link_autoneg = ecmd->autoneg;
|
|
|
|
|
|
if (!netif_running(dev))
|
|
|
return 0;
|