diff options
author | iwasaki <iwasaki@FreeBSD.org> | 2001-10-26 17:43:05 +0000 |
---|---|---|
committer | iwasaki <iwasaki@FreeBSD.org> | 2001-10-26 17:43:05 +0000 |
commit | 1b24a8aa4e560f424c368bcc1fa8037f4773cea2 (patch) | |
tree | 21b123760e3f3009d3682b32acb590e02ad68027 /sys/dev/acpica/acpi_acad.c | |
parent | 5cf7b5f41f4236d42751f1ffbb7c54d5160772ca (diff) | |
download | FreeBSD-src-1b24a8aa4e560f424c368bcc1fa8037f4773cea2.zip FreeBSD-src-1b24a8aa4e560f424c368bcc1fa8037f4773cea2.tar.gz |
Add APM compatibility feature to ACPI.
This emulates APM device node interface APIs (mainly ioctl) and
provides APM services for the applications. The goal is to support
most of APM applications without any changes.
Implemented ioctls in this commit are:
- APMIO_SUSPEND (mapped ACPI S3 as default but changable by sysctl)
- APMIO_STANDBY (mapped ACPI S1 as default but changable by sysctl)
- APMIO_GETINFO and APMIO_GETINFO_OLD
- APMIO_GETPWSTATUS
With above, many APM applications which get batteries, ac-line
info. and transition the system into suspend/standby mode (such as
wmapm, xbatt) should work with ACPI enabled kernel (if ACPI works well :-)
Reviewed by: arch@, audit@ and some guys
Diffstat (limited to 'sys/dev/acpica/acpi_acad.c')
-rw-r--r-- | sys/dev/acpica/acpi_acad.c | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/sys/dev/acpica/acpi_acad.c b/sys/dev/acpica/acpi_acad.c index a20d3ee..5b4f751 100644 --- a/sys/dev/acpica/acpi_acad.c +++ b/sys/dev/acpica/acpi_acad.c @@ -207,18 +207,37 @@ acpi_acad_sysctl(SYSCTL_HANDLER_ARGS) { int val; int error; - device_t dev; + + if (acpi_acad_get_acline(&val)) { + return (ENXIO); + } + + val = *(u_int *)oidp->oid_arg1; + error = sysctl_handle_int(oidp, &val, 0, req); + return (error); +} + +/* + * Public interfaces. + */ + +int +acpi_acad_get_acline(int *status) +{ + device_t dev; struct acpi_acad_softc *sc; if ((dev = devclass_get_device(acpi_acad_devclass, 0)) == NULL) { return (ENXIO); } + if ((sc = device_get_softc(dev)) == NULL) { return (ENXIO); } + acpi_acad_get_status(dev); - val = *(u_int *)oidp->oid_arg1; - error = sysctl_handle_int(oidp, &val, 0, req); - return (error); + *status = sc->status; + + return (0); } |