diff options
Diffstat (limited to 'drivers/net/e100.c')
-rw-r--r-- | drivers/net/e100.c | 142 |
1 files changed, 96 insertions, 46 deletions
diff --git a/drivers/net/e100.c b/drivers/net/e100.c index 4726722a0635..bf1fd2b98bf8 100644 --- a/drivers/net/e100.c +++ b/drivers/net/e100.c | |||
@@ -1,25 +1,25 @@ | |||
1 | /******************************************************************************* | 1 | /******************************************************************************* |
2 | 2 | ||
3 | 3 | ||
4 | Copyright(c) 1999 - 2005 Intel Corporation. All rights reserved. | 4 | Copyright(c) 1999 - 2005 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 |
8 | Software Foundation; either version 2 of the License, or (at your option) | 8 | Software Foundation; either version 2 of the License, or (at your option) |
9 | any later version. | 9 | any later version. |
10 | 10 | ||
11 | This program is distributed in the hope that it will be useful, but WITHOUT | 11 | This program is distributed in the hope that it will be useful, but WITHOUT |
12 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | 12 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
13 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | 13 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
14 | more details. | 14 | more details. |
15 | 15 | ||
16 | You should have received a copy of the GNU General Public License along with | 16 | You should have received a copy of the GNU General Public License along with |
17 | this program; if not, write to the Free Software Foundation, Inc., 59 | 17 | this program; if not, write to the Free Software Foundation, Inc., 59 |
18 | Temple Place - Suite 330, Boston, MA 02111-1307, USA. | 18 | Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
19 | 19 | ||
20 | The full GNU General Public License is included in this distribution in the | 20 | The full GNU General Public License is included in this distribution in the |
21 | file called LICENSE. | 21 | file called LICENSE. |
22 | 22 | ||
23 | Contact Information: | 23 | Contact Information: |
24 | Linux NICS <linux.nics@intel.com> | 24 | Linux NICS <linux.nics@intel.com> |
25 | Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 | 25 | Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 |
@@ -160,7 +160,7 @@ | |||
160 | 160 | ||
161 | #define DRV_NAME "e100" | 161 | #define DRV_NAME "e100" |
162 | #define DRV_EXT "-NAPI" | 162 | #define DRV_EXT "-NAPI" |
163 | #define DRV_VERSION "3.4.14-k4"DRV_EXT | 163 | #define DRV_VERSION "3.5.10-k2"DRV_EXT |
164 | #define DRV_DESCRIPTION "Intel(R) PRO/100 Network Driver" | 164 | #define DRV_DESCRIPTION "Intel(R) PRO/100 Network Driver" |
165 | #define DRV_COPYRIGHT "Copyright(c) 1999-2005 Intel Corporation" | 165 | #define DRV_COPYRIGHT "Copyright(c) 1999-2005 Intel Corporation" |
166 | #define PFX DRV_NAME ": " | 166 | #define PFX DRV_NAME ": " |
@@ -320,7 +320,7 @@ enum cuc_dump { | |||
320 | cuc_dump_complete = 0x0000A005, | 320 | cuc_dump_complete = 0x0000A005, |
321 | cuc_dump_reset_complete = 0x0000A007, | 321 | cuc_dump_reset_complete = 0x0000A007, |
322 | }; | 322 | }; |
323 | 323 | ||
324 | enum port { | 324 | enum port { |
325 | software_reset = 0x0000, | 325 | software_reset = 0x0000, |
326 | selftest = 0x0001, | 326 | selftest = 0x0001, |
@@ -715,10 +715,10 @@ static u16 e100_eeprom_read(struct nic *nic, u16 *addr_len, u16 addr) | |||
715 | ctrl = (cmd_addr_data & (1 << i)) ? eecs | eedi : eecs; | 715 | ctrl = (cmd_addr_data & (1 << i)) ? eecs | eedi : eecs; |
716 | writeb(ctrl, &nic->csr->eeprom_ctrl_lo); | 716 | writeb(ctrl, &nic->csr->eeprom_ctrl_lo); |
717 | e100_write_flush(nic); udelay(4); | 717 | e100_write_flush(nic); udelay(4); |
718 | 718 | ||
719 | writeb(ctrl | eesk, &nic->csr->eeprom_ctrl_lo); | 719 | writeb(ctrl | eesk, &nic->csr->eeprom_ctrl_lo); |
720 | e100_write_flush(nic); udelay(4); | 720 | e100_write_flush(nic); udelay(4); |
721 | 721 | ||
722 | /* Eeprom drives a dummy zero to EEDO after receiving | 722 | /* Eeprom drives a dummy zero to EEDO after receiving |
723 | * complete address. Use this to adjust addr_len. */ | 723 | * complete address. Use this to adjust addr_len. */ |
724 | ctrl = readb(&nic->csr->eeprom_ctrl_lo); | 724 | ctrl = readb(&nic->csr->eeprom_ctrl_lo); |
@@ -726,7 +726,7 @@ static u16 e100_eeprom_read(struct nic *nic, u16 *addr_len, u16 addr) | |||
726 | *addr_len -= (i - 16); | 726 | *addr_len -= (i - 16); |
727 | i = 17; | 727 | i = 17; |
728 | } | 728 | } |
729 | 729 | ||
730 | data = (data << 1) | (ctrl & eedo ? 1 : 0); | 730 | data = (data << 1) | (ctrl & eedo ? 1 : 0); |
731 | } | 731 | } |
732 | 732 | ||
@@ -1170,7 +1170,7 @@ static void e100_configure(struct nic *nic, struct cb *cb, struct sk_buff *skb) | |||
1170 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ | 1170 | 0x00000000, 0x00000000, 0x00000000, 0x00000000, \ |
1171 | } | 1171 | } |
1172 | 1172 | ||
1173 | static void e100_load_ucode(struct nic *nic, struct cb *cb, struct sk_buff *skb) | 1173 | static void e100_setup_ucode(struct nic *nic, struct cb *cb, struct sk_buff *skb) |
1174 | { | 1174 | { |
1175 | /* *INDENT-OFF* */ | 1175 | /* *INDENT-OFF* */ |
1176 | static struct { | 1176 | static struct { |
@@ -1213,13 +1213,13 @@ static void e100_load_ucode(struct nic *nic, struct cb *cb, struct sk_buff *skb) | |||
1213 | * driver can change the algorithm. | 1213 | * driver can change the algorithm. |
1214 | * | 1214 | * |
1215 | * INTDELAY - This loads the dead-man timer with its inital value. | 1215 | * INTDELAY - This loads the dead-man timer with its inital value. |
1216 | * When this timer expires the interrupt is asserted, and the | 1216 | * When this timer expires the interrupt is asserted, and the |
1217 | * timer is reset each time a new packet is received. (see | 1217 | * timer is reset each time a new packet is received. (see |
1218 | * BUNDLEMAX below to set the limit on number of chained packets) | 1218 | * BUNDLEMAX below to set the limit on number of chained packets) |
1219 | * The current default is 0x600 or 1536. Experiments show that | 1219 | * The current default is 0x600 or 1536. Experiments show that |
1220 | * the value should probably stay within the 0x200 - 0x1000. | 1220 | * the value should probably stay within the 0x200 - 0x1000. |
1221 | * | 1221 | * |
1222 | * BUNDLEMAX - | 1222 | * BUNDLEMAX - |
1223 | * This sets the maximum number of frames that will be bundled. In | 1223 | * This sets the maximum number of frames that will be bundled. In |
1224 | * some situations, such as the TCP windowing algorithm, it may be | 1224 | * some situations, such as the TCP windowing algorithm, it may be |
1225 | * better to limit the growth of the bundle size than let it go as | 1225 | * better to limit the growth of the bundle size than let it go as |
@@ -1229,7 +1229,7 @@ static void e100_load_ucode(struct nic *nic, struct cb *cb, struct sk_buff *skb) | |||
1229 | * an interrupt for every frame received. If you do not want to put | 1229 | * an interrupt for every frame received. If you do not want to put |
1230 | * a limit on the bundle size, set this value to xFFFF. | 1230 | * a limit on the bundle size, set this value to xFFFF. |
1231 | * | 1231 | * |
1232 | * BUNDLESMALL - | 1232 | * BUNDLESMALL - |
1233 | * This contains a bit-mask describing the minimum size frame that | 1233 | * This contains a bit-mask describing the minimum size frame that |
1234 | * will be bundled. The default masks the lower 7 bits, which means | 1234 | * will be bundled. The default masks the lower 7 bits, which means |
1235 | * that any frame less than 128 bytes in length will not be bundled, | 1235 | * that any frame less than 128 bytes in length will not be bundled, |
@@ -1244,7 +1244,7 @@ static void e100_load_ucode(struct nic *nic, struct cb *cb, struct sk_buff *skb) | |||
1244 | * | 1244 | * |
1245 | * The current default is 0xFF80, which masks out the lower 7 bits. | 1245 | * The current default is 0xFF80, which masks out the lower 7 bits. |
1246 | * This means that any frame which is x7F (127) bytes or smaller | 1246 | * This means that any frame which is x7F (127) bytes or smaller |
1247 | * will cause an immediate interrupt. Because this value must be a | 1247 | * will cause an immediate interrupt. Because this value must be a |
1248 | * bit mask, there are only a few valid values that can be used. To | 1248 | * bit mask, there are only a few valid values that can be used. To |
1249 | * turn this feature off, the driver can write the value xFFFF to the | 1249 | * turn this feature off, the driver can write the value xFFFF to the |
1250 | * lower word of this instruction (in the same way that the other | 1250 | * lower word of this instruction (in the same way that the other |
@@ -1253,7 +1253,7 @@ static void e100_load_ucode(struct nic *nic, struct cb *cb, struct sk_buff *skb) | |||
1253 | * standard Ethernet frames are <= 2047 bytes in length. | 1253 | * standard Ethernet frames are <= 2047 bytes in length. |
1254 | *************************************************************************/ | 1254 | *************************************************************************/ |
1255 | 1255 | ||
1256 | /* if you wish to disable the ucode functionality, while maintaining the | 1256 | /* if you wish to disable the ucode functionality, while maintaining the |
1257 | * workarounds it provides, set the following defines to: | 1257 | * workarounds it provides, set the following defines to: |
1258 | * BUNDLESMALL 0 | 1258 | * BUNDLESMALL 0 |
1259 | * BUNDLEMAX 1 | 1259 | * BUNDLEMAX 1 |
@@ -1284,12 +1284,46 @@ static void e100_load_ucode(struct nic *nic, struct cb *cb, struct sk_buff *skb) | |||
1284 | 1284 | ||
1285 | for (i = 0; i < UCODE_SIZE; i++) | 1285 | for (i = 0; i < UCODE_SIZE; i++) |
1286 | cb->u.ucode[i] = cpu_to_le32(ucode[i]); | 1286 | cb->u.ucode[i] = cpu_to_le32(ucode[i]); |
1287 | cb->command = cpu_to_le16(cb_ucode); | 1287 | cb->command = cpu_to_le16(cb_ucode | cb_el); |
1288 | return; | 1288 | return; |
1289 | } | 1289 | } |
1290 | 1290 | ||
1291 | noloaducode: | 1291 | noloaducode: |
1292 | cb->command = cpu_to_le16(cb_nop); | 1292 | cb->command = cpu_to_le16(cb_nop | cb_el); |
1293 | } | ||
1294 | |||
1295 | static inline int e100_exec_cb_wait(struct nic *nic, struct sk_buff *skb, | ||
1296 | void (*cb_prepare)(struct nic *, struct cb *, struct sk_buff *)) | ||
1297 | { | ||
1298 | int err = 0, counter = 50; | ||
1299 | struct cb *cb = nic->cb_to_clean; | ||
1300 | |||
1301 | if ((err = e100_exec_cb(nic, NULL, e100_setup_ucode))) | ||
1302 | DPRINTK(PROBE,ERR, "ucode cmd failed with error %d\n", err); | ||
1303 | |||
1304 | /* must restart cuc */ | ||
1305 | nic->cuc_cmd = cuc_start; | ||
1306 | |||
1307 | /* wait for completion */ | ||
1308 | e100_write_flush(nic); | ||
1309 | udelay(10); | ||
1310 | |||
1311 | /* wait for possibly (ouch) 500ms */ | ||
1312 | while (!(cb->status & cpu_to_le16(cb_complete))) { | ||
1313 | msleep(10); | ||
1314 | if (!--counter) break; | ||
1315 | } | ||
1316 | |||
1317 | /* ack any interupts, something could have been set */ | ||
1318 | writeb(~0, &nic->csr->scb.stat_ack); | ||
1319 | |||
1320 | /* if the command failed, or is not OK, notify and return */ | ||
1321 | if (!counter || !(cb->status & cpu_to_le16(cb_ok))) { | ||
1322 | DPRINTK(PROBE,ERR, "ucode load failed\n"); | ||
1323 | err = -EPERM; | ||
1324 | } | ||
1325 | |||
1326 | return err; | ||
1293 | } | 1327 | } |
1294 | 1328 | ||
1295 | static void e100_setup_iaaddr(struct nic *nic, struct cb *cb, | 1329 | static void e100_setup_iaaddr(struct nic *nic, struct cb *cb, |
@@ -1357,13 +1391,13 @@ static int e100_phy_init(struct nic *nic) | |||
1357 | mdio_write(netdev, nic->mii.phy_id, MII_NSC_CONG, cong); | 1391 | mdio_write(netdev, nic->mii.phy_id, MII_NSC_CONG, cong); |
1358 | } | 1392 | } |
1359 | 1393 | ||
1360 | if((nic->mac >= mac_82550_D102) || ((nic->flags & ich) && | 1394 | if((nic->mac >= mac_82550_D102) || ((nic->flags & ich) && |
1361 | (mdio_read(netdev, nic->mii.phy_id, MII_TPISTATUS) & 0x8000))) { | 1395 | (mdio_read(netdev, nic->mii.phy_id, MII_TPISTATUS) & 0x8000))) { |
1362 | /* enable/disable MDI/MDI-X auto-switching. | 1396 | /* enable/disable MDI/MDI-X auto-switching. |
1363 | MDI/MDI-X auto-switching is disabled for 82551ER/QM chips */ | 1397 | MDI/MDI-X auto-switching is disabled for 82551ER/QM chips */ |
1364 | if((nic->mac == mac_82551_E) || (nic->mac == mac_82551_F) || | 1398 | if((nic->mac == mac_82551_E) || (nic->mac == mac_82551_F) || |
1365 | (nic->mac == mac_82551_10) || (nic->mii.force_media) || | 1399 | (nic->mac == mac_82551_10) || (nic->mii.force_media) || |
1366 | !(nic->eeprom[eeprom_cnfg_mdix] & eeprom_mdix_enabled)) | 1400 | !(nic->eeprom[eeprom_cnfg_mdix] & eeprom_mdix_enabled)) |
1367 | mdio_write(netdev, nic->mii.phy_id, MII_NCONFIG, 0); | 1401 | mdio_write(netdev, nic->mii.phy_id, MII_NCONFIG, 0); |
1368 | else | 1402 | else |
1369 | mdio_write(netdev, nic->mii.phy_id, MII_NCONFIG, NCONFIG_AUTO_SWITCH); | 1403 | mdio_write(netdev, nic->mii.phy_id, MII_NCONFIG, NCONFIG_AUTO_SWITCH); |
@@ -1388,7 +1422,7 @@ static int e100_hw_init(struct nic *nic) | |||
1388 | return err; | 1422 | return err; |
1389 | if((err = e100_exec_cmd(nic, ruc_load_base, 0))) | 1423 | if((err = e100_exec_cmd(nic, ruc_load_base, 0))) |
1390 | return err; | 1424 | return err; |
1391 | if((err = e100_exec_cb(nic, NULL, e100_load_ucode))) | 1425 | if ((err = e100_exec_cb_wait(nic, NULL, e100_setup_ucode))) |
1392 | return err; | 1426 | return err; |
1393 | if((err = e100_exec_cb(nic, NULL, e100_configure))) | 1427 | if((err = e100_exec_cb(nic, NULL, e100_configure))) |
1394 | return err; | 1428 | return err; |
@@ -1493,7 +1527,7 @@ static void e100_update_stats(struct nic *nic) | |||
1493 | } | 1527 | } |
1494 | } | 1528 | } |
1495 | 1529 | ||
1496 | 1530 | ||
1497 | if(e100_exec_cmd(nic, cuc_dump_reset, 0)) | 1531 | if(e100_exec_cmd(nic, cuc_dump_reset, 0)) |
1498 | DPRINTK(TX_ERR, DEBUG, "exec cuc_dump_reset failed\n"); | 1532 | DPRINTK(TX_ERR, DEBUG, "exec cuc_dump_reset failed\n"); |
1499 | } | 1533 | } |
@@ -1542,10 +1576,10 @@ static void e100_watchdog(unsigned long data) | |||
1542 | mii_check_link(&nic->mii); | 1576 | mii_check_link(&nic->mii); |
1543 | 1577 | ||
1544 | /* Software generated interrupt to recover from (rare) Rx | 1578 | /* Software generated interrupt to recover from (rare) Rx |
1545 | * allocation failure. | 1579 | * allocation failure. |
1546 | * Unfortunately have to use a spinlock to not re-enable interrupts | 1580 | * Unfortunately have to use a spinlock to not re-enable interrupts |
1547 | * accidentally, due to hardware that shares a register between the | 1581 | * accidentally, due to hardware that shares a register between the |
1548 | * interrupt mask bit and the SW Interrupt generation bit */ | 1582 | * interrupt mask bit and the SW Interrupt generation bit */ |
1549 | spin_lock_irq(&nic->cmd_lock); | 1583 | spin_lock_irq(&nic->cmd_lock); |
1550 | writeb(readb(&nic->csr->scb.cmd_hi) | irq_sw_gen,&nic->csr->scb.cmd_hi); | 1584 | writeb(readb(&nic->csr->scb.cmd_hi) | irq_sw_gen,&nic->csr->scb.cmd_hi); |
1551 | spin_unlock_irq(&nic->cmd_lock); | 1585 | spin_unlock_irq(&nic->cmd_lock); |
@@ -1830,7 +1864,7 @@ static void e100_rx_clean(struct nic *nic, unsigned int *work_done, | |||
1830 | struct rx *rx_to_start = NULL; | 1864 | struct rx *rx_to_start = NULL; |
1831 | 1865 | ||
1832 | /* are we already rnr? then pay attention!!! this ensures that | 1866 | /* are we already rnr? then pay attention!!! this ensures that |
1833 | * the state machine progression never allows a start with a | 1867 | * the state machine progression never allows a start with a |
1834 | * partially cleaned list, avoiding a race between hardware | 1868 | * partially cleaned list, avoiding a race between hardware |
1835 | * and rx_to_clean when in NAPI mode */ | 1869 | * and rx_to_clean when in NAPI mode */ |
1836 | if(RU_SUSPENDED == nic->ru_running) | 1870 | if(RU_SUSPENDED == nic->ru_running) |
@@ -2066,7 +2100,7 @@ static void e100_tx_timeout(struct net_device *netdev) | |||
2066 | { | 2100 | { |
2067 | struct nic *nic = netdev_priv(netdev); | 2101 | struct nic *nic = netdev_priv(netdev); |
2068 | 2102 | ||
2069 | /* Reset outside of interrupt context, to avoid request_irq | 2103 | /* Reset outside of interrupt context, to avoid request_irq |
2070 | * in interrupt context */ | 2104 | * in interrupt context */ |
2071 | schedule_work(&nic->tx_timeout_task); | 2105 | schedule_work(&nic->tx_timeout_task); |
2072 | } | 2106 | } |
@@ -2313,7 +2347,7 @@ static int e100_set_ringparam(struct net_device *netdev, | |||
2313 | struct param_range *rfds = &nic->params.rfds; | 2347 | struct param_range *rfds = &nic->params.rfds; |
2314 | struct param_range *cbs = &nic->params.cbs; | 2348 | struct param_range *cbs = &nic->params.cbs; |
2315 | 2349 | ||
2316 | if ((ring->rx_mini_pending) || (ring->rx_jumbo_pending)) | 2350 | if ((ring->rx_mini_pending) || (ring->rx_jumbo_pending)) |
2317 | return -EINVAL; | 2351 | return -EINVAL; |
2318 | 2352 | ||
2319 | if(netif_running(netdev)) | 2353 | if(netif_running(netdev)) |
@@ -2631,7 +2665,9 @@ static int __devinit e100_probe(struct pci_dev *pdev, | |||
2631 | nic->flags |= wol_magic; | 2665 | nic->flags |= wol_magic; |
2632 | 2666 | ||
2633 | /* ack any pending wake events, disable PME */ | 2667 | /* ack any pending wake events, disable PME */ |
2634 | pci_enable_wake(pdev, 0, 0); | 2668 | err = pci_enable_wake(pdev, 0, 0); |
2669 | if (err) | ||
2670 | DPRINTK(PROBE, ERR, "Error clearing wake event\n"); | ||
2635 | 2671 | ||
2636 | strcpy(netdev->name, "eth%d"); | 2672 | strcpy(netdev->name, "eth%d"); |
2637 | if((err = register_netdev(netdev))) { | 2673 | if((err = register_netdev(netdev))) { |
@@ -2682,6 +2718,7 @@ static int e100_suspend(struct pci_dev *pdev, pm_message_t state) | |||
2682 | { | 2718 | { |
2683 | struct net_device *netdev = pci_get_drvdata(pdev); | 2719 | struct net_device *netdev = pci_get_drvdata(pdev); |
2684 | struct nic *nic = netdev_priv(netdev); | 2720 | struct nic *nic = netdev_priv(netdev); |
2721 | int retval; | ||
2685 | 2722 | ||
2686 | if(netif_running(netdev)) | 2723 | if(netif_running(netdev)) |
2687 | e100_down(nic); | 2724 | e100_down(nic); |
@@ -2689,9 +2726,14 @@ static int e100_suspend(struct pci_dev *pdev, pm_message_t state) | |||
2689 | netif_device_detach(netdev); | 2726 | netif_device_detach(netdev); |
2690 | 2727 | ||
2691 | pci_save_state(pdev); | 2728 | pci_save_state(pdev); |
2692 | pci_enable_wake(pdev, pci_choose_state(pdev, state), nic->flags & (wol_magic | e100_asf(nic))); | 2729 | retval = pci_enable_wake(pdev, pci_choose_state(pdev, state), |
2730 | nic->flags & (wol_magic | e100_asf(nic))); | ||
2731 | if (retval) | ||
2732 | DPRINTK(PROBE,ERR, "Error enabling wake\n"); | ||
2693 | pci_disable_device(pdev); | 2733 | pci_disable_device(pdev); |
2694 | pci_set_power_state(pdev, pci_choose_state(pdev, state)); | 2734 | retval = pci_set_power_state(pdev, pci_choose_state(pdev, state)); |
2735 | if (retval) | ||
2736 | DPRINTK(PROBE,ERR, "Error %d setting power state\n", retval); | ||
2695 | 2737 | ||
2696 | return 0; | 2738 | return 0; |
2697 | } | 2739 | } |
@@ -2700,11 +2742,16 @@ static int e100_resume(struct pci_dev *pdev) | |||
2700 | { | 2742 | { |
2701 | struct net_device *netdev = pci_get_drvdata(pdev); | 2743 | struct net_device *netdev = pci_get_drvdata(pdev); |
2702 | struct nic *nic = netdev_priv(netdev); | 2744 | struct nic *nic = netdev_priv(netdev); |
2745 | int retval; | ||
2703 | 2746 | ||
2704 | pci_set_power_state(pdev, PCI_D0); | 2747 | retval = pci_set_power_state(pdev, PCI_D0); |
2748 | if (retval) | ||
2749 | DPRINTK(PROBE,ERR, "Error waking adapter\n"); | ||
2705 | pci_restore_state(pdev); | 2750 | pci_restore_state(pdev); |
2706 | /* ack any pending wake events, disable PME */ | 2751 | /* ack any pending wake events, disable PME */ |
2707 | pci_enable_wake(pdev, 0, 0); | 2752 | retval = pci_enable_wake(pdev, 0, 0); |
2753 | if (retval) | ||
2754 | DPRINTK(PROBE,ERR, "Error clearing wake events\n"); | ||
2708 | if(e100_hw_init(nic)) | 2755 | if(e100_hw_init(nic)) |
2709 | DPRINTK(HW, ERR, "e100_hw_init failed\n"); | 2756 | DPRINTK(HW, ERR, "e100_hw_init failed\n"); |
2710 | 2757 | ||
@@ -2721,12 +2768,15 @@ static void e100_shutdown(struct pci_dev *pdev) | |||
2721 | { | 2768 | { |
2722 | struct net_device *netdev = pci_get_drvdata(pdev); | 2769 | struct net_device *netdev = pci_get_drvdata(pdev); |
2723 | struct nic *nic = netdev_priv(netdev); | 2770 | struct nic *nic = netdev_priv(netdev); |
2771 | int retval; | ||
2724 | 2772 | ||
2725 | #ifdef CONFIG_PM | 2773 | #ifdef CONFIG_PM |
2726 | pci_enable_wake(pdev, 0, nic->flags & (wol_magic | e100_asf(nic))); | 2774 | retval = pci_enable_wake(pdev, 0, nic->flags & (wol_magic | e100_asf(nic))); |
2727 | #else | 2775 | #else |
2728 | pci_enable_wake(pdev, 0, nic->flags & (wol_magic)); | 2776 | retval = pci_enable_wake(pdev, 0, nic->flags & (wol_magic)); |
2729 | #endif | 2777 | #endif |
2778 | if (retval) | ||
2779 | DPRINTK(PROBE,ERR, "Error enabling wake\n"); | ||
2730 | } | 2780 | } |
2731 | 2781 | ||
2732 | 2782 | ||
@@ -2739,7 +2789,7 @@ static struct pci_driver e100_driver = { | |||
2739 | .suspend = e100_suspend, | 2789 | .suspend = e100_suspend, |
2740 | .resume = e100_resume, | 2790 | .resume = e100_resume, |
2741 | #endif | 2791 | #endif |
2742 | .shutdown = e100_shutdown, | 2792 | .shutdown = e100_shutdown, |
2743 | }; | 2793 | }; |
2744 | 2794 | ||
2745 | static int __init e100_init_module(void) | 2795 | static int __init e100_init_module(void) |