Hi! This is needed for suspend/resume. Original patch from ole.rohne@cern.ch. Please apply, Pavel --- /usr/src/tmp/linux/drivers/net/8139too.c 2003-07-11 21:38:37.000000000 +0200 +++ /usr/src/linux/drivers/net/8139too.c 2003-07-20 22:42:26.000000000 +0200 @@ -109,6 +109,7 @@ #include <linux/ethtool.h> #include <linux/mii.h> #include <linux/completion.h> +#include <linux/suspend.h> #include <linux/crc32.h> #include <asm/io.h> #include <asm/uaccess.h> @@ -565,6 +566,7 @@ void *mmio_addr; int drv_flags; struct pci_dev *pci_dev; + u32 pci_state[16]; struct net_device_stats stats; unsigned char *rx_ring; unsigned int cur_rx; /* Index into the Rx buffer of next Rx pkt. */ @@ -1597,6 +1599,8 @@ timeout = next_tick; do { timeout = interruptible_sleep_on_timeout (&tp->thr_wait, timeout); + if (current->flags & PF_FREEZE) + refrigerator(PF_IOTHREAD); } while (!signal_pending (current) && (timeout > 0)); if (signal_pending (current)) { @@ -2566,6 +2570,9 @@ tp->stats.rx_missed_errors += RTL_R32 (RxMissed); RTL_W32 (RxMissed, 0); + pci_save_state (pdev, tp->pci_state); + pci_set_power_state (pdev, 3); + spin_unlock_irqrestore (&tp->lock, flags); return 0; } @@ -2574,11 +2581,15 @@ static int rtl8139_resume (struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata (pdev); + struct rtl8139_private *tp = dev->priv; if (!netif_running (dev)) return 0; - netif_device_attach (dev); + pci_set_power_state (pdev, 0); + pci_restore_state (pdev, tp->pci_state); + rtl8139_init_ring (dev); rtl8139_hw_start (dev); + netif_device_attach (dev); return 0; } Pavel -- When do you have a heart between your knees? [Johanka's followup: and *two* hearts?] - : send the line "unsubscribe linux-net" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html