summaryrefslogtreecommitdiff
path: root/sys/dev/wi/if_wi_pci.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/wi/if_wi_pci.c')
-rw-r--r--sys/dev/wi/if_wi_pci.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/sys/dev/wi/if_wi_pci.c b/sys/dev/wi/if_wi_pci.c
index 13d7a825fe15..7dd2536f99ba 100644
--- a/sys/dev/wi/if_wi_pci.c
+++ b/sys/dev/wi/if_wi_pci.c
@@ -69,6 +69,8 @@
static int wi_pci_probe(device_t);
static int wi_pci_attach(device_t);
+static int wi_pci_suspend(device_t);
+static int wi_pci_resume(device_t);
static device_method_t wi_pci_methods[] = {
/* Device interface */
@@ -76,6 +78,8 @@ static device_method_t wi_pci_methods[] = {
DEVMETHOD(device_attach, wi_pci_attach),
DEVMETHOD(device_detach, wi_generic_detach),
DEVMETHOD(device_shutdown, wi_shutdown),
+ DEVMETHOD(device_suspend, wi_pci_suspend),
+ DEVMETHOD(device_resume, wi_pci_resume),
{ 0, 0 }
};
@@ -233,3 +237,33 @@ wi_pci_attach(device_t dev)
return (0);
}
+
+static int
+wi_pci_suspend (device_t dev)
+{
+ struct wi_softc *sc;
+ sc = device_get_softc(dev);
+
+ wi_stop(sc);
+
+ return (0);
+}
+
+static int
+wi_pci_resume (device_t dev)
+{
+ struct wi_softc *sc;
+ struct ifnet *ifp;
+ sc = device_get_softc(dev);
+ ifp = &sc->arpcom.ac_if;
+
+ if (sc->wi_bus_type != WI_BUS_PCI_NATIVE)
+ return (0);
+
+ ifp->if_init(ifp->if_softc);
+ if (ifp->if_flags & IFF_UP) {
+ ifp->if_start(ifp);
+ }
+
+ return (0);
+}