diff options
Diffstat (limited to 'drivers/net/netxen/netxen_nic_ethtool.c')
-rw-r--r-- | drivers/net/netxen/netxen_nic_ethtool.c | 35 |
1 files changed, 26 insertions, 9 deletions
diff --git a/drivers/net/netxen/netxen_nic_ethtool.c b/drivers/net/netxen/netxen_nic_ethtool.c index 48ee06b6f4e9..4ad3e0844b99 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 |
@@ -192,6 +207,8 @@ netxen_nic_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd) | |||
192 | break; | 207 | break; |
193 | case NETXEN_BRDTYPE_P2_SB31_10G: | 208 | case NETXEN_BRDTYPE_P2_SB31_10G: |
194 | case NETXEN_BRDTYPE_P3_10G_SFP_PLUS: | 209 | case NETXEN_BRDTYPE_P3_10G_SFP_PLUS: |
210 | case NETXEN_BRDTYPE_P3_10G_SFP_CT: | ||
211 | case NETXEN_BRDTYPE_P3_10G_SFP_QT: | ||
195 | case NETXEN_BRDTYPE_P3_10G_XFP: | 212 | case NETXEN_BRDTYPE_P3_10G_XFP: |
196 | ecmd->supported |= SUPPORTED_FIBRE; | 213 | ecmd->supported |= SUPPORTED_FIBRE; |
197 | ecmd->advertising |= ADVERTISED_FIBRE; | 214 | ecmd->advertising |= ADVERTISED_FIBRE; |