diff options
| author | uwe <uwe@NetBSD.org> | 2009-04-05 03:37:07 +0000 |
|---|---|---|
| committer | uwe <uwe@NetBSD.org> | 2009-04-05 03:37:07 +0000 |
| commit | 6a2ffc8f1bcaee817f46b969b50259644dd6e776 (patch) | |
| tree | 4c319e6d4d214dda8155c7ab09394ab5b2ad6e7f /sys/dev | |
| parent | 4e37bb5a9cab57b8837aa7fe4b54920a423b35d0 (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.c | 39 | ||||
| -rw-r--r-- | sys/dev/ic/ne2000var.h | 7 | ||||
| -rw-r--r-- | sys/dev/pcmcia/if_ne_pcmcia.c | 14 |
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; |
