]> git.pld-linux.org Git - packages/kernel.git/blame - linux-2.6-via-rhine-suspend-resume.patch
- ported from linux-2.4.25-atmdd.patch
[packages/kernel.git] / linux-2.6-via-rhine-suspend-resume.patch
CommitLineData
1b4ef922
AM
1--- via-rhine.c.org 2004-08-05 00:31:19.796592888 +0200
2+++ via-rhine.c 2004-08-05 00:39:26.241642000 +0200
3@@ -485,6 +485,10 @@
4 dma_addr_t tx_bufs_dma;
5
6 struct pci_dev *pdev;
7+#ifdef CONFIG_PM
8+ long pioaddr;
9+ u32 pci_state[16];
10+#endif
11 struct net_device_stats stats;
12 spinlock_t lock;
13
14@@ -825,6 +829,9 @@
15 dev->base_addr = ioaddr;
16 rp = netdev_priv(dev);
17 rp->quirks = quirks;
18+#ifdef CONFIG_PM
19+ rp->pioaddr = pioaddr;
20+#endif
21
22 /* Get chip registers into a sane state */
23 rhine_power_init(dev);
24@@ -1951,11 +1958,64 @@
25
26 }
27
28+#ifdef CONFIG_PM
29+static int rhine_suspend (struct pci_dev *pdev, u32 state)
30+{
31+ struct net_device *dev = pci_get_drvdata (pdev);
32+ struct rhine_private *rp = dev->priv;
33+
34+ if (!netif_running (dev))
35+ return 0;
36+
37+ netif_device_detach (dev);
38+
39+ pci_save_state (pdev, rp->pci_state);
40+ pci_set_power_state (pdev, 3);
41+
42+ return 0;
43+}
44+
45+static int rhine_resume (struct pci_dev *pdev)
46+{
47+ struct net_device *dev = pci_get_drvdata (pdev);
48+ struct rhine_private *rp = dev->priv;
49+ unsigned long flags;
50+
51+ if (!netif_running (dev))
52+ return 0;
53+
54+ pci_set_power_state (pdev, 0);
55+ pci_restore_state (pdev, rp->pci_state);
56+
57+ spin_lock_irqsave (&rp->lock, flags);
58+
59+ rhine_power_init(dev);
60+ rhine_hw_init(dev, rp->pioaddr);
61+
62+ free_tbufs(dev);
63+ free_rbufs(dev);
64+ alloc_tbufs(dev);
65+ alloc_rbufs(dev);
66+
67+ init_registers(dev);
68+
69+ spin_unlock_irqrestore (&rp->lock, flags);
70+
71+ netif_device_attach (dev);
72+
73+ return 0;
74+}
75+#endif /* CONFIG_PM */
76+
77 static struct pci_driver rhine_driver = {
78 .name = DRV_NAME,
79 .id_table = rhine_pci_tbl,
80 .probe = rhine_init_one,
81 .remove = __devexit_p(rhine_remove_one),
82+#ifdef CONFIG_PM
83+ .suspend = rhine_suspend,
84+ .resume = rhine_resume,
85+#endif /* CONFIG_PM */
86 .driver = {
87 .shutdown = rhine_shutdown,
88 }
This page took 0.100593 seconds and 4 git commands to generate.