Index: ld.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ld.c,v
retrieving revision 1.46
diff -u -r1.46 ld.c
--- ld.c	4 Mar 2007 06:01:42 -0000	1.46
+++ ld.c	17 Mar 2007 01:33:35 -0000
@@ -75,7 +75,7 @@
 static void	ldgetdefaultlabel(struct ld_softc *, struct disklabel *);
 static void	ldgetdisklabel(struct ld_softc *);
 static void	ldminphys(struct buf *bp);
-static void	ldshutdown(void *);
+static void	ldshutdown(int, void *);
 static void	ldstart(struct ld_softc *, struct buf *);
 static void	ld_set_properties(struct ld_softc *);
 static void	ld_config_interrupts (struct device *);
@@ -265,7 +265,7 @@
 
 /* ARGSUSED */
 static void
-ldshutdown(void *cookie)
+ldshutdown(int why, void *cookie)
 {
 	struct ld_softc *sc;
 	int i;
Index: acpi/acpi.c
===================================================================
RCS file: /cvsroot/src/sys/dev/acpi/acpi.c,v
retrieving revision 1.101
diff -u -r1.101 acpi.c
--- acpi/acpi.c	19 Feb 2007 22:31:05 -0000	1.101
+++ acpi/acpi.c	17 Mar 2007 01:33:35 -0000
@@ -166,7 +166,7 @@
 /*
  * Prototypes.
  */
-static void		acpi_shutdown(void *);
+static void		acpi_shutdown(int, void *);
 static void		acpi_build_tree(struct acpi_softc *);
 static ACPI_STATUS	acpi_make_devnode(ACPI_HANDLE, UINT32, void *, void **);
 
@@ -423,7 +423,7 @@
  *	might confuse us.
  */
 static void
-acpi_shutdown(void *arg)
+acpi_shutdown(int why, void *arg)
 {
 	/* nothing */
 }
Index: ata/wd.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ata/wd.c,v
retrieving revision 1.337
diff -u -r1.337 wd.c
--- ata/wd.c	4 Mar 2007 06:01:44 -0000	1.337
+++ ata/wd.c	17 Mar 2007 01:33:37 -0000
@@ -91,6 +91,7 @@
 #include <sys/syslog.h>
 #include <sys/proc.h>
 #include <sys/vnode.h>
+#include <sys/reboot.h>
 #if NRND > 0
 #include <sys/rnd.h>
 #endif
@@ -193,7 +194,7 @@
 int   wd_get_params(struct wd_softc *, u_int8_t, struct ataparams *);
 int   wd_standby(struct wd_softc *, int);
 int   wd_flushcache(struct wd_softc *, int);
-void  wd_shutdown(void *);
+void  wd_shutdown(int, void *);
 
 int   wd_getcache(struct wd_softc *, int *);
 int   wd_setcache(struct wd_softc *, int);
@@ -1907,10 +1908,12 @@
 }
 
 void
-wd_shutdown(void *arg)
+wd_shutdown(int why, void *arg)
 {
 	struct wd_softc *wd = arg;
 	wd_flushcache(wd, AT_POLL);
+	if (why & RB_POWERDOWN)
+		wd_standby(wd, AT_POLL);
 }
 
 /*
Index: bi/if_ni.c
===================================================================
RCS file: /cvsroot/src/sys/dev/bi/if_ni.c,v
retrieving revision 1.30
diff -u -r1.30 if_ni.c
--- bi/if_ni.c	8 Mar 2007 23:17:56 -0000	1.30
+++ bi/if_ni.c	17 Mar 2007 01:33:37 -0000
@@ -149,7 +149,7 @@
 static	int	ni_add_rxbuf(struct ni_softc *, struct ni_dg *, int);
 static	void	ni_setup(struct ni_softc *);
 static	void	nitimeout(struct ifnet *);
-static	void	ni_shutdown(void *);
+static	void	ni_shutdown(int, void *);
 static	void ni_getpgs(struct ni_softc *sc, int size, void **v, paddr_t *p);
 static	int failtest(struct ni_softc *, int, int, int, const char *);
 
@@ -891,7 +891,8 @@
  * Shutdown hook.  Make sure the interface is stopped at reboot.
  */
 void
-ni_shutdown(arg)
+ni_shutdown(why, arg)
+	int why;
 	void *arg;
 {
 	struct ni_softc *sc = arg;
Index: cardbus/if_ath_cardbus.c
===================================================================
RCS file: /cvsroot/src/sys/dev/cardbus/if_ath_cardbus.c,v
retrieving revision 1.18
diff -u -r1.18 if_ath_cardbus.c
--- cardbus/if_ath_cardbus.c	16 Nov 2006 01:32:48 -0000	1.18
+++ cardbus/if_ath_cardbus.c	17 Mar 2007 01:33:37 -0000
@@ -248,7 +248,7 @@
 }
 
 void
-ath_cardbus_shutdown(void *arg)
+ath_cardbus_shutdown(int why, void *arg)
 {
 	struct ath_cardbus_softc *csc;
 
Index: eisa/if_fea.c
===================================================================
RCS file: /cvsroot/src/sys/dev/eisa/if_fea.c,v
retrieving revision 1.34
diff -u -r1.34 if_fea.c
--- eisa/if_fea.c	4 Mar 2007 06:01:46 -0000	1.34
+++ eisa/if_fea.c	17 Mar 2007 01:33:37 -0000
@@ -442,6 +442,16 @@
 #endif /* __bsdi__ */
 
 #if defined(__NetBSD__)
+
+static void pdq_eisa_shutdown(int, void *); /* prototype */
+
+static void
+pdq_eisa_shutdown(int why,
+		  void *arg)
+{
+    pdq_hwreset(arg);
+}
+
 static int
 pdq_eisa_match(
     struct device *parent,
@@ -519,7 +529,7 @@
 	printf("\n");
 	return;
     }
-    sc->sc_ats = shutdownhook_establish((void (*)(void *)) pdq_hwreset, sc->sc_pdq);
+    sc->sc_ats = shutdownhook_establish(pdq_eisa_shutdown, sc->sc_pdq);
     if (sc->sc_ats == NULL)
 	printf("%s: warning: couldn't establish shutdown hook\n", self->dv_xname);
     if (sc->sc_csrtag != sc->sc_iotag)
Index: i2o/iop.c
===================================================================
RCS file: /cvsroot/src/sys/dev/i2o/iop.c,v
retrieving revision 1.64
diff -u -r1.64 iop.c
--- i2o/iop.c	4 Mar 2007 06:01:47 -0000	1.64
+++ i2o/iop.c	17 Mar 2007 01:33:38 -0000
@@ -228,7 +228,7 @@
 static void	iop_configure_devices(struct iop_softc *, int, int);
 static void	iop_devinfo(int, char *, size_t);
 static int	iop_print(void *, const char *);
-static void	iop_shutdown(void *);
+static void	iop_shutdown(int, void *);
 
 static void	iop_adjqparam(struct iop_softc *, int);
 static void	iop_create_reconf_thread(void *);
@@ -905,7 +905,7 @@
  * Shut down all configured IOPs.
  */
 static void
-iop_shutdown(void *junk)
+iop_shutdown(int why, void *junk)
 {
 	struct iop_softc *sc;
 	int i;
Index: ic/aac.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/aac.c,v
retrieving revision 1.30
diff -u -r1.30 aac.c
--- ic/aac.c	4 Mar 2007 06:01:48 -0000	1.30
+++ ic/aac.c	17 Mar 2007 01:33:38 -0000
@@ -105,7 +105,7 @@
 static void	aac_host_response(struct aac_softc *);
 static int	aac_init(struct aac_softc *);
 static int	aac_print(void *, const char *);
-static void	aac_shutdown(void *);
+static void	aac_shutdown(int, void *);
 static void	aac_startup(struct aac_softc *);
 static int	aac_sync_command(struct aac_softc *, u_int32_t, u_int32_t,
 				 u_int32_t, u_int32_t, u_int32_t, u_int32_t *);
@@ -693,7 +693,7 @@
 }
 
 static void
-aac_shutdown(void *cookie)
+aac_shutdown(int why, void *cookie)
 {
 	struct aac_softc *sc;
 	struct aac_close_command cc;
Index: ic/aic6915.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/aic6915.c,v
retrieving revision 1.16
diff -u -r1.16 aic6915.c
--- ic/aic6915.c	4 Mar 2007 06:01:48 -0000	1.16
+++ ic/aic6915.c	17 Mar 2007 01:33:39 -0000
@@ -82,7 +82,7 @@
 static int	sf_init(struct ifnet *);
 static void	sf_stop(struct ifnet *, int);
 
-static void	sf_shutdown(void *);
+static void	sf_shutdown(int, void *);
 
 static void	sf_txintr(struct sf_softc *);
 static void	sf_rxintr(struct sf_softc *);
@@ -340,7 +340,7 @@
  *	Shutdown hook -- make sure the interface is stopped at reboot.
  */
 static void
-sf_shutdown(void *arg)
+sf_shutdown(int why, void *arg)
 {
 	struct sf_softc *sc = arg;
 
Index: ic/aic79xx.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/aic79xx.c,v
retrieving revision 1.37
diff -u -r1.37 aic79xx.c
--- ic/aic79xx.c	4 Mar 2007 06:01:48 -0000	1.37
+++ ic/aic79xx.c	17 Mar 2007 01:33:41 -0000
@@ -5165,7 +5165,7 @@
 	switch (ahd->init_level) {
 	default:
 	case 2:
-		ahd_shutdown(ahd);
+		ahd_shutdown(RB_USERCONF, ahd);
 		TAILQ_REMOVE(&ahd_tailq, ahd, links);
 		/* FALLTHROUGH */
 	case 1:
@@ -5220,7 +5220,7 @@
 }
 
 void
-ahd_shutdown(void *arg)
+ahd_shutdown(int why, void *arg)
 {
 	struct	ahd_softc *ahd;
 
@@ -6880,7 +6880,7 @@
 		ahd_unpause(ahd);
 		return (EBUSY);
 	}
-	ahd_shutdown(ahd);
+	ahd_shutdown(RB_USERCONF, ahd);
 	return (0);
 }
 
Index: ic/aic79xxvar.h
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/aic79xxvar.h,v
retrieving revision 1.22
diff -u -r1.22 aic79xxvar.h
--- ic/aic79xxvar.h	16 Feb 2006 20:17:16 -0000	1.22
+++ ic/aic79xxvar.h	17 Mar 2007 01:33:42 -0000
@@ -1384,7 +1384,7 @@
 int			 ahd_alloc_scbs(struct ahd_softc *);
 void			 ahd_free(struct ahd_softc *);
 int			 ahd_reset(struct ahd_softc *, int);
-void			 ahd_shutdown(void *);
+void			 ahd_shutdown(int, void *);
 int			 ahd_write_flexport(struct ahd_softc *,
 					    u_int, u_int);
 int			 ahd_read_flexport(struct ahd_softc *, u_int,
Index: ic/aic7xxx.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/aic7xxx.c,v
retrieving revision 1.124
diff -u -r1.124 aic7xxx.c
--- ic/aic7xxx.c	4 Mar 2007 06:01:48 -0000	1.124
+++ ic/aic7xxx.c	17 Mar 2007 01:33:44 -0000
@@ -417,7 +417,7 @@
 		       CAM_NO_HBA);
 
 	/* Disable all interrupt sources by resetting the controller */
-	ahc_shutdown(ahc);
+	ahc_shutdown(RB_USERCONF, ahc);
 }
 
 void
@@ -3916,7 +3916,7 @@
 	switch (ahc->init_level) {
 	default:
 	case 2:
-		ahc_shutdown(ahc);
+		ahc_shutdown(RB_USERCONF, ahc);
 		/* TAILQ_REMOVE(&ahc_tailq, ahc, links); XXX */
 		/* FALLTHROUGH */
 	case 1:
@@ -3970,7 +3970,7 @@
 }
 
 void
-ahc_shutdown(void *arg)
+ahc_shutdown(int why, void *arg)
 {
 	struct	ahc_softc *ahc;
 	int	i;
@@ -5032,7 +5032,7 @@
 			}
 		}
 	}
-	ahc_shutdown(ahc);
+	ahc_shutdown(RB_USERCONF, ahc);
 	return (0);
 }
 
Index: ic/aic7xxxvar.h
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/aic7xxxvar.h,v
retrieving revision 1.53
diff -u -r1.53 aic7xxxvar.h
--- ic/aic7xxxvar.h	11 May 2006 01:02:15 -0000	1.53
+++ ic/aic7xxxvar.h	17 Mar 2007 01:33:44 -0000
@@ -1286,7 +1286,7 @@
 int			 ahc_alloc_scbs(struct ahc_softc *);
 void			 ahc_free(struct ahc_softc *);
 int			 ahc_reset(struct ahc_softc *);
-void			 ahc_shutdown(void *);
+void			 ahc_shutdown(int, void *);
 
 /*************************** Interrupt Services *******************************/
 void			ahc_clear_intstat(struct ahc_softc *);
Index: ic/ath.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/ath.c,v
retrieving revision 1.82
diff -u -r1.82 ath.c
--- ic/ath.c	4 Mar 2007 06:01:49 -0000	1.82
+++ ic/ath.c	17 Mar 2007 01:33:45 -0000
@@ -776,7 +776,7 @@
 }
 
 void
-ath_shutdown(void *arg)
+ath_shutdown(int howto, void *arg)
 {
 	struct ath_softc *sc = arg;
 
Index: ic/athvar.h
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/athvar.h,v
retrieving revision 1.20
diff -u -r1.20 athvar.h
--- ic/athvar.h	4 Mar 2007 06:01:50 -0000	1.20
+++ ic/athvar.h	17 Mar 2007 01:33:46 -0000
@@ -308,7 +308,7 @@
 void	ath_suspend(struct ath_softc *, int);
 int	ath_activate(struct device *, enum devact);
 void	ath_power(int, void *);
-void	ath_shutdown(void *);
+void	ath_shutdown(int, void *);
 int	ath_intr(void *);
 int	ath_reset(struct ifnet *);
 void	ath_sysctlattach(struct ath_softc *);
Index: ic/atw.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/atw.c,v
retrieving revision 1.126
diff -u -r1.126 atw.c
--- ic/atw.c	4 Mar 2007 06:01:50 -0000	1.126
+++ ic/atw.c	17 Mar 2007 01:33:47 -0000
@@ -213,7 +213,7 @@
 int	atw_enable(struct atw_softc *);
 void	atw_power(int, void *);
 void	atw_reset(struct atw_softc *);
-void	atw_shutdown(void *);
+void	atw_shutdown(int, void *);
 
 /* Interrupt handlers */
 void	atw_linkintr(struct atw_softc *, u_int32_t);
@@ -2779,7 +2779,7 @@
 
 /* atw_shutdown: make sure the interface is stopped at reboot time. */
 void
-atw_shutdown(void *arg)
+atw_shutdown(int why, void *arg)
 {
 	struct atw_softc *sc = arg;
 
Index: ic/atwvar.h
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/atwvar.h,v
retrieving revision 1.23
diff -u -r1.23 atwvar.h
--- ic/atwvar.h	4 Mar 2007 06:01:50 -0000	1.23
+++ ic/atwvar.h	17 Mar 2007 01:33:47 -0000
@@ -454,6 +454,6 @@
 int	atw_activate(struct device *, enum devact);
 int	atw_intr(void *arg);
 void	atw_power(int, void *);
-void	atw_shutdown(void *);
+void	atw_shutdown(int, void *);
 
 #endif /* _DEV_IC_ATWVAR_H_ */
Index: ic/awi.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/awi.c,v
retrieving revision 1.74
diff -u -r1.74 awi.c
--- ic/awi.c	4 Mar 2007 06:01:51 -0000	1.74
+++ ic/awi.c	17 Mar 2007 01:33:48 -0000
@@ -451,7 +451,7 @@
 #endif /* __NetBSD__ */
 
 void
-awi_shutdown(void *arg)
+awi_shutdown(int why, void *arg)
 {
 	struct awi_softc *sc = arg;
 	struct ifnet *ifp = &sc->sc_if;
Index: ic/awivar.h
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/awivar.h,v
retrieving revision 1.22
diff -u -r1.22 awivar.h
--- ic/awivar.h	11 Dec 2005 12:21:26 -0000	1.22
+++ ic/awivar.h	17 Mar 2007 01:33:48 -0000
@@ -156,7 +156,7 @@
 int	awi_activate(struct device *, enum devact);
 void	awi_power(int, void *);
 #endif
-void	awi_shutdown(void *);
+void	awi_shutdown(int, void *);
 int	awi_intr(void *);
 
 #endif /* _DEV_IC_AWIVAR_H */
Index: ic/cac.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/cac.c,v
retrieving revision 1.40
diff -u -r1.40 cac.c
--- ic/cac.c	4 Mar 2007 06:01:51 -0000	1.40
+++ ic/cac.c	17 Mar 2007 01:33:48 -0000
@@ -70,7 +70,7 @@
 static int	cac_ccb_poll(struct cac_softc *, struct cac_ccb *, int);
 static int	cac_ccb_start(struct cac_softc *, struct cac_ccb *);
 static int	cac_print(void *, const char *);
-static void	cac_shutdown(void *);
+static void	cac_shutdown(int, void *);
 
 static struct	cac_ccb *cac_l0_completed(struct cac_softc *);
 static int	cac_l0_fifo_full(struct cac_softc *);
@@ -210,7 +210,7 @@
  * Shut down all `cac' controllers.
  */
 static void
-cac_shutdown(void *cookie)
+cac_shutdown(int why, void *cookie)
 {
 	extern struct cfdriver cac_cd;
 	struct cac_softc *sc;
Index: ic/ciss.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/ciss.c,v
retrieving revision 1.7
diff -u -r1.7 ciss.c
--- ic/ciss.c	4 Mar 2007 06:01:53 -0000	1.7
+++ ic/ciss.c	17 Mar 2007 01:33:48 -0000
@@ -80,7 +80,7 @@
 #endif
 static int	ciss_sync(struct ciss_softc *sc);
 static void	ciss_heartbeat(void *v);
-static void	ciss_shutdown(void *v);
+static void	ciss_shutdown(int why, void *v);
 #if 0
 static void	ciss_kthread(void *v);
 #endif
@@ -382,7 +382,7 @@
 }
 
 static void
-ciss_shutdown(void *v)
+ciss_shutdown(int why, void *v)
 {
 	struct ciss_softc *sc = v;
 
Index: ic/com.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/com.c,v
retrieving revision 1.259
diff -u -r1.259 com.c
--- ic/com.c	4 Mar 2007 06:01:53 -0000	1.259
+++ ic/com.c	17 Mar 2007 01:33:48 -0000
@@ -2589,7 +2589,7 @@
  * FIFO mode.
  */
 void
-com_cleanup(void *arg)
+com_cleanup(int why, void *arg)
 {
 	struct com_softc *sc = arg;
 
Index: ic/comvar.h
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/comvar.h,v
retrieving revision 1.54
diff -u -r1.54 comvar.h
--- ic/comvar.h	13 Jul 2006 22:56:02 -0000	1.54
+++ ic/comvar.h	17 Mar 2007 01:33:48 -0000
@@ -230,7 +230,7 @@
 int com_probe_subr(struct com_regs *);
 int com_detach(struct device *, int);
 int com_activate(struct device *, enum devact);
-void com_cleanup(void *);
+void com_cleanup(int, void *);
 
 #ifndef __HAVE_GENERIC_SOFT_INTERRUPTS
 #ifdef __NO_SOFT_SERIAL_INTERRUPT
Index: ic/cs89x0.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/cs89x0.c,v
retrieving revision 1.21
diff -u -r1.21 cs89x0.c
--- ic/cs89x0.c	4 Mar 2007 06:01:53 -0000	1.21
+++ ic/cs89x0.c	17 Mar 2007 01:33:49 -0000
@@ -269,6 +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_shutdown(int, void *);
 void	cs_reset(void *);
 int	cs_ioctl(struct ifnet *, u_long, void *);
 void	cs_initChip(struct cs_softc *);
@@ -492,7 +493,7 @@
 	if (sc->sc_dma_attach)
 		(*sc->sc_dma_attach)(sc);
 
-	sc->sc_sh = shutdownhook_establish(cs_reset, sc);
+	sc->sc_sh = shutdownhook_establish(cs_shutdown, sc);
 	if (sc->sc_sh == NULL) {
 		printf("%s: unable to establish shutdownhook\n",
 		    sc->sc_dev.dv_xname);
@@ -1312,6 +1313,12 @@
 }
 
 void
+cs_shutdown(int why, void *arg)
+{
+	cs_reset(arg);
+}
+
+void
 cs_reset(void *arg)
 {
 	struct cs_softc *sc = arg;
Index: ic/dp83932.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/dp83932.c,v
retrieving revision 1.14
diff -u -r1.14 dp83932.c
--- ic/dp83932.c	4 Mar 2007 06:01:54 -0000	1.14
+++ ic/dp83932.c	17 Mar 2007 01:33:49 -0000
@@ -78,7 +78,7 @@
 int	sonic_init(struct ifnet *);
 void	sonic_stop(struct ifnet *, int);
 
-void	sonic_shutdown(void *);
+void	sonic_shutdown(int, void *);
 
 void	sonic_reset(struct sonic_softc *);
 void	sonic_rxdrain(struct sonic_softc *);
@@ -262,7 +262,7 @@
  *	Make sure the interface is stopped at reboot.
  */
 void
-sonic_shutdown(void *arg)
+sonic_shutdown(int why, void *arg)
 {
 	struct sonic_softc *sc = arg;
 
Index: ic/dpt.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/dpt.c,v
retrieving revision 1.56
diff -u -r1.56 dpt.c
--- ic/dpt.c	4 Mar 2007 06:01:54 -0000	1.56
+++ ic/dpt.c	17 Mar 2007 01:33:50 -0000
@@ -201,7 +201,7 @@
 				struct lwp *);
 static void	dpt_scsipi_request(struct scsipi_channel *,
 				   scsipi_adapter_req_t, void *);
-static void	dpt_shutdown(void *);
+static void	dpt_shutdown(int, void *);
 static void	dpt_sysinfo(struct dpt_softc *, struct dpt_sysinfo *);
 static int	dpt_wait(struct dpt_softc *, u_int8_t, u_int8_t, int);
 
@@ -614,7 +614,7 @@
  * we tell root that it's safe to power off).
  */
 static void
-dpt_shutdown(void *cookie)
+dpt_shutdown(int why, void *cookie)
 {
 	extern struct cfdriver dpt_cd;
 	struct dpt_softc *sc;
Index: ic/elink3.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/elink3.c,v
retrieving revision 1.121
diff -u -r1.121 elink3.c
--- ic/elink3.c	4 Mar 2007 06:01:54 -0000	1.121
+++ ic/elink3.c	17 Mar 2007 01:33:50 -0000
@@ -199,7 +199,7 @@
 void	epstart(struct ifnet *);
 void	epwatchdog(struct ifnet *);
 void	epreset(struct ep_softc *);
-static void epshutdown(void *);
+static void epshutdown(int, void *);
 void	epread(struct ep_softc *);
 struct mbuf *epget(struct ep_softc *, int);
 void	epmbuffill(void *);
@@ -1844,7 +1844,8 @@
  * Before reboots, reset card completely.
  */
 static void
-epshutdown(arg)
+epshutdown(why, arg)
+	int why;
 	void *arg;
 {
 	struct ep_softc *sc = arg;
Index: ic/elinkxl.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/elinkxl.c,v
retrieving revision 1.96
diff -u -r1.96 elinkxl.c
--- ic/elinkxl.c	4 Mar 2007 06:01:54 -0000	1.96
+++ ic/elinkxl.c	17 Mar 2007 01:33:50 -0000
@@ -112,7 +112,7 @@
 static void ex_init_txdescs(struct ex_softc *);
 
 static void ex_setup_tx(struct ex_softc *);
-static void ex_shutdown(void *);
+static void ex_shutdown(int, void *);
 static void ex_start(struct ifnet *);
 static void ex_txstat(struct ex_softc *);
 
@@ -1806,7 +1806,8 @@
  * Before reboots, reset card completely.
  */
 static void
-ex_shutdown(arg)
+ex_shutdown(howto, arg)
+	int howto;
 	void *arg;
 {
 	struct ex_softc *sc = arg;
Index: ic/gem.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/gem.c,v
retrieving revision 1.54
diff -u -r1.54 gem.c
--- ic/gem.c	4 Mar 2007 07:54:11 -0000	1.54
+++ ic/gem.c	17 Mar 2007 01:33:51 -0000
@@ -90,7 +90,7 @@
 int		gem_ioctl(struct ifnet *, u_long, void *);
 void		gem_tick(void *);
 void		gem_watchdog(struct ifnet *);
-void		gem_shutdown(void *);
+void		gem_shutdown(int, void *);
 int		gem_init(struct ifnet *);
 void		gem_init_regs(struct gem_softc *sc);
 static int	gem_ringsize(int sz);
@@ -2081,7 +2081,8 @@
 
 
 void
-gem_shutdown(arg)
+gem_shutdown(why, arg)
+	int why;
 	void *arg;
 {
 	struct gem_softc *sc = (struct gem_softc *)arg;
Index: ic/hme.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/hme.c,v
retrieving revision 1.56
diff -u -r1.56 hme.c
--- ic/hme.c	4 Mar 2007 06:01:55 -0000	1.56
+++ ic/hme.c	17 Mar 2007 01:33:51 -0000
@@ -97,7 +97,7 @@
 int		hme_ioctl(struct ifnet *, u_long, void *);
 void		hme_tick(void *);
 void		hme_watchdog(struct ifnet *);
-void		hme_shutdown(void *);
+void		hme_shutdown(int, void *);
 void		hme_init(struct hme_softc *);
 void		hme_meminit(struct hme_softc *);
 void		hme_mifinit(struct hme_softc *);
@@ -1527,7 +1527,8 @@
 }
 
 void
-hme_shutdown(arg)
+hme_shutdown(why, arg)
+	int why;
 	void *arg;
 {
 
Index: ic/i82557.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/i82557.c,v
retrieving revision 1.101
diff -u -r1.101 i82557.c
--- ic/i82557.c	4 Mar 2007 06:01:55 -0000	1.101
+++ ic/i82557.c	17 Mar 2007 01:33:52 -0000
@@ -207,7 +207,7 @@
 void	fxp_mc_setup(struct fxp_softc *);
 void	fxp_load_ucode(struct fxp_softc *);
 
-void	fxp_shutdown(void *);
+void	fxp_shutdown(int, void *);
 void	fxp_power(int, void *);
 
 int	fxp_copy_small = 0;
@@ -541,7 +541,7 @@
  * kernel memory doesn't get clobbered during warmboot.
  */
 void
-fxp_shutdown(void *arg)
+fxp_shutdown(int why, void *arg)
 {
 	struct fxp_softc *sc = arg;
 
Index: ic/lance.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/lance.c,v
retrieving revision 1.38
diff -u -r1.38 lance.c
--- ic/lance.c	4 Mar 2007 06:01:57 -0000	1.38
+++ ic/lance.c	17 Mar 2007 01:33:52 -0000
@@ -118,7 +118,7 @@
 
 integrate struct mbuf *lance_get(struct lance_softc *, int, int);
 
-hide void lance_shutdown(void *);
+hide void lance_shutdown(int, void *);
 
 int lance_mediachange(struct ifnet *);
 void lance_mediastatus(struct ifnet *, struct ifmediareq *);
@@ -606,7 +606,8 @@
 }
 
 hide void
-lance_shutdown(arg)
+lance_shutdown(howto, arg)
+	int howto;
 	void *arg;
 {
 
Index: ic/lemac.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/lemac.c,v
retrieving revision 1.32
diff -u -r1.32 lemac.c
--- ic/lemac.c	4 Mar 2007 15:35:20 -0000	1.32
+++ ic/lemac.c	17 Mar 2007 01:33:52 -0000
@@ -977,7 +977,7 @@
 }
 
 void
-lemac_shutdown(
+lemac_shutdown(int howto,
     void *arg)
 {
     lemac_reset((lemac_softc_t *) arg);
Index: ic/lemacvar.h
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/lemacvar.h,v
retrieving revision 1.9
diff -u -r1.9 lemacvar.h
--- ic/lemacvar.h	11 Dec 2005 12:21:27 -0000	1.9
+++ ic/lemacvar.h	17 Mar 2007 01:33:52 -0000
@@ -138,6 +138,6 @@
     bus_addr_t *, bus_size_t *, int *);
 extern int lemac_port_check(const bus_space_tag_t, const bus_space_handle_t);
 extern int lemac_intr(void *);
-extern void lemac_shutdown(void *);
+extern void lemac_shutdown(int, void *);
 
 #endif /* _LEMACVAR_H */
Index: ic/mlx.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/mlx.c,v
retrieving revision 1.51
diff -u -r1.51 mlx.c
--- ic/mlx.c	4 Mar 2007 06:01:58 -0000	1.51
+++ ic/mlx.c	17 Mar 2007 01:33:53 -0000
@@ -133,7 +133,7 @@
 static void	mlx_periodic_thread(void *);
 static int	mlx_print(void *, const char *);
 static int	mlx_rebuild(struct mlx_softc *, int, int);
-static void	mlx_shutdown(void *);
+static void	mlx_shutdown(int, void *);
 static int	mlx_user_command(struct mlx_softc *, struct mlx_usercommand *);
 
 dev_type_open(mlxopen);
@@ -658,7 +658,7 @@
  * Shut down all configured `mlx' devices.
  */
 static void
-mlx_shutdown(void *cookie)
+mlx_shutdown(int why, void *cookie)
 {
 	struct mlx_softc *mlx;
 	int i;
Index: ic/mtd803.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/mtd803.c,v
retrieving revision 1.13
diff -u -r1.13 mtd803.c
--- ic/mtd803.c	4 Mar 2007 06:01:59 -0000	1.13
+++ ic/mtd803.c	17 Mar 2007 01:33:53 -0000
@@ -130,7 +130,7 @@
 
 int mtd_init(struct ifnet *);
 void mtd_reset(struct mtd_softc *);
-void mtd_shutdown(void *);
+void mtd_shutdown(int, void *);
 int mtd_init_desc(struct mtd_softc *);
 int mtd_put(struct mtd_softc *, int, struct mbuf *);
 struct mbuf *mtd_get(struct mtd_softc *, int, int);
@@ -981,7 +981,8 @@
 
 
 void
-mtd_shutdown (arg)
+mtd_shutdown (why, arg)
+	int why;
 	void *arg;
 {
 	struct mtd_softc *sc = arg;
Index: ic/rtl8169.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/rtl8169.c,v
retrieving revision 1.83
diff -u -r1.83 rtl8169.c
--- ic/rtl8169.c	4 Mar 2007 06:02:00 -0000	1.83
+++ ic/rtl8169.c	17 Mar 2007 01:33:53 -0000
@@ -162,7 +162,7 @@
 static void re_stop(struct ifnet *, int);
 static void re_watchdog(struct ifnet *);
 
-static void re_shutdown(void *);
+static void re_shutdown(int, void *);
 static int re_enable(struct rtk_softc *);
 static void re_disable(struct rtk_softc *);
 static void re_power(int, void *);
@@ -1365,7 +1365,7 @@
  * get confused by errant DMAs when rebooting.
  */
 static void
-re_shutdown(void *vsc)
+re_shutdown(int why, void *vsc)
 
 {
 	struct rtk_softc	*sc = vsc;
Index: ic/rtl81x9.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/rtl81x9.c,v
retrieving revision 1.71
diff -u -r1.71 rtl81x9.c
--- ic/rtl81x9.c	4 Mar 2007 06:02:00 -0000	1.71
+++ ic/rtl81x9.c	17 Mar 2007 01:33:54 -0000
@@ -140,7 +140,7 @@
 STATIC void rtk_stop(struct ifnet *, int);
 
 STATIC void rtk_watchdog(struct ifnet *);
-STATIC void rtk_shutdown(void *);
+STATIC void rtk_shutdown(int, void *);
 STATIC int rtk_ifmedia_upd(struct ifnet *);
 STATIC void rtk_ifmedia_sts(struct ifnet *, struct ifmediareq *);
 
@@ -1623,7 +1623,7 @@
  * get confused by errant DMAs when rebooting.
  */
 STATIC void
-rtk_shutdown(void *arg)
+rtk_shutdown(int why, void *arg)
 {
 	struct rtk_softc *sc = (struct rtk_softc *)arg;
 
Index: ic/rtw.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/rtw.c,v
retrieving revision 1.85
diff -u -r1.85 rtw.c
--- ic/rtw.c	4 Mar 2007 06:02:00 -0000	1.85
+++ ic/rtw.c	17 Mar 2007 01:33:55 -0000
@@ -3738,7 +3738,7 @@
 
 /* rtw_shutdown: make sure the interface is stopped at reboot time. */
 void
-rtw_shutdown(void *arg)
+rtw_shutdown(int why, void *arg)
 {
 	struct rtw_softc *sc = arg;
 
Index: ic/rtwvar.h
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/rtwvar.h,v
retrieving revision 1.31
diff -u -r1.31 rtwvar.h
--- ic/rtwvar.h	4 Mar 2007 06:02:01 -0000	1.31
+++ ic/rtwvar.h	17 Mar 2007 01:33:55 -0000
@@ -505,7 +505,7 @@
 
 int rtw_activate(struct device *, enum devact);
 void rtw_power(int, void *);
-void rtw_shutdown(void *);
+void rtw_shutdown(int, void *);
 
 const char *rtw_pwrstate_string(enum rtw_pwrstate);
 
Index: ic/smc83c170.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/smc83c170.c,v
retrieving revision 1.64
diff -u -r1.64 smc83c170.c
--- ic/smc83c170.c	4 Mar 2007 06:02:01 -0000	1.64
+++ ic/smc83c170.c	17 Mar 2007 01:33:55 -0000
@@ -84,7 +84,7 @@
 int	epic_init(struct ifnet *);
 void	epic_stop(struct ifnet *, int);
 
-void	epic_shutdown(void *);
+void	epic_shutdown(int, void *);
 
 void	epic_reset(struct epic_softc *);
 void	epic_rxdrain(struct epic_softc *);
@@ -347,7 +347,8 @@
  * Shutdown hook.  Make sure the interface is stopped at reboot.
  */
 void
-epic_shutdown(arg)
+epic_shutdown(why, arg)
+	int why;
 	void *arg;
 {
 	struct epic_softc *sc = arg;
Index: ic/tropic.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/tropic.c,v
retrieving revision 1.30
diff -u -r1.30 tropic.c
--- ic/tropic.c	4 Mar 2007 06:02:02 -0000	1.30
+++ ic/tropic.c	17 Mar 2007 01:33:56 -0000
@@ -80,7 +80,7 @@
 #include <dev/ic/tropicreg.h>
 #include <dev/ic/tropicvar.h>
 
-static void tr_shutdown(void *);
+static void tr_shutdown(int, void *);
 static void tr_reopen(void *);
 
 void	tr_rint(struct tr_softc *);
@@ -578,7 +578,8 @@
 }
 
 static void
-tr_shutdown(arg)
+tr_shutdown(why, arg)
+	int why;
 	void *arg;
 {
 	struct tr_softc *sc = arg;
Index: ic/tulip.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/tulip.c,v
retrieving revision 1.149
diff -u -r1.149 tulip.c
--- ic/tulip.c	4 Mar 2007 06:02:02 -0000	1.149
+++ ic/tulip.c	17 Mar 2007 01:33:57 -0000
@@ -101,7 +101,7 @@
 static int	tlp_init(struct ifnet *);
 static void	tlp_stop(struct ifnet *, int);
 
-static void	tlp_shutdown(void *);
+static void	tlp_shutdown(int, void *);
 
 static void	tlp_rxdrain(struct tulip_softc *);
 static int	tlp_add_rxbuf(struct tulip_softc *, int);
@@ -691,7 +691,7 @@
  *	Make sure the interface is stopped at reboot time.
  */
 static void
-tlp_shutdown(void *arg)
+tlp_shutdown(int why, void *arg)
 {
 	struct tulip_softc *sc = arg;
 
Index: ieee1394/fw_port.h
===================================================================
RCS file: /cvsroot/src/sys/dev/ieee1394/fw_port.h,v
retrieving revision 1.21
diff -u -r1.21 fw_port.h
--- ieee1394/fw_port.h	4 Mar 2007 06:02:05 -0000	1.21
+++ ieee1394/fw_port.h	17 Mar 2007 01:33:57 -0000
@@ -771,7 +771,7 @@
 		shutdownhook_disestablish(sc->sc_shutdownhook)
 #define FWOHCI_STOP()	\
 	void	\
-	fwohci_stop(void *arg)
+	fwohci_stop(int why, void *arg)
 #define FWOHCI_STOP_START	struct fwohci_softc *sc = arg
 #define FWOHCI_STOP_RETURN(r)	return
 
Index: ieee1394/fwohci.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ieee1394/fwohci.c,v
retrieving revision 1.106
diff -u -r1.106 fwohci.c
--- ieee1394/fwohci.c	4 Mar 2007 06:02:05 -0000	1.106
+++ ieee1394/fwohci.c	17 Mar 2007 01:33:58 -0000
@@ -1837,7 +1837,7 @@
 	switch (why) {
 	case PWR_SUSPEND:
 	case PWR_STANDBY:
-		fwohci_stop(arg);
+		fwohci_stop(why, arg);
 		break;
 	case PWR_RESUME:
 		fwohci_resume(sc, sc->fc.dev);
Index: isa/fd.c
===================================================================
RCS file: /cvsroot/src/sys/dev/isa/fd.c,v
retrieving revision 1.73
diff -u -r1.73 fd.c
--- isa/fd.c	8 Mar 2007 23:23:45 -0000	1.73
+++ isa/fd.c	17 Mar 2007 01:33:58 -0000
@@ -245,6 +245,7 @@
 const struct fd_type *fd_nvtotype(char *, int, int);
 #endif /* i386 */
 void fd_set_motor(struct fdc_softc *fdc, int reset);
+void fd_motor_shutdown(int howto, void *arg);
 void fd_motor_off(void *arg);
 void fd_motor_on(void *arg);
 int fdcresult(struct fdc_softc *fdc);
@@ -510,7 +511,7 @@
 	mountroothook_establish(fd_mountroot_hook, &fd->sc_dev);
 
 	/* Needed to power off if the motor is on when we halt. */
-	fd->sc_sdhook = shutdownhook_establish(fd_motor_off, fd);
+	fd->sc_sdhook = shutdownhook_establish(fd_motor_shutdown, fd);
 
 #if NRND > 0
 	rnd_attach_source(&fd->rnd_source, fd->sc_dev.dv_xname,
@@ -737,6 +738,15 @@
 }
 
 void
+fd_motor_shutdown(why, arg)
+	int why;
+	void *arg;
+{
+	fd_motor_off(arg);
+}
+
+
+void
 fd_motor_off(arg)
 	void *arg;
 {
Index: isa/if_ntwoc_isa.c
===================================================================
RCS file: /cvsroot/src/sys/dev/isa/if_ntwoc_isa.c,v
retrieving revision 1.15
diff -u -r1.15 if_ntwoc_isa.c
--- isa/if_ntwoc_isa.c	16 Nov 2006 01:33:00 -0000	1.15
+++ isa/if_ntwoc_isa.c	17 Mar 2007 01:33:59 -0000
@@ -93,7 +93,7 @@
 static	void ntwoc_isa_get_clock(struct sca_port *, u_int8_t, u_int8_t,
     u_int8_t, u_int8_t);
 static	void ntwoc_isa_setup_memory(struct sca_softc *sc);
-static	void ntwoc_isa_shutdown(void *sc);
+static	void ntwoc_isa_shutdown(int why, void *sc);
 
 CFATTACH_DECL(ntwoc_isa, sizeof(struct ntwoc_isa_softc),
     ntwoc_isa_probe, ntwoc_isa_attach, NULL, NULL);
@@ -690,7 +690,7 @@
  * boot.  Also, lower DTR on each port and disable card interrupts.
  */
 static void
-ntwoc_isa_shutdown(void *aux)
+ntwoc_isa_shutdown(int why, void *aux)
 {
 	struct ntwoc_isa_softc *sc = aux;
 	u_int16_t mcr;
Index: marvell/gtmpsc.c
===================================================================
RCS file: /cvsroot/src/sys/dev/marvell/gtmpsc.c,v
retrieving revision 1.23
diff -u -r1.23 gtmpsc.c
--- marvell/gtmpsc.c	4 Mar 2007 06:02:14 -0000	1.23
+++ marvell/gtmpsc.c	17 Mar 2007 01:33:59 -0000
@@ -159,7 +159,7 @@
 
 STATIC void gtmpsc_txflush(gtmpsc_softc_t *);
 STATIC void gtmpsc_iflush(gtmpsc_softc_t *);
-STATIC void gtmpsc_shutdownhook(void *);
+STATIC void gtmpsc_shutdownhook(int, void *);
 
 dev_type_open(gtmpscopen);
 dev_type_close(gtmpscclose);
@@ -1830,7 +1830,7 @@
 }
 
 void
-gtmpsc_shutdownhook(void *arg)
+gtmpsc_shutdownhook(int why, void *arg)
 {
 	gtmpsc_softc_t *sc = (gtmpsc_softc_t *)arg;
 
Index: mvme/clock_pcctwo.c
===================================================================
RCS file: /cvsroot/src/sys/dev/mvme/clock_pcctwo.c,v
retrieving revision 1.10
diff -u -r1.10 clock_pcctwo.c
--- mvme/clock_pcctwo.c	29 Mar 2006 07:07:41 -0000	1.10
+++ mvme/clock_pcctwo.c	17 Mar 2007 01:33:59 -0000
@@ -76,7 +76,7 @@
 static int clock_pcctwo_statintr(void *);
 static void clock_pcctwo_initclocks(void *, int, int);
 static long clock_pcctwo_microtime(void *);
-static void clock_pcctwo_shutdown(void *);
+static void clock_pcctwo_shutdown(int, void *);
 
 static struct clock_pcctwo_softc *clock_pcctwo_sc;
 
@@ -245,7 +245,8 @@
 
 /* ARGSUSED */
 void
-clock_pcctwo_shutdown(arg)
+clock_pcctwo_shutdown(why, arg)
+	int why;
 	void *arg;
 {
 
Index: pci/amr.c
===================================================================
RCS file: /cvsroot/src/sys/dev/pci/amr.c,v
retrieving revision 1.44
diff -u -r1.44 amr.c
--- pci/amr.c	4 Mar 2007 06:02:16 -0000	1.44
+++ pci/amr.c	17 Mar 2007 01:34:00 -0000
@@ -107,7 +107,7 @@
 static int	amr_intr(void *);
 static int	amr_match(struct device *, struct cfdata *, void *);
 static int	amr_print(void *, const char *);
-static void	amr_shutdown(void *);
+static void	amr_shutdown(int, void *);
 static void	amr_teardown(struct amr_softc *);
 static void	amr_thread(void *);
 static void	amr_thread_create(void *);
@@ -732,7 +732,7 @@
  * shutdown time.
  */
 static void
-amr_shutdown(void *cookie)
+amr_shutdown(int why, void *cookie)
 {
 	extern struct cfdriver amr_cd;
 	struct amr_softc *amr;
Index: pci/if_ath_pci.c
===================================================================
RCS file: /cvsroot/src/sys/dev/pci/if_ath_pci.c,v
retrieving revision 1.19
diff -u -r1.19 if_ath_pci.c
--- pci/if_ath_pci.c	16 Nov 2006 01:33:08 -0000	1.19
+++ pci/if_ath_pci.c	17 Mar 2007 01:34:00 -0000
@@ -105,7 +105,7 @@
 
 static int ath_pci_match(struct device *, struct cfdata *, void *);
 static void ath_pci_attach(struct device *, struct device *, void *);
-static void ath_pci_shutdown(void *);
+static void ath_pci_shutdown(int, void *);
 static void ath_pci_powerhook(int, void *);
 static int ath_pci_detach(struct device *, int);
 
@@ -260,11 +260,11 @@
 }
 
 static void
-ath_pci_shutdown(void *self)
+ath_pci_shutdown(int why, void *self)
 {
 	struct ath_pci_softc *psc = (struct ath_pci_softc *)self;
 
-	ath_shutdown(&psc->sc_sc);
+	ath_shutdown(why, &psc->sc_sc);
 }
 
 static void
@@ -276,7 +276,7 @@
 
 	switch (why) {
 	case PWR_SOFTSUSPEND:
-		ath_pci_shutdown(sc);
+		ath_pci_shutdown(why, sc);
 		break;
 	case PWR_SUSPEND:
 		pci_conf_capture(pc, tag, &sc->sc_pciconf);
Index: pci/if_de.c
===================================================================
RCS file: /cvsroot/src/sys/dev/pci/if_de.c,v
retrieving revision 1.123
diff -u -r1.123 if_de.c
--- pci/if_de.c	4 Mar 2007 06:02:19 -0000	1.123
+++ pci/if_de.c	17 Mar 2007 01:34:01 -0000
@@ -5554,7 +5554,7 @@
 
 #if defined(__NetBSD__)
 #define	TULIP_PCI_ATTACH_ARGS	struct device * const parent, struct device * const self, void *const aux
-#define	TULIP_SHUTDOWN_ARGS	void *arg
+#define	TULIP_SHUTDOWN_ARGS	int why, void *arg
 static int
 tulip_pci_probe(
     struct device *parent,
Index: pci/if_dge.c
===================================================================
RCS file: /cvsroot/src/sys/dev/pci/if_dge.c,v
retrieving revision 1.15
diff -u -r1.15 if_dge.c
--- pci/if_dge.c	4 Mar 2007 06:02:20 -0000	1.15
+++ pci/if_dge.c	17 Mar 2007 01:34:02 -0000
@@ -618,7 +618,7 @@
 static int	dge_init(struct ifnet *);
 static void	dge_stop(struct ifnet *, int);
 
-static void	dge_shutdown(void *);
+static void	dge_shutdown(int, void *);
 
 static void	dge_reset(struct dge_softc *);
 static void	dge_rxdrain(struct dge_softc *);
@@ -1007,7 +1007,7 @@
  *	Make sure the interface is stopped at reboot time.
  */
 static void
-dge_shutdown(void *arg)
+dge_shutdown(int why, void *arg)
 {
 	struct dge_softc *sc = arg;
 
Index: pci/if_fpa.c
===================================================================
RCS file: /cvsroot/src/sys/dev/pci/if_fpa.c,v
retrieving revision 1.48
diff -u -r1.48 if_fpa.c
--- pci/if_fpa.c	4 Mar 2007 06:02:20 -0000	1.48
+++ pci/if_fpa.c	17 Mar 2007 01:34:02 -0000
@@ -120,7 +120,7 @@
 #define	PDQ_PCI_UNIT_TO_SOFTC(unit)	(pdqs_pci[unit])
 #if BSD >= 199506
 #define	pdq_pci_ifwatchdog		NULL
-static void pdq_pci_shutdown(int howto, void *sc);
+static void pdq_pci_shutdown(int why, void *sc);
 #endif
 
 #elif defined(__bsdi__)
@@ -246,7 +246,7 @@
 #else
 static void
 pdq_pci_shutdown(
-    int howto,
+    int why,
     void *sc)
 {
     pdq_hwreset(((pdq_softc_t *)sc)->sc_pdq);
@@ -389,6 +389,15 @@
 };
 
 #elif defined(__NetBSD__)
+static void pdq_pci_shutdown(int, void *); /* prototype */
+
+static void
+pdq_pci_shutdown(int why,
+		  void *arg)
+{
+    pdq_hwreset(arg);
+}
+
 
 static int
 pdq_pci_match(
@@ -494,7 +503,7 @@
 	return;
     }
 
-    sc->sc_ats = shutdownhook_establish((void (*)(void *)) pdq_hwreset, sc->sc_pdq);
+    sc->sc_ats = shutdownhook_establish(pdq_pci_shutdown, sc->sc_pdq);
     if (sc->sc_ats == NULL)
 	aprint_error("%s: warning: couldn't establish shutdown hook\n", self->dv_xname);
     if (intrstr != NULL)
Index: pci/if_ipw.c
===================================================================
RCS file: /cvsroot/src/sys/dev/pci/if_ipw.c,v
retrieving revision 1.32
diff -u -r1.32 if_ipw.c
--- pci/if_ipw.c	4 Mar 2007 06:02:20 -0000	1.32
+++ pci/if_ipw.c	17 Mar 2007 01:34:03 -0000
@@ -94,7 +94,7 @@
 static void	ipw_attach(struct device *, struct device *, void *);
 static int	ipw_detach(struct device *, int);
 
-static void	ipw_shutdown(void *);
+static void	ipw_shutdown(int, void *);
 static int	ipw_suspend(struct ipw_softc *);
 static int	ipw_resume(struct ipw_softc *);
 static void	ipw_powerhook(int, void *);
@@ -757,7 +757,7 @@
 }
 
 static void
-ipw_shutdown(void *arg)
+ipw_shutdown(int why, void *arg)
 {
 	struct ipw_softc *sc = (struct ipw_softc *)arg;
 	struct ifnet *ifp = sc->sc_ic.ic_ifp;
Index: pci/if_iwi.c
===================================================================
RCS file: /cvsroot/src/sys/dev/pci/if_iwi.c,v
retrieving revision 1.62
diff -u -r1.62 if_iwi.c
--- pci/if_iwi.c	4 Mar 2007 19:14:25 -0000	1.62
+++ pci/if_iwi.c	17 Mar 2007 01:34:03 -0000
@@ -94,7 +94,7 @@
 static void	iwi_attach(struct device *, struct device *, void *);
 static int	iwi_detach(struct device *, int);
 
-static void	iwi_shutdown(void *);
+static void	iwi_shutdown(int, void *);
 static int	iwi_suspend(struct iwi_softc *);
 static int	iwi_resume(struct iwi_softc *);
 static void	iwi_powerhook(int, void *);
@@ -799,7 +799,7 @@
 }
 
 static void
-iwi_shutdown(void *arg)
+iwi_shutdown(int why, void *arg)
 {
 	struct iwi_softc *sc = (struct iwi_softc *)arg;
 	struct ifnet *ifp = sc->sc_ic.ic_ifp;
Index: pci/if_lmc.c
===================================================================
RCS file: /cvsroot/src/sys/dev/pci/if_lmc.c,v
retrieving revision 1.34
diff -u -r1.34 if_lmc.c
--- pci/if_lmc.c	4 Mar 2007 06:02:20 -0000	1.34
+++ pci/if_lmc.c	17 Mar 2007 01:34:05 -0000
@@ -7158,7 +7158,7 @@
   aprint_naive(": %s\n", sc->dev_desc);
 
   /* Install a shutdown hook. */
-  if ((sc->sdh_cookie = shutdownhook_establish(tulip_detach, sc)) == NULL)
+  if ((sc->sdh_cookie = shutdownhook_establish(nbsd_tulip_shutdown, sc)) == NULL)
     {
     aprint_error("%s: shutdown_hook_establish() failed\n", NAME_UNIT);
     nbsd_detach(self, 0);
@@ -7193,6 +7193,13 @@
   return 0;
   }
 
+
+void
+nbsd_tulip_shutdown(int why, void *arg)
+{
+	tulip_detach(arg);
+}
+
 CFATTACH_DECL(lmc, sizeof(softc_t),		/* lmc_ca */
  nbsd_match, nbsd_attach, nbsd_detach, NULL);
 
@@ -7322,7 +7329,7 @@
   printf(" %s: %s\n", intrstr, sc->dev_desc);
 
   /* Install a shutdown hook. */
-  if ((sc->sdh_cookie = shutdownhook_establish(tulip_detach, sc)) == NULL)
+  if ((sc->sdh_cookie = shutdownhook_establish(nbsd_tulip_shutdown, sc)) == NULL)
     {
     printf("%s: shutdown_hook_establish() failed\n", NAME_UNIT);
     obsd_detach(self, 0);
Index: pci/if_lmc.h
===================================================================
RCS file: /cvsroot/src/sys/dev/pci/if_lmc.h,v
retrieving revision 1.9
diff -u -r1.9 if_lmc.h
--- pci/if_lmc.h	4 Mar 2007 06:02:21 -0000	1.9
+++ pci/if_lmc.h	17 Mar 2007 01:34:06 -0000
@@ -1677,6 +1677,7 @@
 static int nbsd_match(struct device *, struct cfdata *, void *);
 static void nbsd_attach(struct device *, struct device *, void *);
 static int nbsd_detach(struct device *, int);
+static void nbsd_tulip_shutdown(int, void *);
 # if defined(LKM)
 int if_lmc_lkmentry(struct lkm_table *, int, int);
 # endif
Index: pci/if_msk.c
===================================================================
RCS file: /cvsroot/src/sys/dev/pci/if_msk.c,v
retrieving revision 1.8
diff -u -r1.8 if_msk.c
--- pci/if_msk.c	4 Mar 2007 06:02:21 -0000	1.8
+++ pci/if_msk.c	17 Mar 2007 01:34:07 -0000
@@ -97,7 +97,7 @@
 
 int mskc_probe(struct device *, struct cfdata *, void *);
 void mskc_attach(struct device *, struct device *self, void *aux);
-void mskc_shutdown(void *);
+void mskc_shutdown(int, void *);
 int msk_probe(struct device *, struct cfdata *, void *);
 void msk_attach(struct device *, struct device *self, void *aux);
 int mskcprint(void *, const char *);
@@ -1654,7 +1654,7 @@
 }
 
 void
-mskc_shutdown(void *v)
+mskc_shutdown(int why, void *v)
 {
 	struct sk_softc		*sc = v;
 
Index: pci/if_ntwoc_pci.c
===================================================================
RCS file: /cvsroot/src/sys/dev/pci/if_ntwoc_pci.c,v
retrieving revision 1.19
diff -u -r1.19 if_ntwoc_pci.c
--- pci/if_ntwoc_pci.c	16 Nov 2006 01:33:09 -0000	1.19
+++ pci/if_ntwoc_pci.c	17 Mar 2007 01:34:07 -0000
@@ -123,7 +123,7 @@
     u_int8_t, u_int8_t);
 static	int ntwoc_pci_intr(void *);
 static	void ntwoc_pci_setup_dma(struct sca_softc *);
-static	void ntwoc_pci_shutdown(void *sc);
+static	void ntwoc_pci_shutdown(int why, void *sc);
 
 CFATTACH_DECL(ntwoc_pci, sizeof(struct ntwoc_pci_softc),
     ntwoc_pci_match, ntwoc_pci_attach, NULL, NULL);
@@ -464,7 +464,7 @@
  * boot.  Also, lower DTR on each port and disable card interrupts.
  */
 static void
-ntwoc_pci_shutdown(void *aux)
+ntwoc_pci_shutdown(int why, void *aux)
 {
 	struct ntwoc_pci_softc *sc = aux;
 	u_int16_t fecr;
Index: pci/if_pcn.c
===================================================================
RCS file: /cvsroot/src/sys/dev/pci/if_pcn.c,v
retrieving revision 1.38
diff -u -r1.38 if_pcn.c
--- pci/if_pcn.c	4 Mar 2007 06:02:22 -0000	1.38
+++ pci/if_pcn.c	17 Mar 2007 01:34:08 -0000
@@ -398,7 +398,7 @@
 static int	pcn_init(struct ifnet *);
 static void	pcn_stop(struct ifnet *, int);
 
-static void	pcn_shutdown(void *);
+static void	pcn_shutdown(int, void *);
 
 static void	pcn_reset(struct pcn_softc *);
 static void	pcn_rxdrain(struct pcn_softc *);
@@ -905,7 +905,7 @@
  *	Make sure the interface is stopped at reboot time.
  */
 static void
-pcn_shutdown(void *arg)
+pcn_shutdown(int why, void *arg)
 {
 	struct pcn_softc *sc = arg;
 
Index: pci/if_sip.c
===================================================================
RCS file: /cvsroot/src/sys/dev/pci/if_sip.c,v
retrieving revision 1.112
diff -u -r1.112 if_sip.c
--- pci/if_sip.c	4 Mar 2007 15:05:24 -0000	1.112
+++ pci/if_sip.c	17 Mar 2007 01:34:09 -0000
@@ -428,7 +428,7 @@
 static int	SIP_DECL(init)(struct ifnet *);
 static void	SIP_DECL(stop)(struct ifnet *, int);
 
-static void	SIP_DECL(shutdown)(void *);
+static void	SIP_DECL(shutdown)(int, void *);
 
 static void	SIP_DECL(reset)(struct sip_softc *);
 static void	SIP_DECL(rxdrain)(struct sip_softc *);
@@ -1140,7 +1140,7 @@
  *	Make sure the interface is stopped at reboot time.
  */
 static void
-SIP_DECL(shutdown)(void *arg)
+SIP_DECL(shutdown)(int why, void *arg)
 {
 	struct sip_softc *sc = arg;
 
Index: pci/if_ste.c
===================================================================
RCS file: /cvsroot/src/sys/dev/pci/if_ste.c,v
retrieving revision 1.27
diff -u -r1.27 if_ste.c
--- pci/if_ste.c	4 Mar 2007 06:02:22 -0000	1.27
+++ pci/if_ste.c	17 Mar 2007 01:34:09 -0000
@@ -210,7 +210,7 @@
 static int	ste_init(struct ifnet *);
 static void	ste_stop(struct ifnet *, int);
 
-static void	ste_shutdown(void *);
+static void	ste_shutdown(int, void *);
 
 static void	ste_reset(struct ste_softc *, u_int32_t);
 static void	ste_setthresh(struct ste_softc *);
@@ -558,7 +558,7 @@
  *	Make sure the interface is stopped at reboot time.
  */
 static void
-ste_shutdown(void *arg)
+ste_shutdown(int why, void *arg)
 {
 	struct ste_softc *sc = arg;
 
Index: pci/if_stge.c
===================================================================
RCS file: /cvsroot/src/sys/dev/pci/if_stge.c,v
retrieving revision 1.36
diff -u -r1.36 if_stge.c
--- pci/if_stge.c	4 Mar 2007 06:02:23 -0000	1.36
+++ pci/if_stge.c	17 Mar 2007 01:34:09 -0000
@@ -273,7 +273,7 @@
 static int	stge_init(struct ifnet *);
 static void	stge_stop(struct ifnet *, int);
 
-static void	stge_shutdown(void *);
+static void	stge_shutdown(int, void *);
 
 static void	stge_reset(struct stge_softc *);
 static void	stge_rxdrain(struct stge_softc *);
@@ -742,7 +742,7 @@
  *	Make sure the interface is stopped at reboot time.
  */
 static void
-stge_shutdown(void *arg)
+stge_shutdown(int why, void *arg)
 {
 	struct stge_softc *sc = arg;
 
Index: pci/if_ti.c
===================================================================
RCS file: /cvsroot/src/sys/dev/pci/if_ti.c,v
retrieving revision 1.74
diff -u -r1.74 if_ti.c
--- pci/if_ti.c	4 Mar 2007 06:02:23 -0000	1.74
+++ pci/if_ti.c	17 Mar 2007 01:34:10 -0000
@@ -151,7 +151,7 @@
 static const struct ti_type *ti_type_match(struct pci_attach_args *);
 static int ti_probe(struct device *, struct cfdata *, void *);
 static void ti_attach(struct device *, struct device *, void *);
-static void ti_shutdown(void *);
+static void ti_shutdown(int, void *);
 static void ti_txeof_tigon1(struct ti_softc *);
 static void ti_txeof_tigon2(struct ti_softc *);
 static void ti_rxeof(struct ti_softc *);
@@ -2924,7 +2924,8 @@
  * Stop all chip I/O so that the kernel's probe routines don't
  * get confused by errant DMAs when rebooting.
  */
-static void ti_shutdown(v)
+static void ti_shutdown(why, v)
+	int why;
 	void *v;
 {
 	struct ti_softc		*sc = v;
Index: pci/if_tl.c
===================================================================
RCS file: /cvsroot/src/sys/dev/pci/if_tl.c,v
retrieving revision 1.82
diff -u -r1.82 if_tl.c
--- pci/if_tl.c	4 Mar 2007 06:02:23 -0000	1.82
+++ pci/if_tl.c	17 Mar 2007 01:34:10 -0000
@@ -126,7 +126,7 @@
 static int tl_mediachange(struct ifnet *);
 static void tl_mediastatus(struct ifnet *, struct ifmediareq *);
 static void tl_ifwatchdog(struct ifnet *);
-static void tl_shutdown(void*);
+static void tl_shutdown(int, void*);
 
 static void tl_ifstart(struct ifnet *);
 static void tl_reset(tl_softc_t*);
@@ -527,7 +527,8 @@
 	sc->tl_mii.mii_media_status &= ~IFM_ACTIVE;
 }
 
-static void tl_shutdown(v)
+static void tl_shutdown(why, v)
+	int why;
 	void *v;
 {
 	tl_stop(v, 1);
Index: pci/if_txp.c
===================================================================
RCS file: /cvsroot/src/sys/dev/pci/if_txp.c,v
retrieving revision 1.19
diff -u -r1.19 if_txp.c
--- pci/if_txp.c	4 Mar 2007 06:02:23 -0000	1.19
+++ pci/if_txp.c	17 Mar 2007 01:34:11 -0000
@@ -91,7 +91,7 @@
 void txp_attach(struct device *, struct device *, void *);
 int txp_intr(void *);
 void txp_tick(void *);
-void txp_shutdown(void *);
+void txp_shutdown(int, void *);
 int txp_ioctl(struct ifnet *, u_long, void *);
 void txp_start(struct ifnet *);
 void txp_stop(struct txp_softc *);
@@ -925,7 +925,8 @@
 }
 
 void
-txp_shutdown(vsc)
+txp_shutdown(why, vsc)
+	int why;
 	void *vsc;
 {
 	struct txp_softc *sc = (struct txp_softc *)vsc;
Index: pci/if_vge.c
===================================================================
RCS file: /cvsroot/src/sys/dev/pci/if_vge.c,v
retrieving revision 1.34
diff -u -r1.34 if_vge.c
--- pci/if_vge.c	4 Mar 2007 06:02:23 -0000	1.34
+++ pci/if_vge.c	17 Mar 2007 01:34:11 -0000
@@ -318,7 +318,7 @@
 static int vge_suspend(struct device *);
 static int vge_resume(struct device *);
 #endif
-static void vge_shutdown(void *);
+static void vge_shutdown(int, void *);
 static int vge_ifmedia_upd(struct ifnet *);
 static void vge_ifmedia_sts(struct ifnet *, struct ifmediareq *);
 
@@ -2263,7 +2263,7 @@
  * get confused by errant DMAs when rebooting.
  */
 static void
-vge_shutdown(void *arg)
+vge_shutdown(int why, void *arg)
 {
 	struct vge_softc *sc;
 
Index: pci/if_vr.c
===================================================================
RCS file: /cvsroot/src/sys/dev/pci/if_vr.c,v
retrieving revision 1.85
diff -u -r1.85 if_vr.c
--- pci/if_vr.c	4 Mar 2007 06:02:23 -0000	1.85
+++ pci/if_vr.c	17 Mar 2007 01:34:12 -0000
@@ -1440,7 +1440,7 @@
 
 static int	vr_probe(struct device *, struct cfdata *, void *);
 static void	vr_attach(struct device *, struct device *, void *);
-static void	vr_shutdown(void *);
+static void	vr_shutdown(int, void *);
 
 CFATTACH_DECL(vr, sizeof (struct vr_softc),
     vr_probe, vr_attach, NULL, NULL);
@@ -1475,7 +1475,7 @@
  * get confused by errant DMAs when rebooting.
  */
 static void
-vr_shutdown(void *arg)
+vr_shutdown(int why, void *arg)
 {
 	struct vr_softc *sc = (struct vr_softc *)arg;
 
Index: pci/if_wm.c
===================================================================
RCS file: /cvsroot/src/sys/dev/pci/if_wm.c,v
retrieving revision 1.135
diff -u -r1.135 if_wm.c
--- pci/if_wm.c	4 Mar 2007 06:02:23 -0000	1.135
+++ pci/if_wm.c	17 Mar 2007 01:34:13 -0000
@@ -474,7 +474,7 @@
 static int	wm_init(struct ifnet *);
 static void	wm_stop(struct ifnet *, int);
 
-static void	wm_shutdown(void *);
+static void	wm_shutdown(int, void *);
 static void	wm_powerhook(int, void *);
 
 static void	wm_reset(struct wm_softc *);
@@ -1547,7 +1547,7 @@
  *	Make sure the interface is stopped at reboot time.
  */
 static void
-wm_shutdown(void *arg)
+wm_shutdown(int why, void *arg)
 {
 	struct wm_softc *sc = arg;
 
@@ -1564,7 +1564,7 @@
 
 	switch (why) {
 	case PWR_SOFTSUSPEND:
-		wm_shutdown(sc);
+		wm_shutdown(why, sc);
 		break;
 	case PWR_SOFTRESUME:
 		ifp->if_flags &= ~IFF_RUNNING;
Index: pci/mly.c
===================================================================
RCS file: /cvsroot/src/sys/dev/pci/mly.c,v
retrieving revision 1.34
diff -u -r1.34 mly.c
--- pci/mly.c	4 Mar 2007 06:02:24 -0000	1.34
+++ pci/mly.c	17 Mar 2007 01:34:13 -0000
@@ -116,7 +116,7 @@
 static int	mly_fwhandshake(struct mly_softc *);
 static int	mly_flush(struct mly_softc *);
 static int	mly_intr(void *);
-static void	mly_shutdown(void *);
+static void	mly_shutdown(int, void *);
 
 static int	mly_alloc_ccbs(struct mly_softc *);
 static void	mly_check_event(struct mly_softc *);
@@ -590,7 +590,7 @@
  * Shut down all configured `mly' devices.
  */
 static void
-mly_shutdown(void *cookie)
+mly_shutdown(int why, void *cookie)
 {
 	struct mly_softc *mly;
 	int i;
Index: pci/pccbb.c
===================================================================
RCS file: /cvsroot/src/sys/dev/pci/pccbb.c,v
retrieving revision 1.144
diff -u -r1.144 pccbb.c
--- pci/pccbb.c	4 Feb 2007 21:04:37 -0000	1.144
+++ pci/pccbb.c	17 Mar 2007 01:34:14 -0000
@@ -382,7 +382,7 @@
 }
 
 static void
-pccbb_shutdown(void *arg)
+pccbb_shutdown(int why, void *arg)
 {
 	struct pccbb_softc *sc = arg;
 	pcireg_t command;
Index: pci/twa.c
===================================================================
RCS file: /cvsroot/src/sys/dev/pci/twa.c,v
retrieving revision 1.17
diff -u -r1.17 twa.c
--- pci/twa.c	4 Mar 2007 06:02:26 -0000	1.17
+++ pci/twa.c	17 Mar 2007 01:34:15 -0000
@@ -124,7 +124,7 @@
 			struct twa_command_header *);
 
 static void	twa_attach(struct device *, struct device *, void *);
-static void	twa_shutdown(void *);
+static void	twa_shutdown(int, void *);
 static int	twa_init_connection(struct twa_softc *, uint16_t, uint32_t,
 				    uint16_t, uint16_t, uint16_t, uint16_t, uint16_t *,
 					uint16_t *, uint16_t *, uint16_t *, uint32_t *);
@@ -1636,7 +1636,7 @@
 }
 
 static void
-twa_shutdown(void *arg)
+twa_shutdown(int why, void *arg)
 {
 	extern struct cfdriver twa_cd;
 	struct twa_softc *sc;
Index: pcmcia/if_ray.c
===================================================================
RCS file: /cvsroot/src/sys/dev/pcmcia/if_ray.c,v
retrieving revision 1.64
diff -u -r1.64 if_ray.c
--- pcmcia/if_ray.c	4 Mar 2007 06:02:27 -0000	1.64
+++ pcmcia/if_ray.c	17 Mar 2007 01:34:16 -0000
@@ -320,7 +320,7 @@
 static void ray_reset_resetloop(void *);
 static int ray_send_auth(struct ray_softc *, u_int8_t *, u_int8_t);
 static void ray_set_pending(struct ray_softc *, u_int);
-static void ray_shutdown(void *);
+static void ray_shutdown(int, void *);
 static int ray_simple_cmd(struct ray_softc *, u_int, u_int);
 static void ray_start_assoc(struct ray_softc *);
 static void ray_start_join_net(struct ray_softc *);
@@ -905,7 +905,8 @@
 }
 
 static void
-ray_shutdown(arg)
+ray_shutdown(why, arg)
+	int why;
 	void *arg;
 {
 	struct ray_softc *sc;
Index: pcmcia/if_wi_pcmcia.c
===================================================================
RCS file: /cvsroot/src/sys/dev/pcmcia/if_wi_pcmcia.c,v
retrieving revision 1.75
diff -u -r1.75 if_wi_pcmcia.c
--- pcmcia/if_wi_pcmcia.c	10 Dec 2006 03:44:28 -0000	1.75
+++ pcmcia/if_wi_pcmcia.c	17 Mar 2007 01:34:16 -0000
@@ -88,7 +88,7 @@
 static int	wi_pcmcia_enable(struct wi_softc *);
 static void	wi_pcmcia_disable(struct wi_softc *);
 static void	wi_pcmcia_powerhook(int, void *);
-static void	wi_pcmcia_shutdown(void *);
+static void	wi_pcmcia_shutdown(int, void *);
 
 #if WI_PCMCIA_SPECTRUM24T_FW
 /* support to download firmware for symbol CF card */
@@ -441,7 +441,8 @@
 }
 
 static void
-wi_pcmcia_shutdown(arg)
+wi_pcmcia_shutdown(why, arg)
+	int why;
 	void *arg;
 {
 	struct wi_pcmcia_softc *psc = arg;
Index: podulebus/sec.c
===================================================================
RCS file: /cvsroot/src/sys/dev/podulebus/sec.c,v
retrieving revision 1.8
diff -u -r1.8 sec.c
--- podulebus/sec.c	7 Mar 2007 23:17:01 -0000	1.8
+++ podulebus/sec.c	17 Mar 2007 01:34:16 -0000
@@ -95,7 +95,7 @@
 static void sec_attach(struct device *, struct device *, void *);
 
 /* shutdown hook */
-static void sec_shutdown(void *);
+static void sec_shutdown(int, void *);
 
 /* callbacks from MI WD33C93 driver */
 static int sec_dmasetup(struct wd33c93_softc *, void **, size_t *, int,
@@ -219,7 +219,7 @@
  * the podule ROM.
  */
 static void
-sec_shutdown(void *cookie)
+sec_shutdown(int why, void *cookie)
 {
 	struct sec_softc *sc = cookie;
 
Index: qbus/if_de.c
===================================================================
RCS file: /cvsroot/src/sys/dev/qbus/if_de.c,v
retrieving revision 1.21
diff -u -r1.21 if_de.c
--- qbus/if_de.c	4 Mar 2007 06:02:29 -0000	1.21
+++ qbus/if_de.c	17 Mar 2007 01:34:16 -0000
@@ -184,7 +184,7 @@
 static	void destart(struct ifnet *);
 static	void derecv(struct de_softc *);
 static	void deintr(void *);
-static	void deshutdown(void *);
+static	void deshutdown(int, void *);
 
 CFATTACH_DECL(de, sizeof(struct de_softc),
     dematch, deattach, NULL, NULL);
@@ -660,7 +660,7 @@
 }
 
 void
-deshutdown(void *arg)
+deshutdown(int why, void *arg)
 {
 	struct de_softc *sc = arg;
 
Index: sbus/p9100.c
===================================================================
RCS file: /cvsroot/src/sys/dev/sbus/p9100.c,v
retrieving revision 1.35
diff -u -r1.35 p9100.c
--- sbus/p9100.c	4 Mar 2007 06:02:41 -0000	1.35
+++ sbus/p9100.c	17 Mar 2007 01:34:17 -0000
@@ -160,7 +160,7 @@
 static void	p9100_sbus_attach(struct device *, struct device *, void *);
 
 static void	p9100unblank(struct device *);
-static void	p9100_shutdown(void *);
+static void	p9100_shutdown(int, void *);
 
 CFATTACH_DECL(pnozz, sizeof(struct p9100_softc),
     p9100_sbus_match, p9100_sbus_attach, NULL, NULL);
@@ -482,7 +482,8 @@
 }
 
 static void
-p9100_shutdown(arg)
+p9100_shutdown(why, arg)
+	int why;
 	void *arg;
 {
 	struct p9100_softc *sc = arg;
Index: scsipi/sd.c
===================================================================
RCS file: /cvsroot/src/sys/dev/scsipi/sd.c,v
retrieving revision 1.261
diff -u -r1.261 sd.c
--- scsipi/sd.c	4 Mar 2007 06:02:43 -0000	1.261
+++ scsipi/sd.c	17 Mar 2007 01:34:17 -0000
@@ -107,7 +107,7 @@
 static void	sdstart(struct scsipi_periph *);
 static void	sdrestart(void *);
 static void	sddone(struct scsipi_xfer *, int);
-static void	sd_shutdown(void *);
+static void	sd_shutdown(int, void *);
 static int	sd_interpret_sense(struct scsipi_xfer *);
 
 static int	sd_mode_sense(struct sd_softc *, u_int8_t, void *, size_t, int,
@@ -1336,7 +1336,7 @@
 }
 
 static void
-sd_shutdown(void *arg)
+sd_shutdown(int why, void *arg)
 {
 	struct sd_softc *sd = arg;
 
Index: sysmon/sysmon_wdog.c
===================================================================
RCS file: /cvsroot/src/sys/dev/sysmon/sysmon_wdog.c,v
retrieving revision 1.18
diff -u -r1.18 sysmon_wdog.c
--- sysmon/sysmon_wdog.c	4 Mar 2007 06:02:45 -0000	1.18
+++ sysmon/sysmon_wdog.c	17 Mar 2007 01:34:17 -0000
@@ -81,7 +81,7 @@
 void	sysmon_wdog_release(struct sysmon_wdog *);
 int	sysmon_wdog_setmode(struct sysmon_wdog *, int, u_int);
 void	sysmon_wdog_ktickle(void *);
-void	sysmon_wdog_shutdown(void *);
+void	sysmon_wdog_shutdown(int, void *);
 
 /*
  * sysmonopen_wdog:
@@ -456,7 +456,7 @@
  *	Perform shutdown-time operations.
  */
 void
-sysmon_wdog_shutdown(void *arg)
+sysmon_wdog_shutdown(int why, void *arg)
 {
 	struct sysmon_wdog *smw;
 
Index: tc/if_fta.c
===================================================================
RCS file: /cvsroot/src/sys/dev/tc/if_fta.c,v
retrieving revision 1.24
diff -u -r1.24 if_fta.c
--- tc/if_fta.c	4 Mar 2007 06:02:46 -0000	1.24
+++ tc/if_fta.c	17 Mar 2007 01:34:17 -0000
@@ -63,6 +63,19 @@
 #include <dev/ic/pdqvar.h>
 #include <dev/ic/pdqreg.h>
 
+
+
+static void
+pdq_tc_shutdown(int, void *);
+
+static void
+pdq_tc_shutdown(int why,
+		  void *arg)
+{
+    pdq_hwreset(arg);
+}
+
+
 static int
 pdq_tc_match(
     struct device *parent,
@@ -115,7 +128,7 @@
     tc_intr_establish(parent, ta->ta_cookie, TC_IPL_NET,
 		      (int (*)(void *)) pdq_interrupt, sc->sc_pdq);
 
-    sc->sc_ats = shutdownhook_establish((void (*)(void *)) pdq_hwreset, sc->sc_pdq);
+    sc->sc_ats = shutdownhook_establish(pdq_tc_shutdown, sc->sc_pdq);
     if (sc->sc_ats == NULL)
 	printf("%s: warning: couldn't establish shutdown hook\n", self->dv_xname);
 }
Index: usb/ehci.c
===================================================================
RCS file: /cvsroot/src/sys/dev/usb/ehci.c,v
retrieving revision 1.123
diff -u -r1.123 ehci.c
--- usb/ehci.c	26 Feb 2007 13:26:45 -0000	1.123
+++ usb/ehci.c	17 Mar 2007 01:34:18 -0000
@@ -127,7 +127,7 @@
 	} u;
 };
 
-Static void		ehci_shutdown(void *);
+Static void		ehci_shutdown(int, void *);
 Static void		ehci_power(int, void *);
 
 Static usbd_status	ehci_open(usbd_pipe_handle);
@@ -1064,7 +1064,7 @@
  * Shut down the controller when the system is going down.
  */
 void
-ehci_shutdown(void *v)
+ehci_shutdown(int why, void *v)
 {
 	ehci_softc_t *sc = v;
 
Index: usb/ohci.c
===================================================================
RCS file: /cvsroot/src/sys/dev/usb/ohci.c,v
retrieving revision 1.182
diff -u -r1.182 ohci.c
--- usb/ohci.c	26 Feb 2007 13:26:46 -0000	1.182
+++ usb/ohci.c	17 Mar 2007 01:34:19 -0000
@@ -136,7 +136,7 @@
 			    ohci_softc_t *, int, int, usbd_xfer_handle,
 			    ohci_soft_td_t *, ohci_soft_td_t **);
 
-Static void		ohci_shutdown(void *v);
+Static void		ohci_shutdown(int howto, void *v);
 Static void		ohci_power(int, void *);
 Static usbd_status	ohci_open(usbd_pipe_handle);
 Static void		ohci_poll(struct usbd_bus *);
@@ -1009,7 +1009,7 @@
  * Shut down the controller when the system is going down.
  */
 void
-ohci_shutdown(void *v)
+ohci_shutdown(int why, void *v)
 {
 	ohci_softc_t *sc = v;
 
Index: usb/uhci.c
===================================================================
RCS file: /cvsroot/src/sys/dev/usb/uhci.c,v
retrieving revision 1.208
diff -u -r1.208 uhci.c
--- usb/uhci.c	26 Feb 2007 13:26:46 -0000	1.208
+++ usb/uhci.c	17 Mar 2007 01:34:20 -0000
@@ -165,7 +165,7 @@
 Static void		uhci_globalreset(uhci_softc_t *);
 Static usbd_status	uhci_portreset(uhci_softc_t*, int);
 Static void		uhci_reset(uhci_softc_t *);
-Static void		uhci_shutdown(void *v);
+Static void		uhci_shutdown(int howto, void *v);
 Static void		uhci_power(int, void *);
 Static usbd_status	uhci_run(uhci_softc_t *, int run);
 Static uhci_soft_td_t  *uhci_alloc_std(uhci_softc_t *);
@@ -714,7 +714,7 @@
  * Shut down the controller when the system is going down.
  */
 void
-uhci_shutdown(void *v)
+uhci_shutdown(int why, void *v)
 {
 	uhci_softc_t *sc = v;
 	int s;
Index: wscons/wsdisplay.c
===================================================================
RCS file: /cvsroot/src/sys/dev/wscons/wsdisplay.c,v
retrieving revision 1.108
diff -u -r1.108 wsdisplay.c
--- wscons/wsdisplay.c	5 Mar 2007 16:06:52 -0000	1.108
+++ wscons/wsdisplay.c	17 Mar 2007 01:34:20 -0000
@@ -104,7 +104,7 @@
 				 int, int, long);
 void wsscreen_detach(struct wsscreen *);
 int wsdisplay_addscreen(struct wsdisplay_softc *, int, const char *, const char *);
-static void wsdisplay_shutdownhook(void *);
+static void wsdisplay_shutdownhook(int, void *);
 static void wsdisplay_addscreen_print(struct wsdisplay_softc *, int, int);
 static void wsdisplay_closescreen(struct wsdisplay_softc *, struct wsscreen *);
 int wsdisplay_delscreen(struct wsdisplay_softc *, int, int);
@@ -2041,7 +2041,7 @@
  * Switch the console at shutdown.
  */
 static void
-wsdisplay_shutdownhook(void *arg)
+wsdisplay_shutdownhook(int why, void *arg)
 {
 
 	wsdisplay_switchtoconsole();
