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 *);

Reply via email to