]> git.pld-linux.org Git - packages/kernel.git/blob - 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
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.039362 seconds and 3 git commands to generate.