summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authoruwe <uwe@NetBSD.org>2009-04-05 03:37:07 +0000
committeruwe <uwe@NetBSD.org>2009-04-05 03:37:07 +0000
commit6a2ffc8f1bcaee817f46b969b50259644dd6e776 (patch)
tree4c319e6d4d214dda8155c7ab09394ab5b2ad6e7f /sys/dev
parent4e37bb5a9cab57b8837aa7fe4b54920a423b35d0 (diff)
Provide pmf(9) hooks that do what dopowerhooks(9) hook does.
XXX: Do NOT call pmf_class_network_register() yet, b/c db8320.c doesn't provide if_stop method!
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/ic/ne2000.c39
-rw-r--r--sys/dev/ic/ne2000var.h7
-rw-r--r--sys/dev/pcmcia/if_ne_pcmcia.c14
3 files changed, 55 insertions, 5 deletions
diff --git a/sys/dev/ic/ne2000.c b/sys/dev/ic/ne2000.c
index f31280973ae..8b54e3b9a75 100644
--- a/sys/dev/ic/ne2000.c
+++ b/sys/dev/ic/ne2000.c
@@ -1,4 +1,4 @@
-/* $NetBSD: ne2000.c,v 1.60 2009/03/14 15:36:17 dsl Exp $ */
+/* $NetBSD: ne2000.c,v 1.61 2009/04/05 03:37:07 uwe Exp $ */
/*-
* Copyright (c) 1997, 1998 The NetBSD Foundation, Inc.
@@ -48,7 +48,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ne2000.c,v 1.60 2009/03/14 15:36:17 dsl Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ne2000.c,v 1.61 2009/04/05 03:37:07 uwe Exp $");
#include "opt_ipkdb.h"
@@ -923,3 +923,38 @@ ne2000_power(int why, void *arg)
}
splx(s);
}
+
+bool
+ne2000_suspend(device_t self PMF_FN_ARGS)
+{
+ struct ne2000_softc *sc = device_private(self);
+ struct dp8390_softc *dsc = &sc->sc_dp8390;
+ int s;
+
+ s = splnet();
+
+ dp8390_stop(dsc);
+ dp8390_disable(dsc);
+
+ splx(s);
+ return true;
+}
+
+bool
+ne2000_resume(device_t self PMF_FN_ARGS)
+{
+ struct ne2000_softc *sc = device_private(self);
+ struct dp8390_softc *dsc = &sc->sc_dp8390;
+ struct ifnet *ifp = &dsc->sc_ec.ec_if;
+ int s;
+
+ s = splnet();
+
+ if (ifp->if_flags & IFF_UP) {
+ if (dp8390_enable(dsc) == 0)
+ dp8390_init(dsc);
+ }
+
+ splx(s);
+ return true;
+}
diff --git a/sys/dev/ic/ne2000var.h b/sys/dev/ic/ne2000var.h
index 2c3091738f1..67c72624fd2 100644
--- a/sys/dev/ic/ne2000var.h
+++ b/sys/dev/ic/ne2000var.h
@@ -1,4 +1,4 @@
-/* $NetBSD: ne2000var.h,v 1.19 2008/04/28 20:23:50 martin Exp $ */
+/* $NetBSD: ne2000var.h,v 1.20 2009/04/05 03:37:07 uwe Exp $ */
/*-
* Copyright (c) 1997, 1998 The NetBSD Foundation, Inc.
@@ -60,6 +60,11 @@ int ne2000_detach(struct ne2000_softc *, int);
int ne2000_ipkdb_attach(struct ipkdb_if *);
#endif
+/* dopowerhooks(9) - deprecated */
void ne2000_power(int, void *);
+/* pmf(9) */
+bool ne2000_suspend(device_t PMF_FN_PROTO);
+bool ne2000_resume(device_t PMF_FN_PROTO);
+
#endif /* _DEV_IC_NE2000VAR_H_ */
diff --git a/sys/dev/pcmcia/if_ne_pcmcia.c b/sys/dev/pcmcia/if_ne_pcmcia.c
index 94fd6baa26a..96317f15316 100644
--- a/sys/dev/pcmcia/if_ne_pcmcia.c
+++ b/sys/dev/pcmcia/if_ne_pcmcia.c
@@ -1,4 +1,4 @@
-/* $NetBSD: if_ne_pcmcia.c,v 1.155 2008/05/16 20:27:20 jnemeth Exp $ */
+/* $NetBSD: if_ne_pcmcia.c,v 1.156 2009/04/05 03:37:07 uwe Exp $ */
/*
* Copyright (c) 1997 Marc Horowitz. All rights reserved.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_ne_pcmcia.c,v 1.155 2008/05/16 20:27:20 jnemeth Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_ne_pcmcia.c,v 1.156 2009/04/05 03:37:07 uwe Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -733,12 +733,22 @@ found:
if (ne2000_attach(nsc, enaddr))
goto fail2;
+ /* dopowerhooks(9) - deprecated, only called by hpcs* apmdev(4) */
psc->sc_powerhook = powerhook_establish(device_xname(self),
ne2000_power, nsc);
if (psc->sc_powerhook == NULL)
aprint_error_dev(self,
"WARNING: unable to establish power hook\n");
+ /* pmf(9) power hooks */
+ if (!pmf_device_register(self, ne2000_suspend, ne2000_resume))
+ aprint_error_dev(self, "unable to establish power handler\n");
+ else {
+#if 0 /* XXX: notyet: if_stop is NULL! */
+ pmf_class_network_register(self, &dsc->sc_ec.ec_if);
+#endif
+ }
+
psc->sc_state = NE_PCMCIA_ATTACHED;
ne_pcmcia_disable(dsc);
return;