aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorJeff Garzik <jeff@garzik.org>2006-08-24 00:45:36 -0400
committerJeff Garzik <jeff@garzik.org>2006-08-24 00:45:36 -0400
commit699a71238856b19091503c671bac8abb1e3f9a3a (patch)
treedb0e6db06961db05c35f3df61e7f14b845b7cd29 /drivers
parent85a7ea1b0a3263f3ad423b789a841d03c9acbb65 (diff)
parent891b11f619dcfe045015394fa89041f02dac9428 (diff)
Merge branch 'upstream-fixes' of git://lost.foo-projects.org/~ahkok/git/netdev-2.6 into tmp
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/e100.c22
-rw-r--r--drivers/net/e1000/e1000_ethtool.c40
-rw-r--r--drivers/net/e1000/e1000_hw.c24
-rw-r--r--drivers/net/e1000/e1000_main.c9
-rw-r--r--drivers/net/ixgb/ixgb_hw.c11
-rw-r--r--drivers/net/ixgb/ixgb_ids.h1
-rw-r--r--drivers/net/ixgb/ixgb_main.c14
7 files changed, 80 insertions, 41 deletions
diff --git a/drivers/net/e100.c b/drivers/net/e100.c
index 5f68cb8eb336..b42ad76b1116 100644
--- a/drivers/net/e100.c
+++ b/drivers/net/e100.c
@@ -1,7 +1,7 @@
1/******************************************************************************* 1/*******************************************************************************
2 2
3 3
4 Copyright(c) 1999 - 2005 Intel Corporation. All rights reserved. 4 Copyright(c) 1999 - 2006 Intel Corporation. All rights reserved.
5 5
6 This program is free software; you can redistribute it and/or modify it 6 This program is free software; you can redistribute it and/or modify it
7 under the terms of the GNU General Public License as published by the Free 7 under the terms of the GNU General Public License as published by the Free
@@ -158,10 +158,10 @@
158 158
159 159
160#define DRV_NAME "e100" 160#define DRV_NAME "e100"
161#define DRV_EXT "-NAPI" 161#define DRV_EXT "-NAPI"
162#define DRV_VERSION "3.5.10-k2"DRV_EXT 162#define DRV_VERSION "3.5.10-k4"DRV_EXT
163#define DRV_DESCRIPTION "Intel(R) PRO/100 Network Driver" 163#define DRV_DESCRIPTION "Intel(R) PRO/100 Network Driver"
164#define DRV_COPYRIGHT "Copyright(c) 1999-2005 Intel Corporation" 164#define DRV_COPYRIGHT "Copyright(c) 1999-2006 Intel Corporation"
165#define PFX DRV_NAME ": " 165#define PFX DRV_NAME ": "
166 166
167#define E100_WATCHDOG_PERIOD (2 * HZ) 167#define E100_WATCHDOG_PERIOD (2 * HZ)
@@ -1391,15 +1391,11 @@ static int e100_phy_init(struct nic *nic)
1391 } 1391 }
1392 1392
1393 if((nic->mac >= mac_82550_D102) || ((nic->flags & ich) && 1393 if((nic->mac >= mac_82550_D102) || ((nic->flags & ich) &&
1394 (mdio_read(netdev, nic->mii.phy_id, MII_TPISTATUS) & 0x8000))) { 1394 (mdio_read(netdev, nic->mii.phy_id, MII_TPISTATUS) & 0x8000) &&
1395 /* enable/disable MDI/MDI-X auto-switching. 1395 !(nic->eeprom[eeprom_cnfg_mdix] & eeprom_mdix_enabled))) {
1396 MDI/MDI-X auto-switching is disabled for 82551ER/QM chips */ 1396 /* enable/disable MDI/MDI-X auto-switching. */
1397 if((nic->mac == mac_82551_E) || (nic->mac == mac_82551_F) || 1397 mdio_write(netdev, nic->mii.phy_id, MII_NCONFIG,
1398 (nic->mac == mac_82551_10) || (nic->mii.force_media) || 1398 nic->mii.force_media ? 0 : NCONFIG_AUTO_SWITCH);
1399 !(nic->eeprom[eeprom_cnfg_mdix] & eeprom_mdix_enabled))
1400 mdio_write(netdev, nic->mii.phy_id, MII_NCONFIG, 0);
1401 else
1402 mdio_write(netdev, nic->mii.phy_id, MII_NCONFIG, NCONFIG_AUTO_SWITCH);
1403 } 1399 }
1404 1400
1405 return 0; 1401 return 0;
diff --git a/drivers/net/e1000/e1000_ethtool.c b/drivers/net/e1000/e1000_ethtool.c
index 88a82ba88f57..2baccf864328 100644
--- a/drivers/net/e1000/e1000_ethtool.c
+++ b/drivers/net/e1000/e1000_ethtool.c
@@ -183,6 +183,9 @@ e1000_set_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
183 return -EINVAL; 183 return -EINVAL;
184 } 184 }
185 185
186 while (test_and_set_bit(__E1000_RESETTING, &adapter->flags))
187 msleep(1);
188
186 if (ecmd->autoneg == AUTONEG_ENABLE) { 189 if (ecmd->autoneg == AUTONEG_ENABLE) {
187 hw->autoneg = 1; 190 hw->autoneg = 1;
188 if (hw->media_type == e1000_media_type_fiber) 191 if (hw->media_type == e1000_media_type_fiber)
@@ -199,16 +202,20 @@ e1000_set_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
199 ADVERTISED_TP; 202 ADVERTISED_TP;
200 ecmd->advertising = hw->autoneg_advertised; 203 ecmd->advertising = hw->autoneg_advertised;
201 } else 204 } else
202 if (e1000_set_spd_dplx(adapter, ecmd->speed + ecmd->duplex)) 205 if (e1000_set_spd_dplx(adapter, ecmd->speed + ecmd->duplex)) {
206 clear_bit(__E1000_RESETTING, &adapter->flags);
203 return -EINVAL; 207 return -EINVAL;
208 }
204 209
205 /* reset the link */ 210 /* reset the link */
206 211
207 if (netif_running(adapter->netdev)) 212 if (netif_running(adapter->netdev)) {
208 e1000_reinit_locked(adapter); 213 e1000_down(adapter);
209 else 214 e1000_up(adapter);
215 } else
210 e1000_reset(adapter); 216 e1000_reset(adapter);
211 217
218 clear_bit(__E1000_RESETTING, &adapter->flags);
212 return 0; 219 return 0;
213} 220}
214 221
@@ -238,9 +245,13 @@ e1000_set_pauseparam(struct net_device *netdev,
238{ 245{
239 struct e1000_adapter *adapter = netdev_priv(netdev); 246 struct e1000_adapter *adapter = netdev_priv(netdev);
240 struct e1000_hw *hw = &adapter->hw; 247 struct e1000_hw *hw = &adapter->hw;
248 int retval = 0;
241 249
242 adapter->fc_autoneg = pause->autoneg; 250 adapter->fc_autoneg = pause->autoneg;
243 251
252 while (test_and_set_bit(__E1000_RESETTING, &adapter->flags))
253 msleep(1);
254
244 if (pause->rx_pause && pause->tx_pause) 255 if (pause->rx_pause && pause->tx_pause)
245 hw->fc = e1000_fc_full; 256 hw->fc = e1000_fc_full;
246 else if (pause->rx_pause && !pause->tx_pause) 257 else if (pause->rx_pause && !pause->tx_pause)
@@ -253,15 +264,17 @@ e1000_set_pauseparam(struct net_device *netdev,
253 hw->original_fc = hw->fc; 264 hw->original_fc = hw->fc;
254 265
255 if (adapter->fc_autoneg == AUTONEG_ENABLE) { 266 if (adapter->fc_autoneg == AUTONEG_ENABLE) {
256 if (netif_running(adapter->netdev)) 267 if (netif_running(adapter->netdev)) {
257 e1000_reinit_locked(adapter); 268 e1000_down(adapter);
258 else 269 e1000_up(adapter);
270 } else
259 e1000_reset(adapter); 271 e1000_reset(adapter);
260 } else 272 } else
261 return ((hw->media_type == e1000_media_type_fiber) ? 273 retval = ((hw->media_type == e1000_media_type_fiber) ?
262 e1000_setup_link(hw) : e1000_force_mac_fc(hw)); 274 e1000_setup_link(hw) : e1000_force_mac_fc(hw));
263 275
264 return 0; 276 clear_bit(__E1000_RESETTING, &adapter->flags);
277 return retval;
265} 278}
266 279
267static uint32_t 280static uint32_t
@@ -1590,6 +1603,8 @@ e1000_diag_test_count(struct net_device *netdev)
1590 return E1000_TEST_LEN; 1603 return E1000_TEST_LEN;
1591} 1604}
1592 1605
1606extern void e1000_power_up_phy(struct e1000_adapter *);
1607
1593static void 1608static void
1594e1000_diag_test(struct net_device *netdev, 1609e1000_diag_test(struct net_device *netdev,
1595 struct ethtool_test *eth_test, uint64_t *data) 1610 struct ethtool_test *eth_test, uint64_t *data)
@@ -1606,6 +1621,8 @@ e1000_diag_test(struct net_device *netdev,
1606 uint8_t forced_speed_duplex = adapter->hw.forced_speed_duplex; 1621 uint8_t forced_speed_duplex = adapter->hw.forced_speed_duplex;
1607 uint8_t autoneg = adapter->hw.autoneg; 1622 uint8_t autoneg = adapter->hw.autoneg;
1608 1623
1624 DPRINTK(HW, INFO, "offline testing starting\n");
1625
1609 /* Link test performed before hardware reset so autoneg doesn't 1626 /* Link test performed before hardware reset so autoneg doesn't
1610 * interfere with test result */ 1627 * interfere with test result */
1611 if (e1000_link_test(adapter, &data[4])) 1628 if (e1000_link_test(adapter, &data[4]))
@@ -1629,6 +1646,8 @@ e1000_diag_test(struct net_device *netdev,
1629 eth_test->flags |= ETH_TEST_FL_FAILED; 1646 eth_test->flags |= ETH_TEST_FL_FAILED;
1630 1647
1631 e1000_reset(adapter); 1648 e1000_reset(adapter);
1649 /* make sure the phy is powered up */
1650 e1000_power_up_phy(adapter);
1632 if (e1000_loopback_test(adapter, &data[3])) 1651 if (e1000_loopback_test(adapter, &data[3]))
1633 eth_test->flags |= ETH_TEST_FL_FAILED; 1652 eth_test->flags |= ETH_TEST_FL_FAILED;
1634 1653
@@ -1642,6 +1661,7 @@ e1000_diag_test(struct net_device *netdev,
1642 if (if_running) 1661 if (if_running)
1643 dev_open(netdev); 1662 dev_open(netdev);
1644 } else { 1663 } else {
1664 DPRINTK(HW, INFO, "online testing starting\n");
1645 /* Online tests */ 1665 /* Online tests */
1646 if (e1000_link_test(adapter, &data[4])) 1666 if (e1000_link_test(adapter, &data[4]))
1647 eth_test->flags |= ETH_TEST_FL_FAILED; 1667 eth_test->flags |= ETH_TEST_FL_FAILED;
diff --git a/drivers/net/e1000/e1000_hw.c b/drivers/net/e1000/e1000_hw.c
index b3b919116e0f..f62d17848332 100644
--- a/drivers/net/e1000/e1000_hw.c
+++ b/drivers/net/e1000/e1000_hw.c
@@ -745,6 +745,17 @@ e1000_init_hw(struct e1000_hw *hw)
745 745
746 DEBUGFUNC("e1000_init_hw"); 746 DEBUGFUNC("e1000_init_hw");
747 747
748 /* force full DMA clock frequency for 10/100 on ICH8 A0-B0 */
749 if (hw->mac_type == e1000_ich8lan) {
750 reg_data = E1000_READ_REG(hw, TARC0);
751 reg_data |= 0x30000000;
752 E1000_WRITE_REG(hw, TARC0, reg_data);
753
754 reg_data = E1000_READ_REG(hw, STATUS);
755 reg_data &= ~0x80000000;
756 E1000_WRITE_REG(hw, STATUS, reg_data);
757 }
758
748 /* Initialize Identification LED */ 759 /* Initialize Identification LED */
749 ret_val = e1000_id_led_init(hw); 760 ret_val = e1000_id_led_init(hw);
750 if(ret_val) { 761 if(ret_val) {
@@ -1351,11 +1362,14 @@ e1000_copper_link_igp_setup(struct e1000_hw *hw)
1351 E1000_WRITE_REG(hw, LEDCTL, led_ctrl); 1362 E1000_WRITE_REG(hw, LEDCTL, led_ctrl);
1352 } 1363 }
1353 1364
1354 /* disable lplu d3 during driver init */ 1365 /* The NVM settings will configure LPLU in D3 for IGP2 and IGP3 PHYs */
1355 ret_val = e1000_set_d3_lplu_state(hw, FALSE); 1366 if (hw->phy_type == e1000_phy_igp) {
1356 if (ret_val) { 1367 /* disable lplu d3 during driver init */
1357 DEBUGOUT("Error Disabling LPLU D3\n"); 1368 ret_val = e1000_set_d3_lplu_state(hw, FALSE);
1358 return ret_val; 1369 if (ret_val) {
1370 DEBUGOUT("Error Disabling LPLU D3\n");
1371 return ret_val;
1372 }
1359 } 1373 }
1360 1374
1361 /* disable lplu d0 during driver init */ 1375 /* disable lplu d0 during driver init */
diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c
index 336435d81eca..0cf9ff2462ba 100644
--- a/drivers/net/e1000/e1000_main.c
+++ b/drivers/net/e1000/e1000_main.c
@@ -36,7 +36,7 @@ static char e1000_driver_string[] = "Intel(R) PRO/1000 Network Driver";
36#else 36#else
37#define DRIVERNAPI "-NAPI" 37#define DRIVERNAPI "-NAPI"
38#endif 38#endif
39#define DRV_VERSION "7.1.9-k4"DRIVERNAPI 39#define DRV_VERSION "7.1.9-k6"DRIVERNAPI
40char e1000_driver_version[] = DRV_VERSION; 40char e1000_driver_version[] = DRV_VERSION;
41static char e1000_copyright[] = "Copyright (c) 1999-2006 Intel Corporation."; 41static char e1000_copyright[] = "Copyright (c) 1999-2006 Intel Corporation.";
42 42
@@ -48,7 +48,6 @@ static char e1000_copyright[] = "Copyright (c) 1999-2006 Intel Corporation.";
48 * {PCI_DEVICE(PCI_VENDOR_ID_INTEL, device_id)} 48 * {PCI_DEVICE(PCI_VENDOR_ID_INTEL, device_id)}
49 */ 49 */
50static struct pci_device_id e1000_pci_tbl[] = { 50static struct pci_device_id e1000_pci_tbl[] = {
51 INTEL_E1000_ETHERNET_DEVICE(0x1000),
52 INTEL_E1000_ETHERNET_DEVICE(0x1001), 51 INTEL_E1000_ETHERNET_DEVICE(0x1001),
53 INTEL_E1000_ETHERNET_DEVICE(0x1004), 52 INTEL_E1000_ETHERNET_DEVICE(0x1004),
54 INTEL_E1000_ETHERNET_DEVICE(0x1008), 53 INTEL_E1000_ETHERNET_DEVICE(0x1008),
@@ -485,7 +484,7 @@ e1000_up(struct e1000_adapter *adapter)
485 * 484 *
486 **/ 485 **/
487 486
488static void e1000_power_up_phy(struct e1000_adapter *adapter) 487void e1000_power_up_phy(struct e1000_adapter *adapter)
489{ 488{
490 uint16_t mii_reg = 0; 489 uint16_t mii_reg = 0;
491 490
@@ -1499,8 +1498,6 @@ e1000_configure_tx(struct e1000_adapter *adapter)
1499 } else if (hw->mac_type == e1000_80003es2lan) { 1498 } else if (hw->mac_type == e1000_80003es2lan) {
1500 tarc = E1000_READ_REG(hw, TARC0); 1499 tarc = E1000_READ_REG(hw, TARC0);
1501 tarc |= 1; 1500 tarc |= 1;
1502 if (hw->media_type == e1000_media_type_internal_serdes)
1503 tarc |= (1 << 20);
1504 E1000_WRITE_REG(hw, TARC0, tarc); 1501 E1000_WRITE_REG(hw, TARC0, tarc);
1505 tarc = E1000_READ_REG(hw, TARC1); 1502 tarc = E1000_READ_REG(hw, TARC1);
1506 tarc |= 1; 1503 tarc |= 1;
@@ -2545,7 +2542,7 @@ e1000_tso(struct e1000_adapter *adapter, struct e1000_tx_ring *tx_ring,
2545 cmd_length = E1000_TXD_CMD_IP; 2542 cmd_length = E1000_TXD_CMD_IP;
2546 ipcse = skb->h.raw - skb->data - 1; 2543 ipcse = skb->h.raw - skb->data - 1;
2547#ifdef NETIF_F_TSO_IPV6 2544#ifdef NETIF_F_TSO_IPV6
2548 } else if (skb->protocol == ntohs(ETH_P_IPV6)) { 2545 } else if (skb->protocol == htons(ETH_P_IPV6)) {
2549 skb->nh.ipv6h->payload_len = 0; 2546 skb->nh.ipv6h->payload_len = 0;
2550 skb->h.th->check = 2547 skb->h.th->check =
2551 ~csum_ipv6_magic(&skb->nh.ipv6h->saddr, 2548 ~csum_ipv6_magic(&skb->nh.ipv6h->saddr,
diff --git a/drivers/net/ixgb/ixgb_hw.c b/drivers/net/ixgb/ixgb_hw.c
index f7fa10e47fa2..2b1515574faf 100644
--- a/drivers/net/ixgb/ixgb_hw.c
+++ b/drivers/net/ixgb/ixgb_hw.c
@@ -236,6 +236,17 @@ ixgb_identify_phy(struct ixgb_hw *hw)
236 DEBUGOUT("Identified G6104 optics\n"); 236 DEBUGOUT("Identified G6104 optics\n");
237 phy_type = ixgb_phy_type_g6104; 237 phy_type = ixgb_phy_type_g6104;
238 break; 238 break;
239 case IXGB_DEVICE_ID_82597EX_CX4:
240 DEBUGOUT("Identified CX4\n");
241 xpak_vendor = ixgb_identify_xpak_vendor(hw);
242 if (xpak_vendor == ixgb_xpak_vendor_intel) {
243 DEBUGOUT("Identified TXN17201 optics\n");
244 phy_type = ixgb_phy_type_txn17201;
245 } else {
246 DEBUGOUT("Identified G6005 optics\n");
247 phy_type = ixgb_phy_type_g6005;
248 }
249 break;
239 default: 250 default:
240 DEBUGOUT("Unknown physical layer module\n"); 251 DEBUGOUT("Unknown physical layer module\n");
241 phy_type = ixgb_phy_type_unknown; 252 phy_type = ixgb_phy_type_unknown;
diff --git a/drivers/net/ixgb/ixgb_ids.h b/drivers/net/ixgb/ixgb_ids.h
index 40a085f94c7b..9fd61189b4b2 100644
--- a/drivers/net/ixgb/ixgb_ids.h
+++ b/drivers/net/ixgb/ixgb_ids.h
@@ -45,6 +45,7 @@
45 45
46#define IXGB_DEVICE_ID_82597EX_CX4 0x109E 46#define IXGB_DEVICE_ID_82597EX_CX4 0x109E
47#define IXGB_SUBDEVICE_ID_A00C 0xA00C 47#define IXGB_SUBDEVICE_ID_A00C 0xA00C
48#define IXGB_SUBDEVICE_ID_A01C 0xA01C
48 49
49#endif /* #ifndef _IXGB_IDS_H_ */ 50#endif /* #ifndef _IXGB_IDS_H_ */
50/* End of File */ 51/* End of File */
diff --git a/drivers/net/ixgb/ixgb_main.c b/drivers/net/ixgb/ixgb_main.c
index 5bff05f9757b..346273d42f97 100644
--- a/drivers/net/ixgb/ixgb_main.c
+++ b/drivers/net/ixgb/ixgb_main.c
@@ -36,7 +36,7 @@ static char ixgb_driver_string[] = "Intel(R) PRO/10GbE Network Driver";
36#else 36#else
37#define DRIVERNAPI "-NAPI" 37#define DRIVERNAPI "-NAPI"
38#endif 38#endif
39#define DRV_VERSION "1.0.109-k2"DRIVERNAPI 39#define DRV_VERSION "1.0.109-k4"DRIVERNAPI
40char ixgb_driver_version[] = DRV_VERSION; 40char ixgb_driver_version[] = DRV_VERSION;
41static char ixgb_copyright[] = "Copyright (c) 1999-2006 Intel Corporation."; 41static char ixgb_copyright[] = "Copyright (c) 1999-2006 Intel Corporation.";
42 42
@@ -140,12 +140,12 @@ module_param(debug, int, 0);
140MODULE_PARM_DESC(debug, "Debug level (0=none,...,16=all)"); 140MODULE_PARM_DESC(debug, "Debug level (0=none,...,16=all)");
141 141
142/* some defines for controlling descriptor fetches in h/w */ 142/* some defines for controlling descriptor fetches in h/w */
143#define RXDCTL_WTHRESH_DEFAULT 16 /* chip writes back at this many or RXT0 */ 143#define RXDCTL_WTHRESH_DEFAULT 15 /* chip writes back at this many or RXT0 */
144#define RXDCTL_PTHRESH_DEFAULT 0 /* chip considers prefech below 144#define RXDCTL_PTHRESH_DEFAULT 0 /* chip considers prefech below
145 * this */ 145 * this */
146#define RXDCTL_HTHRESH_DEFAULT 0 /* chip will only prefetch if tail 146#define RXDCTL_HTHRESH_DEFAULT 0 /* chip will only prefetch if tail
147 * is pushed this many descriptors 147 * is pushed this many descriptors
148 * from head */ 148 * from head */
149 149
150/** 150/**
151 * ixgb_init_module - Driver Registration Routine 151 * ixgb_init_module - Driver Registration Routine