diff options
Diffstat (limited to 'sys/x86/acpica/acpi_apm.c')
-rw-r--r-- | sys/x86/acpica/acpi_apm.c | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/sys/x86/acpica/acpi_apm.c b/sys/x86/acpica/acpi_apm.c index be161cd6171b..919f76949dd4 100644 --- a/sys/x86/acpica/acpi_apm.c +++ b/sys/x86/acpica/acpi_apm.c @@ -64,6 +64,7 @@ static const struct filterops apm_readfiltops = { .f_isfd = 1, .f_detach = apmreadfiltdetach, .f_event = apmreadfilt, + .f_copy = knote_triv_copy, }; static struct cdevsw apm_cdevsw = { @@ -235,7 +236,7 @@ apmdtor(void *data) acpi_sc = clone->acpi_sc; /* We are about to lose a reference so check if suspend should occur */ - if (acpi_sc->acpi_next_sstate != 0 && + if (acpi_sc->acpi_next_stype != POWER_STYPE_AWAKE && clone->notify_status != APM_EV_ACKED) acpi_AckSleepState(clone, 0); @@ -283,10 +284,10 @@ apmioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flag, struct thread *td case APMIO_SUSPEND: if ((flag & FWRITE) == 0) return (EPERM); - if (acpi_sc->acpi_next_sstate == 0) { - if (acpi_sc->acpi_suspend_sx != ACPI_STATE_S5) { + if (acpi_sc->acpi_next_stype == POWER_STYPE_AWAKE) { + if (power_suspend_stype != POWER_STYPE_POWEROFF) { error = acpi_ReqSleepState(acpi_sc, - acpi_sc->acpi_suspend_sx); + power_suspend_stype); } else { printf( "power off via apm suspend not supported\n"); @@ -298,10 +299,10 @@ apmioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flag, struct thread *td case APMIO_STANDBY: if ((flag & FWRITE) == 0) return (EPERM); - if (acpi_sc->acpi_next_sstate == 0) { - if (acpi_sc->acpi_standby_sx != ACPI_STATE_S5) { + if (acpi_sc->acpi_next_stype == POWER_STYPE_AWAKE) { + if (power_standby_stype != POWER_STYPE_POWEROFF) { error = acpi_ReqSleepState(acpi_sc, - acpi_sc->acpi_standby_sx); + power_standby_stype); } else { printf( "power off via apm standby not supported\n"); @@ -313,10 +314,11 @@ apmioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flag, struct thread *td case APMIO_NEXTEVENT: printf("apm nextevent start\n"); ACPI_LOCK(acpi); - if (acpi_sc->acpi_next_sstate != 0 && clone->notify_status == - APM_EV_NONE) { + if (acpi_sc->acpi_next_stype != POWER_STYPE_AWAKE && + clone->notify_status == APM_EV_NONE) { ev_info = (struct apm_event_info *)addr; - if (acpi_sc->acpi_next_sstate <= ACPI_STATE_S3) + /* XXX Check this. */ + if (acpi_sc->acpi_next_stype == POWER_STYPE_STANDBY) ev_info->type = PMEV_STANDBYREQ; else ev_info->type = PMEV_SUSPENDREQ; @@ -392,7 +394,7 @@ apmpoll(struct cdev *dev, int events, struct thread *td) revents = 0; devfs_get_cdevpriv((void **)&clone); ACPI_LOCK(acpi); - if (clone->acpi_sc->acpi_next_sstate) + if (clone->acpi_sc->acpi_next_stype != POWER_STYPE_AWAKE) revents |= events & (POLLIN | POLLRDNORM); else selrecord(td, &clone->sel_read); @@ -433,7 +435,7 @@ apmreadfilt(struct knote *kn, long hint) ACPI_LOCK(acpi); clone = kn->kn_hook; - sleeping = clone->acpi_sc->acpi_next_sstate ? 1 : 0; + sleeping = clone->acpi_sc->acpi_next_stype != POWER_STYPE_AWAKE; ACPI_UNLOCK(acpi); return (sleeping); } |