diff options
author | Dhananjay Phadke <dhananjay@netxen.com> | 2008-08-01 06:14:55 -0400 |
---|---|---|
committer | Jeff Garzik <jgarzik@redhat.com> | 2008-08-07 02:11:07 -0400 |
commit | 24a7a45511f89959b4f1dc60a66260d09777901a (patch) | |
tree | ef48a3f9c6f65ba98f047b38937f71baef4a95ed /drivers/net/netxen/netxen_nic_ethtool.c | |
parent | 4ad7a018cf4ac3cbad661c28c0f783ee0a6e3bf6 (diff) |
netxen: fix link status, link speed
For NX3031, the phy is managed by firmware, so driver should avoid
setting any phy registers.
Signed-off-by: Dhananjay Phadke <dhananjay@netxen.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
Diffstat (limited to 'drivers/net/netxen/netxen_nic_ethtool.c')
-rw-r--r-- | drivers/net/netxen/netxen_nic_ethtool.c | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/drivers/net/netxen/netxen_nic_ethtool.c b/drivers/net/netxen/netxen_nic_ethtool.c index 48ee06b6f4e9..f9b933efa362 100644 --- a/drivers/net/netxen/netxen_nic_ethtool.c +++ b/drivers/net/netxen/netxen_nic_ethtool.c | |||
@@ -140,18 +140,33 @@ netxen_nic_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd) | |||
140 | if (netif_running(dev)) { | 140 | if (netif_running(dev)) { |
141 | ecmd->speed = adapter->link_speed; | 141 | ecmd->speed = adapter->link_speed; |
142 | ecmd->duplex = adapter->link_duplex; | 142 | ecmd->duplex = adapter->link_duplex; |
143 | } else | 143 | ecmd->autoneg = adapter->link_autoneg; |
144 | return -EIO; /* link absent */ | 144 | } |
145 | |||
145 | } else if (adapter->ahw.board_type == NETXEN_NIC_XGBE) { | 146 | } else if (adapter->ahw.board_type == NETXEN_NIC_XGBE) { |
146 | ecmd->supported = (SUPPORTED_TP | | 147 | u32 val; |
147 | SUPPORTED_1000baseT_Full | | 148 | |
148 | SUPPORTED_10000baseT_Full); | 149 | adapter->hw_read_wx(adapter, NETXEN_PORT_MODE_ADDR, &val, 4); |
149 | ecmd->advertising = (ADVERTISED_TP | | 150 | if (val == NETXEN_PORT_MODE_802_3_AP) { |
150 | ADVERTISED_1000baseT_Full | | 151 | ecmd->supported = SUPPORTED_1000baseT_Full; |
151 | ADVERTISED_10000baseT_Full); | 152 | ecmd->advertising = ADVERTISED_1000baseT_Full; |
153 | } else { | ||
154 | ecmd->supported = SUPPORTED_10000baseT_Full; | ||
155 | ecmd->advertising = ADVERTISED_10000baseT_Full; | ||
156 | } | ||
157 | |||
152 | ecmd->port = PORT_TP; | 158 | ecmd->port = PORT_TP; |
153 | 159 | ||
154 | ecmd->speed = SPEED_10000; | 160 | if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) { |
161 | u16 pcifn = adapter->ahw.pci_func; | ||
162 | |||
163 | adapter->hw_read_wx(adapter, | ||
164 | P3_LINK_SPEED_REG(pcifn), &val, 4); | ||
165 | ecmd->speed = P3_LINK_SPEED_MHZ * | ||
166 | P3_LINK_SPEED_VAL(pcifn, val); | ||
167 | } else | ||
168 | ecmd->speed = SPEED_10000; | ||
169 | |||
155 | ecmd->duplex = DUPLEX_FULL; | 170 | ecmd->duplex = DUPLEX_FULL; |
156 | ecmd->autoneg = AUTONEG_DISABLE; | 171 | ecmd->autoneg = AUTONEG_DISABLE; |
157 | } else | 172 | } else |