summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authoryongari <yongari@FreeBSD.org>2010-09-02 22:37:13 +0000
committeryongari <yongari@FreeBSD.org>2010-09-02 22:37:13 +0000
commitf6865f86d42278a5c505ed7c7f28aa22fa7acddf (patch)
tree361ab860e7bdad85e8a76be14572e69e8915f62c /sys
parent7a351461e0a53d7f62468f9780306653bd43e99a (diff)
downloadFreeBSD-src-f6865f86d42278a5c505ed7c7f28aa22fa7acddf.zip
FreeBSD-src-f6865f86d42278a5c505ed7c7f28aa22fa7acddf.tar.gz
Implement initial device suspend/resume method.
Diffstat (limited to 'sys')
-rw-r--r--sys/dev/sis/if_sis.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/sys/dev/sis/if_sis.c b/sys/dev/sis/if_sis.c
index ceff6b8..2b4bb9b 100644
--- a/sys/dev/sis/if_sis.c
+++ b/sys/dev/sis/if_sis.c
@@ -2393,6 +2393,35 @@ sis_shutdown(device_t dev)
return (0);
}
+static int
+sis_suspend(device_t dev)
+{
+ struct sis_softc *sc;
+
+ sc = device_get_softc(dev);
+ SIS_LOCK(sc);
+ sis_stop(sc);
+ SIS_UNLOCK(sc);
+ return (0);
+}
+
+static int
+sis_resume(device_t dev)
+{
+ struct sis_softc *sc;
+ struct ifnet *ifp;
+
+ sc = device_get_softc(dev);
+ SIS_LOCK(sc);
+ ifp = sc->sis_ifp;
+ if ((ifp->if_flags & IFF_UP) != 0) {
+ ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
+ sis_initl(sc);
+ }
+ SIS_UNLOCK(sc);
+ return (0);
+}
+
static void
sis_add_sysctls(struct sis_softc *sc)
{
@@ -2425,6 +2454,8 @@ static device_method_t sis_methods[] = {
DEVMETHOD(device_attach, sis_attach),
DEVMETHOD(device_detach, sis_detach),
DEVMETHOD(device_shutdown, sis_shutdown),
+ DEVMETHOD(device_suspend, sis_suspend),
+ DEVMETHOD(device_resume, sis_resume),
/* bus interface */
DEVMETHOD(bus_print_child, bus_generic_print_child),
OpenPOWER on IntegriCloud