|
@@ -140,18 +140,33 @@ netxen_nic_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
|
|
|
if (netif_running(dev)) {
|
|
|
ecmd->speed = adapter->link_speed;
|
|
|
ecmd->duplex = adapter->link_duplex;
|
|
|
- } else
|
|
|
- return -EIO; /* link absent */
|
|
|
+ ecmd->autoneg = adapter->link_autoneg;
|
|
|
+ }
|
|
|
+
|
|
|
} else if (adapter->ahw.board_type == NETXEN_NIC_XGBE) {
|
|
|
- ecmd->supported = (SUPPORTED_TP |
|
|
|
- SUPPORTED_1000baseT_Full |
|
|
|
- SUPPORTED_10000baseT_Full);
|
|
|
- ecmd->advertising = (ADVERTISED_TP |
|
|
|
- ADVERTISED_1000baseT_Full |
|
|
|
- ADVERTISED_10000baseT_Full);
|
|
|
+ u32 val;
|
|
|
+
|
|
|
+ adapter->hw_read_wx(adapter, NETXEN_PORT_MODE_ADDR, &val, 4);
|
|
|
+ if (val == NETXEN_PORT_MODE_802_3_AP) {
|
|
|
+ ecmd->supported = SUPPORTED_1000baseT_Full;
|
|
|
+ ecmd->advertising = ADVERTISED_1000baseT_Full;
|
|
|
+ } else {
|
|
|
+ ecmd->supported = SUPPORTED_10000baseT_Full;
|
|
|
+ ecmd->advertising = ADVERTISED_10000baseT_Full;
|
|
|
+ }
|
|
|
+
|
|
|
ecmd->port = PORT_TP;
|
|
|
|
|
|
- ecmd->speed = SPEED_10000;
|
|
|
+ if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) {
|
|
|
+ u16 pcifn = adapter->ahw.pci_func;
|
|
|
+
|
|
|
+ adapter->hw_read_wx(adapter,
|
|
|
+ P3_LINK_SPEED_REG(pcifn), &val, 4);
|
|
|
+ ecmd->speed = P3_LINK_SPEED_MHZ *
|
|
|
+ P3_LINK_SPEED_VAL(pcifn, val);
|
|
|
+ } else
|
|
|
+ ecmd->speed = SPEED_10000;
|
|
|
+
|
|
|
ecmd->duplex = DUPLEX_FULL;
|
|
|
ecmd->autoneg = AUTONEG_DISABLE;
|
|
|
} else
|