Module Name: src Committed By: tsutsui Date: Tue Sep 22 13:31:26 UTC 2009
Modified Files: src/sys/dev/ic: cs89x0.c cs89x0var.h Log Message: - replace shutdownhook_establish(9) with pmf_device_register1(9) - remove powerhook_establish(9) because all stuff in cs_power() will be handled in pmf_class_network Briefly tested on CS8900 at ofisa on DNARD compatible. To generate a diff of this commit: cvs rdiff -u -r1.24 -r1.25 src/sys/dev/ic/cs89x0.c cvs rdiff -u -r1.12 -r1.13 src/sys/dev/ic/cs89x0var.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/ic/cs89x0.c diff -u src/sys/dev/ic/cs89x0.c:1.24 src/sys/dev/ic/cs89x0.c:1.25 --- src/sys/dev/ic/cs89x0.c:1.24 Tue May 12 14:25:17 2009 +++ src/sys/dev/ic/cs89x0.c Tue Sep 22 13:31:26 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: cs89x0.c,v 1.24 2009/05/12 14:25:17 cegger Exp $ */ +/* $NetBSD: cs89x0.c,v 1.25 2009/09/22 13:31:26 tsutsui Exp $ */ /* * Copyright (c) 2004 Christopher Gilbert @@ -212,7 +212,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: cs89x0.c,v 1.24 2009/05/12 14:25:17 cegger Exp $"); +__KERNEL_RCSID(0, "$NetBSD: cs89x0.c,v 1.25 2009/09/22 13:31:26 tsutsui Exp $"); #include "opt_inet.h" @@ -269,7 +269,7 @@ int cs_get_params(struct cs_softc *); int cs_get_enaddr(struct cs_softc *); int cs_reset_chip(struct cs_softc *); -void cs_reset(void *); +void cs_reset(struct cs_softc *); int cs_ioctl(struct ifnet *, u_long, void *); void cs_initChip(struct cs_softc *); void cs_buffer_event(struct cs_softc *, u_int16_t); @@ -286,10 +286,10 @@ int cs_mediachange(struct ifnet *); void cs_mediastatus(struct ifnet *, struct ifmediareq *); +static bool cs_shutdown(device_t, int); static int cs_enable(struct cs_softc *); static void cs_disable(struct cs_softc *); static void cs_stop(struct ifnet *, int); -static void cs_power(int, void *); static int cs_scan_eeprom(struct cs_softc *); static int cs_read_pktpg_from_eeprom(struct cs_softc *, int, u_int16_t *); @@ -489,13 +489,6 @@ if (sc->sc_dma_attach) (*sc->sc_dma_attach)(sc); - sc->sc_sh = shutdownhook_establish(cs_reset, sc); - if (sc->sc_sh == NULL) { - aprint_error_dev(&sc->sc_dev, "unable to establish shutdownhook\n"); - cs_detach(sc); - return 1; - } - /* Attach the interface. */ if_attach(ifp); ether_ifattach(ifp, sc->sc_enaddr); @@ -506,6 +499,12 @@ #endif sc->sc_cfgflags |= CFGFLG_ATTACHED; + if (pmf_device_register1(&sc->sc_dev, NULL, NULL, cs_shutdown)) + pmf_class_network_register(&sc->sc_dev, ifp); + else + aprint_error_dev(&sc->sc_dev, + "couldn't establish power handler\n"); + /* Reset the chip */ if (cs_reset_chip(sc) == CS_ERROR) { aprint_error_dev(&sc->sc_dev, "reset failed\n"); @@ -513,11 +512,6 @@ return 1; } - sc->sc_powerhook = powerhook_establish(device_xname(&sc->sc_dev), - cs_power, sc); - if (sc->sc_powerhook == 0) - aprint_error_dev(&sc->sc_dev, "warning: powerhook_establish failed\n"); - return 0; } @@ -526,11 +520,6 @@ { struct ifnet *ifp = &sc->sc_ethercom.ec_if; - if (sc->sc_powerhook) { - powerhook_disestablish(sc->sc_powerhook); - sc->sc_powerhook = 0; - } - if (sc->sc_cfgflags & CFGFLG_ATTACHED) { #if NRND > 0 rnd_detach_source(&sc->rnd_source); @@ -540,9 +529,6 @@ sc->sc_cfgflags &= ~CFGFLG_ATTACHED; } - if (sc->sc_sh != NULL) - shutdownhook_disestablish(sc->sc_sh); - #if 0 /* * XXX not necessary @@ -555,9 +541,22 @@ } #endif + pmf_device_deregister(&sc->sc_dev); + return 0; } +bool +cs_shutdown(device_t self, int howto) +{ + struct cs_softc *sc; + + sc = device_private(self); + cs_reset(sc); + + return true; +} + void cs_get_default_media(struct cs_softc *sc) { @@ -1297,9 +1296,8 @@ } void -cs_reset(void *arg) +cs_reset(struct cs_softc *sc) { - struct cs_softc *sc = arg; /* Mark the interface as down */ sc->sc_ethercom.ec_if.if_flags &= ~IFF_RUNNING; @@ -2193,29 +2191,3 @@ return error; } - -static void -cs_power(int why, void *arg) -{ - struct cs_softc *sc = arg; - struct ifnet *ifp = &sc->sc_ethercom.ec_if; - int s; - - s = splnet(); - switch (why) { - case PWR_STANDBY: - case PWR_SUSPEND: - cs_stop(ifp, 0); - break; - case PWR_RESUME: - if (ifp->if_flags & IFF_UP) { - cs_init(ifp); - } - break; - case PWR_SOFTSUSPEND: - case PWR_SOFTSTANDBY: - case PWR_SOFTRESUME: - break; - } - splx(s); -} Index: src/sys/dev/ic/cs89x0var.h diff -u src/sys/dev/ic/cs89x0var.h:1.12 src/sys/dev/ic/cs89x0var.h:1.13 --- src/sys/dev/ic/cs89x0var.h:1.12 Tue May 12 14:25:17 2009 +++ src/sys/dev/ic/cs89x0var.h Tue Sep 22 13:31:26 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: cs89x0var.h,v 1.12 2009/05/12 14:25:17 cegger Exp $ */ +/* $NetBSD: cs89x0var.h,v 1.13 2009/09/22 13:31:26 tsutsui Exp $ */ /* * Copyright 1997 @@ -71,7 +71,6 @@ struct ifmedia sc_media; /* media control structures */ void *sc_ih; /* interrupt handler */ - void *sc_sh; /* shutdown hook */ bus_space_tag_t sc_iot; /* bus space tag for IO */ bus_space_tag_t sc_memt; /* bus space tag for memory mode */ @@ -112,7 +111,6 @@ /* power management */ int (*sc_enable)(struct cs_softc *); void (*sc_disable)(struct cs_softc *); - void *sc_powerhook; /* DMA hooks */ void (*sc_dma_process_rx)(struct cs_softc *);