summaryrefslogtreecommitdiffstats
path: root/sys/dev/acpica/acpi_acad.c
diff options
context:
space:
mode:
authoriwasaki <iwasaki@FreeBSD.org>2001-10-26 17:43:05 +0000
committeriwasaki <iwasaki@FreeBSD.org>2001-10-26 17:43:05 +0000
commit1b24a8aa4e560f424c368bcc1fa8037f4773cea2 (patch)
tree21b123760e3f3009d3682b32acb590e02ad68027 /sys/dev/acpica/acpi_acad.c
parent5cf7b5f41f4236d42751f1ffbb7c54d5160772ca (diff)
downloadFreeBSD-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.c27
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);
}
OpenPOWER on IntegriCloud