diff options
-rw-r--r-- | sys/dev/acpi/acpi.c | 32 | ||||
-rw-r--r-- | sys/dev/acpi/acpibtn.c | 4 | ||||
-rw-r--r-- | sys/dev/acpi/acpisony.c | 4 | ||||
-rw-r--r-- | sys/dev/acpi/acpithinkpad.c | 6 | ||||
-rw-r--r-- | sys/dev/acpi/acpitoshiba.c | 6 | ||||
-rw-r--r-- | sys/dev/acpi/acpivar.h | 7 |
6 files changed, 33 insertions, 26 deletions
diff --git a/sys/dev/acpi/acpi.c b/sys/dev/acpi/acpi.c index 7837f52dcc1..0b4cdcc9c8c 100644 --- a/sys/dev/acpi/acpi.c +++ b/sys/dev/acpi/acpi.c @@ -1,4 +1,4 @@ -/* $OpenBSD: acpi.c,v 1.321 2017/02/22 16:39:56 jcs Exp $ */ +/* $OpenBSD: acpi.c,v 1.322 2017/02/28 10:39:07 natano Exp $ */ /* * Copyright (c) 2005 Thorsten Lockert <tholo@sigmasoft.com> * Copyright (c) 2005 Jordan Hargrave <jordan@openbsd.org> @@ -2346,21 +2346,23 @@ acpi_indicator(struct acpi_softc *sc, int led_state) int -acpi_sleep_state(struct acpi_softc *sc, int state) +acpi_sleep_state(struct acpi_softc *sc, int sleepmode) { extern int perflevel; extern int lid_suspend; int error = ENXIO; size_t rndbuflen = 0; char *rndbuf = NULL; - int s; + int state, s; - switch (state) { - case ACPI_STATE_S0: - return (0); - case ACPI_STATE_S1: - return (EOPNOTSUPP); - case ACPI_STATE_S5: /* only sleep states handled here */ + switch (sleepmode) { + case ACPI_SLEEP_SUSPEND: + state = ACPI_STATE_S3; + break; + case ACPI_SLEEP_HIBERNATE: + state = ACPI_STATE_S4; + break; + default: return (EOPNOTSUPP); } @@ -2389,7 +2391,7 @@ acpi_sleep_state(struct acpi_softc *sc, int state) stop_periodic_resettodr(); #ifdef HIBERNATE - if (state == ACPI_STATE_S4) { + if (sleepmode == ACPI_SLEEP_HIBERNATE) { uvmpd_hibernate(); hibernate_suspend_bufcache(); if (hibernate_alloc()) { @@ -2445,7 +2447,7 @@ acpi_sleep_state(struct acpi_softc *sc, int state) /* Resume */ #ifdef HIBERNATE - if (state == ACPI_STATE_S4) { + if (sleepmode == ACPI_SLEEP_HIBERNATE) { uvm_pmr_dirty_everything(); hib_getentropy(&rndbuf, &rndbuflen); } @@ -2482,7 +2484,7 @@ fail_quiesce: #ifdef HIBERNATE fail_alloc: - if (state == ACPI_STATE_S4) { + if (sleepmode == ACPI_SLEEP_HIBERNATE) { hibernate_free(); hibernate_resume_bufcache(); } @@ -2505,7 +2507,7 @@ fail_alloc: /* If we woke up but all the lids are closed, go back to sleep */ if (acpibtn_numopenlids() == 0 && lid_suspend != 0) - acpi_addtask(sc, acpi_sleep_task, sc, state); + acpi_addtask(sc, acpi_sleep_task, sc, sleepmode); fail_tts: return (error); @@ -3002,7 +3004,7 @@ acpiioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p) error = EBADF; break; } - acpi_addtask(sc, acpi_sleep_task, sc, ACPI_STATE_S3); + acpi_addtask(sc, acpi_sleep_task, sc, ACPI_SLEEP_SUSPEND); acpi_wakeup(sc); break; #ifdef HIBERNATE @@ -3017,7 +3019,7 @@ acpiioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p) error = EOPNOTSUPP; break; } - acpi_addtask(sc, acpi_sleep_task, sc, ACPI_STATE_S4); + acpi_addtask(sc, acpi_sleep_task, sc, ACPI_SLEEP_HIBERNATE); acpi_wakeup(sc); break; #endif diff --git a/sys/dev/acpi/acpibtn.c b/sys/dev/acpi/acpibtn.c index 2f5ca6bd647..badfc8f23b3 100644 --- a/sys/dev/acpi/acpibtn.c +++ b/sys/dev/acpi/acpibtn.c @@ -1,4 +1,4 @@ -/* $OpenBSD: acpibtn.c,v 1.42 2016/01/07 12:08:18 mpi Exp $ */ +/* $OpenBSD: acpibtn.c,v 1.43 2017/02/28 10:39:07 natano Exp $ */ /* * Copyright (c) 2005 Marco Peereboom <marco@openbsd.org> * @@ -244,7 +244,7 @@ sleep: /* Request to go to sleep */ if (acpi_record_event(sc->sc_acpi, APM_USER_SUSPEND_REQ)) acpi_addtask(sc->sc_acpi, acpi_sleep_task, - sc->sc_acpi, ACPI_STATE_S3); + sc->sc_acpi, ACPI_SLEEP_SUSPEND); break; } #endif /* SMALL_KERNEL */ diff --git a/sys/dev/acpi/acpisony.c b/sys/dev/acpi/acpisony.c index e26e0ef750a..3c09792d558 100644 --- a/sys/dev/acpi/acpisony.c +++ b/sys/dev/acpi/acpisony.c @@ -1,4 +1,4 @@ -/* $OpenBSD: acpisony.c,v 1.6 2014/09/14 14:17:24 jsg Exp $ */ +/* $OpenBSD: acpisony.c,v 1.7 2017/02/28 10:39:07 natano Exp $ */ /* * Copyright (c) 2010 Paul Irofti <pirofti@openbsd.org> * @@ -198,7 +198,7 @@ acpisony_notify(struct aml_node *node, int notify, void *arg) #ifndef SMALL_KERNEL if (acpi_record_event(sc->sc_acpi, APM_USER_SUSPEND_REQ)) acpi_addtask(sc->sc_acpi, acpi_sleep_task, - sc->sc_acpi, ACPI_STATE_S3); + sc->sc_acpi, ACPI_SLEEP_SUSPEND); #endif break; case SONY_NOTIFY_SUSPEND_RELEASED: diff --git a/sys/dev/acpi/acpithinkpad.c b/sys/dev/acpi/acpithinkpad.c index fecf33d2618..bd075c12703 100644 --- a/sys/dev/acpi/acpithinkpad.c +++ b/sys/dev/acpi/acpithinkpad.c @@ -1,4 +1,4 @@ -/* $OpenBSD: acpithinkpad.c,v 1.56 2017/02/25 20:09:20 jcs Exp $ */ +/* $OpenBSD: acpithinkpad.c,v 1.57 2017/02/28 10:39:07 natano Exp $ */ /* * Copyright (c) 2008 joshua stein <jcs@openbsd.org> * @@ -383,7 +383,7 @@ thinkpad_hotkey(struct aml_node *node, int notify_type, void *arg) #ifndef SMALL_KERNEL if (acpi_record_event(sc->sc_acpi, APM_USER_SUSPEND_REQ)) acpi_addtask(sc->sc_acpi, acpi_sleep_task, - sc->sc_acpi, ACPI_STATE_S3); + sc->sc_acpi, ACPI_SLEEP_SUSPEND); #endif handled = 1; break; @@ -409,7 +409,7 @@ thinkpad_hotkey(struct aml_node *node, int notify_type, void *arg) #if defined(HIBERNATE) && !defined(SMALL_KERNEL) if (acpi_record_event(sc->sc_acpi, APM_USER_HIBERNATE_REQ)) acpi_addtask(sc->sc_acpi, acpi_sleep_task, - sc->sc_acpi, ACPI_STATE_S4); + sc->sc_acpi, ACPI_SLEEP_HIBERNATE); #endif handled = 1; break; diff --git a/sys/dev/acpi/acpitoshiba.c b/sys/dev/acpi/acpitoshiba.c index 2eee9afc328..5e1f5864b93 100644 --- a/sys/dev/acpi/acpitoshiba.c +++ b/sys/dev/acpi/acpitoshiba.c @@ -1,4 +1,4 @@ -/* $OpenBSD: acpitoshiba.c,v 1.7 2017/02/25 20:09:20 jcs Exp $ */ +/* $OpenBSD: acpitoshiba.c,v 1.8 2017/02/28 10:39:07 natano Exp $ */ /*- * Copyright (c) 2003 Hiroyuki Aizu <aizu@navi.org> * All rights reserved. @@ -400,7 +400,7 @@ toshiba_hotkey(struct aml_node *node, int notify, void *arg) #ifndef SMALL_KERNEL if (acpi_record_event(sc->sc_acpi, APM_USER_SUSPEND_REQ)) { acpi_addtask(sc->sc_acpi, acpi_sleep_task, - sc->sc_acpi, ACPI_STATE_S3); + sc->sc_acpi, ACPI_SLEEP_SUSPEND); ret = HCI_SUCCESS; } #endif @@ -409,7 +409,7 @@ toshiba_hotkey(struct aml_node *node, int notify, void *arg) #if defined(HIBERNATE) && !defined(SMALL_KERNEL) if (acpi_record_event(sc->sc_acpi, APM_USER_HIBERNATE_REQ)) { acpi_addtask(sc->sc_acpi, acpi_sleep_task, - sc->sc_acpi, ACPI_STATE_S4); + sc->sc_acpi, ACPI_SLEEP_HIBERNATE); ret = HCI_SUCCESS; } #endif diff --git a/sys/dev/acpi/acpivar.h b/sys/dev/acpi/acpivar.h index bb6404ed0ed..d521a90ac3d 100644 --- a/sys/dev/acpi/acpivar.h +++ b/sys/dev/acpi/acpivar.h @@ -1,4 +1,4 @@ -/* $OpenBSD: acpivar.h,v 1.84 2017/02/22 16:39:56 jcs Exp $ */ +/* $OpenBSD: acpivar.h,v 1.85 2017/02/28 10:39:07 natano Exp $ */ /* * Copyright (c) 2005 Thorsten Lockert <tholo@sigmasoft.com> * @@ -307,6 +307,11 @@ void acpi_attach_machdep(struct acpi_softc *); int acpi_interrupt(void *); void acpi_powerdown(void); void acpi_reset(void); + + +#define ACPI_SLEEP_SUSPEND 0x01 +#define ACPI_SLEEP_HIBERNATE 0x02 + int acpi_sleep_state(struct acpi_softc *, int); void acpi_sleep_clocks(struct acpi_softc *, int); int acpi_sleep_cpu(struct acpi_softc *, int); |