Add suspend/resume support for the bfe driver
John Baldwin
jhb at freebsd.org
Mon Nov 20 18:43:11 UTC 2006
On Friday 17 November 2006 22:42, Stepan Zastupov wrote:
> On Fri, Nov 17, 2006 at 02:12:34PM -0500, John Baldwin wrote:
> > Usually drivers don't detach on suspend. How about this patch instead:
> >
> > Index: if_bfe.c
> > ===================================================================
> > RCS file: /usr/cvs/src/sys/dev/bfe/if_bfe.c,v
> > retrieving revision 1.40
> > diff -u -r1.40 if_bfe.c
> > --- if_bfe.c 28 May 2006 20:35:39 -0000 1.40
> > +++ if_bfe.c 17 Nov 2006 19:11:47 -0000
> > @@ -87,6 +87,8 @@
> > static int bfe_probe (device_t);
> > static int bfe_attach (device_t);
> > static int bfe_detach (device_t);
> > +static int bfe_suspend (device_t);
> > +static int bfe_resume (device_t);
> > static void bfe_release_resources (struct bfe_softc *);
> > static void bfe_intr (void *);
> > static void bfe_start (struct ifnet *);
> > @@ -136,6 +138,8 @@
> > DEVMETHOD(device_attach, bfe_attach),
> > DEVMETHOD(device_detach, bfe_detach),
> > DEVMETHOD(device_shutdown, bfe_shutdown),
> > + DEVMETHOD(device_suspend, bfe_suspend),
> > + DEVMETHOD(device_resume, bfe_resume),
> >
> > /* bus interface */
> > DEVMETHOD(bus_print_child, bus_generic_print_child),
> > @@ -480,6 +484,39 @@
> > }
> >
> > static int
> > +bfe_suspend(device_t dev)
> > +{
> > + struct bfe_softc *sc;
> > +
> > + sc = device_get_softc(dev);
> > + BFE_LOCK(sc);
> > + bfe_stop(sc);
> > + BFE_UNLOCK(sc);
> > +
> > + return (0);
> > +}
> > +
> > +static int
> > +bfe_resume(device_t dev)
> > +{
> > + struct bfe_softc *sc;
> > + struct ifnet *ifp;
> > +
> > + sc = device_get_softc(dev);
> > + ifp = sc->bfe_ifp;
> > + BFE_LOCK(sc);
> > + if (ifp->if_flags & IFF_UP) {
> > + bfe_init_locked(sc);
> > + if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
> > + !IFQ_DRV_IS_EMPTY(&ifp->if_snd))
> > + bfe_start_locked(ifp);
> > + }
> > + BFE_UNLOCK(sc);
> > +
> > + return (0);
> > +}
> > +
> > +static int
> > bfe_miibus_readreg(device_t dev, int phy, int reg)
> > {
> > struct bfe_softc *sc;
> >
> > --
> > John Baldwin
> No, system don't want to resume with it. I've tried the same variant
> before I looked into the Linux kernel.
How does it not work? If you do 'ifconfig bfe0 down ; ifconfig bfe0 up' after
resume with the above patch does it then start working?
--
John Baldwin
More information about the freebsd-acpi
mailing list