diff options
Diffstat (limited to 'sys/arch/i386')
-rw-r--r-- | sys/arch/i386/i386/esm.c | 18 | ||||
-rw-r--r-- | sys/arch/i386/pci/elan520.c | 18 | ||||
-rw-r--r-- | sys/arch/i386/pci/geodesc.c | 20 |
3 files changed, 50 insertions, 6 deletions
diff --git a/sys/arch/i386/i386/esm.c b/sys/arch/i386/i386/esm.c index 54f9f6dd8e1..0f3e9f1fc43 100644 --- a/sys/arch/i386/i386/esm.c +++ b/sys/arch/i386/i386/esm.c @@ -1,4 +1,4 @@ -/* $OpenBSD: esm.c,v 1.56 2014/09/14 14:17:23 jsg Exp $ */ +/* $OpenBSD: esm.c,v 1.57 2014/12/10 12:27:56 mikeb Exp $ */ /* * Copyright (c) 2005 Jordan Hargrave <jordan@openbsd.org> @@ -45,6 +45,7 @@ int esmdebug = 3; int esm_match(struct device *, void *, void *); void esm_attach(struct device *, struct device *, void *); +int esm_activate(struct device *, int); enum esm_sensor_type { ESM_S_UNKNOWN, /* XXX */ @@ -124,7 +125,8 @@ struct esm_softc { }; struct cfattach esm_ca = { - sizeof(struct esm_softc), esm_match, esm_attach + sizeof(struct esm_softc), esm_match, esm_attach, + NULL, esm_activate }; struct cfdriver esm_cd = { @@ -274,6 +276,18 @@ esm_attach(struct device *parent, struct device *self, void *aux) } int +esm_activate(struct device *self, int act) +{ + switch (act) { + case DVACT_POWERDOWN: + wdog_shutdown(self); + break; + } + + return (0); +} + +int esm_watchdog(void *arg, int period) { struct esm_softc *sc = arg; diff --git a/sys/arch/i386/pci/elan520.c b/sys/arch/i386/pci/elan520.c index bf077dd7c43..c6fdf943de5 100644 --- a/sys/arch/i386/pci/elan520.c +++ b/sys/arch/i386/pci/elan520.c @@ -1,4 +1,4 @@ -/* $OpenBSD: elan520.c,v 1.20 2014/09/14 14:17:23 jsg Exp $ */ +/* $OpenBSD: elan520.c,v 1.21 2014/12/10 12:27:56 mikeb Exp $ */ /* $NetBSD: elan520.c,v 1.4 2002/10/02 05:47:15 thorpej Exp $ */ /*- @@ -70,6 +70,7 @@ struct elansc_softc { int elansc_match(struct device *, void *, void *); void elansc_attach(struct device *, struct device *, void *); +int elansc_activate(struct device *, int); void elansc_update_cpuspeed(void); void elansc_setperf(int); int elansc_cpuspeed(int *); @@ -86,7 +87,8 @@ void elansc_gpio_pin_ctl(void *, int, int); u_int elansc_tc_read(struct timecounter *); struct cfattach elansc_ca = { - sizeof(struct elansc_softc), elansc_match, elansc_attach + sizeof(struct elansc_softc), elansc_match, elansc_attach, + NULL, elansc_activate }; struct cfdriver elansc_cd = { @@ -231,6 +233,18 @@ elansc_attach(struct device *parent, struct device *self, void *aux) tc_init(tc); } +int +elansc_activate(struct device *self, int act) +{ + switch (act) { + case DVACT_POWERDOWN: + wdog_shutdown(self); + break; + } + + return (0); +} + u_int elansc_tc_read(struct timecounter *tc) { diff --git a/sys/arch/i386/pci/geodesc.c b/sys/arch/i386/pci/geodesc.c index b903ece0fc5..53415de9816 100644 --- a/sys/arch/i386/pci/geodesc.c +++ b/sys/arch/i386/pci/geodesc.c @@ -1,4 +1,4 @@ -/* $OpenBSD: geodesc.c,v 1.12 2012/12/05 23:20:12 deraadt Exp $ */ +/* $OpenBSD: geodesc.c,v 1.13 2014/12/10 12:27:56 mikeb Exp $ */ /* * Copyright (c) 2003 Markus Friedl <markus@openbsd.org> @@ -41,6 +41,7 @@ struct geodesc_softc { int geodesc_match(struct device *, void *, void *); void geodesc_attach(struct device *, struct device *, void *); +int geodesc_activate(struct device *, int); void sc1100_sysreset(void); #ifndef SMALL_KERNEL @@ -48,7 +49,8 @@ int geodesc_wdogctl_cb(void *, int); #endif /* SMALL_KERNEL */ struct cfattach geodesc_ca = { - sizeof(struct geodesc_softc), geodesc_match, geodesc_attach + sizeof(struct geodesc_softc), geodesc_match, geodesc_attach, + NULL, geodesc_activate }; struct cfdriver geodesc_cd = { @@ -131,6 +133,20 @@ geodesc_attach(struct device *parent, struct device *self, void *aux) cpuresetfn = sc1100_sysreset; } +int +geodesc_activate(struct device *self, int act) +{ + switch (act) { + case DVACT_POWERDOWN: +#ifndef SMALL_KERNEL + wdog_shutdown(self); +#endif + break; + } + + return (0); +} + #ifndef SMALL_KERNEL int geodesc_wdogctl_cb(void *self, int period) |