Module Name: src
Committed By: jruoho
Date: Sun Feb 28 17:22:41 UTC 2010
Modified Files:
src/sys/dev/acpi: acpi_acad.c acpi_bat.c acpi_button.c acpi_lid.c
thinkpad_acpi.c
Log Message:
Introduce support for ACPI kernel modules.
Tested on couple of laptops.
To generate a diff of this commit:
cvs rdiff -u -r1.40 -r1.41 src/sys/dev/acpi/acpi_acad.c
cvs rdiff -u -r1.82 -r1.83 src/sys/dev/acpi/acpi_bat.c
cvs rdiff -u -r1.30 -r1.31 src/sys/dev/acpi/acpi_button.c
cvs rdiff -u -r1.34 -r1.35 src/sys/dev/acpi/acpi_lid.c
cvs rdiff -u -r1.26 -r1.27 src/sys/dev/acpi/thinkpad_acpi.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/acpi/acpi_acad.c
diff -u src/sys/dev/acpi/acpi_acad.c:1.40 src/sys/dev/acpi/acpi_acad.c:1.41
--- src/sys/dev/acpi/acpi_acad.c:1.40 Wed Feb 24 22:37:56 2010
+++ src/sys/dev/acpi/acpi_acad.c Sun Feb 28 17:22:41 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: acpi_acad.c,v 1.40 2010/02/24 22:37:56 dyoung Exp $ */
+/* $NetBSD: acpi_acad.c,v 1.41 2010/02/28 17:22:41 jruoho Exp $ */
/*
* Copyright 2001 Wasabi Systems, Inc.
@@ -40,11 +40,12 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: acpi_acad.c,v 1.40 2010/02/24 22:37:56 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: acpi_acad.c,v 1.41 2010/02/28 17:22:41 jruoho Exp $");
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/device.h>
+#include <sys/module.h>
#include <sys/mutex.h>
#include <dev/acpi/acpica.h>
@@ -301,3 +302,79 @@
sysmon_envsys_destroy(sc->sc_sme);
sc->sc_sme = NULL;
}
+
+#ifdef _MODULE
+
+MODULE(MODULE_CLASS_DRIVER, acpiacad, NULL);
+CFDRIVER_DECL(acpiacad, DV_DULL, NULL);
+
+static int acpiacadloc[] = { -1 };
+extern struct cfattach acpiacad_ca;
+
+static struct cfparent acpiparent = {
+ "acpinodebus", NULL, DVUNIT_ANY
+};
+
+static struct cfdata acpiacad_cfdata[] = {
+ {
+ .cf_name = "acpiacad",
+ .cf_atname = "acpiacad",
+ .cf_unit = 0,
+ .cf_fstate = FSTATE_STAR,
+ .cf_loc = acpiacadloc,
+ .cf_flags = 0,
+ .cf_pspec = &acpiparent,
+ },
+
+ { NULL }
+};
+
+static int
+acpiacad_modcmd(modcmd_t cmd, void *context)
+{
+ int err;
+
+ switch (cmd) {
+
+ case MODULE_CMD_INIT:
+
+ err = config_cfdriver_attach(&acpiacad_cd);
+
+ if (err != 0)
+ return err;
+
+ err = config_cfattach_attach("acpiacad", &acpiacad_ca);
+
+ if (err != 0) {
+ config_cfdriver_detach(&acpiacad_cd);
+ return err;
+ }
+
+ err = config_cfdata_attach(acpiacad_cfdata, 1);
+
+ if (err != 0) {
+ config_cfattach_detach("acpiacad", &acpiacad_ca);
+ config_cfdriver_detach(&acpiacad_cd);
+ return err;
+ }
+
+ return 0;
+
+ case MODULE_CMD_FINI:
+
+ err = config_cfdata_detach(acpiacad_cfdata);
+
+ if (err != 0)
+ return err;
+
+ config_cfattach_detach("acpiacad", &acpiacad_ca);
+ config_cfdriver_detach(&acpiacad_cd);
+
+ return 0;
+
+ default:
+ return ENOTTY;
+ }
+}
+
+#endif /* _MODULE */
Index: src/sys/dev/acpi/acpi_bat.c
diff -u src/sys/dev/acpi/acpi_bat.c:1.82 src/sys/dev/acpi/acpi_bat.c:1.83
--- src/sys/dev/acpi/acpi_bat.c:1.82 Wed Feb 24 22:37:56 2010
+++ src/sys/dev/acpi/acpi_bat.c Sun Feb 28 17:22:41 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: acpi_bat.c,v 1.82 2010/02/24 22:37:56 dyoung Exp $ */
+/* $NetBSD: acpi_bat.c,v 1.83 2010/02/28 17:22:41 jruoho Exp $ */
/*-
* Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -75,13 +75,14 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: acpi_bat.c,v 1.82 2010/02/24 22:37:56 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: acpi_bat.c,v 1.83 2010/02/28 17:22:41 jruoho Exp $");
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/kernel.h> /* for hz */
#include <sys/kmem.h>
#include <sys/device.h>
+#include <sys/module.h>
#include <sys/mutex.h>
#include <dev/sysmon/sysmonvar.h>
@@ -782,3 +783,79 @@
return true;
}
+
+#ifdef _MODULE
+
+MODULE(MODULE_CLASS_DRIVER, acpibat, NULL);
+CFDRIVER_DECL(acpibat, DV_DULL, NULL);
+
+static int acpibatloc[] = { -1 };
+extern struct cfattach acpibat_ca;
+
+static struct cfparent acpiparent = {
+ "acpinodebus", NULL, DVUNIT_ANY
+};
+
+static struct cfdata acpibat_cfdata[] = {
+ {
+ .cf_name = "acpibat",
+ .cf_atname = "acpibat",
+ .cf_unit = 0,
+ .cf_fstate = FSTATE_STAR,
+ .cf_loc = acpibatloc,
+ .cf_flags = 0,
+ .cf_pspec = &acpiparent,
+ },
+
+ { NULL }
+};
+
+static int
+acpibat_modcmd(modcmd_t cmd, void *context)
+{
+ int err;
+
+ switch (cmd) {
+
+ case MODULE_CMD_INIT:
+
+ err = config_cfdriver_attach(&acpibat_cd);
+
+ if (err != 0)
+ return err;
+
+ err = config_cfattach_attach("acpibat", &acpibat_ca);
+
+ if (err != 0) {
+ config_cfdriver_detach(&acpibat_cd);
+ return err;
+ }
+
+ err = config_cfdata_attach(acpibat_cfdata, 1);
+
+ if (err != 0) {
+ config_cfattach_detach("acpibat", &acpibat_ca);
+ config_cfdriver_detach(&acpibat_cd);
+ return err;
+ }
+
+ return 0;
+
+ case MODULE_CMD_FINI:
+
+ err = config_cfdata_detach(acpibat_cfdata);
+
+ if (err != 0)
+ return err;
+
+ config_cfattach_detach("acpibat", &acpibat_ca);
+ config_cfdriver_detach(&acpibat_cd);
+
+ return 0;
+
+ default:
+ return ENOTTY;
+ }
+}
+
+#endif /* _MODULE */
Index: src/sys/dev/acpi/acpi_button.c
diff -u src/sys/dev/acpi/acpi_button.c:1.30 src/sys/dev/acpi/acpi_button.c:1.31
--- src/sys/dev/acpi/acpi_button.c:1.30 Sun Jan 31 06:10:53 2010
+++ src/sys/dev/acpi/acpi_button.c Sun Feb 28 17:22:41 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: acpi_button.c,v 1.30 2010/01/31 06:10:53 jruoho Exp $ */
+/* $NetBSD: acpi_button.c,v 1.31 2010/02/28 17:22:41 jruoho Exp $ */
/*
* Copyright 2001, 2003 Wasabi Systems, Inc.
@@ -40,11 +40,12 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: acpi_button.c,v 1.30 2010/01/31 06:10:53 jruoho Exp $");
+__KERNEL_RCSID(0, "$NetBSD: acpi_button.c,v 1.31 2010/02/28 17:22:41 jruoho Exp $");
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/device.h>
+#include <sys/module.h>
#include <dev/acpi/acpica.h>
#include <dev/acpi/acpireg.h>
@@ -231,3 +232,79 @@
notify);
}
}
+
+#ifdef _MODULE
+
+MODULE(MODULE_CLASS_DRIVER, acpibut, NULL);
+CFDRIVER_DECL(acpibut, DV_DULL, NULL);
+
+static int acpibutloc[] = { -1 };
+extern struct cfattach acpibut_ca;
+
+static struct cfparent acpiparent = {
+ "acpinodebus", NULL, DVUNIT_ANY
+};
+
+static struct cfdata acpibut_cfdata[] = {
+ {
+ .cf_name = "acpibut",
+ .cf_atname = "acpibut",
+ .cf_unit = 0,
+ .cf_fstate = FSTATE_STAR,
+ .cf_loc = acpibutloc,
+ .cf_flags = 0,
+ .cf_pspec = &acpiparent,
+ },
+
+ { NULL }
+};
+
+static int
+acpibut_modcmd(modcmd_t cmd, void *context)
+{
+ int err;
+
+ switch (cmd) {
+
+ case MODULE_CMD_INIT:
+
+ err = config_cfdriver_attach(&acpibut_cd);
+
+ if (err != 0)
+ return err;
+
+ err = config_cfattach_attach("acpibut", &acpibut_ca);
+
+ if (err != 0) {
+ config_cfdriver_detach(&acpibut_cd);
+ return err;
+ }
+
+ err = config_cfdata_attach(acpibut_cfdata, 1);
+
+ if (err != 0) {
+ config_cfattach_detach("acpibut", &acpibut_ca);
+ config_cfdriver_detach(&acpibut_cd);
+ return err;
+ }
+
+ return 0;
+
+ case MODULE_CMD_FINI:
+
+ err = config_cfdata_detach(acpibut_cfdata);
+
+ if (err != 0)
+ return err;
+
+ config_cfattach_detach("acpibut", &acpibut_ca);
+ config_cfdriver_detach(&acpibut_cd);
+
+ return 0;
+
+ default:
+ return ENOTTY;
+ }
+}
+
+#endif /* _MODULE */
Index: src/sys/dev/acpi/acpi_lid.c
diff -u src/sys/dev/acpi/acpi_lid.c:1.34 src/sys/dev/acpi/acpi_lid.c:1.35
--- src/sys/dev/acpi/acpi_lid.c:1.34 Sun Feb 28 09:23:30 2010
+++ src/sys/dev/acpi/acpi_lid.c Sun Feb 28 17:22:41 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: acpi_lid.c,v 1.34 2010/02/28 09:23:30 jruoho Exp $ */
+/* $NetBSD: acpi_lid.c,v 1.35 2010/02/28 17:22:41 jruoho Exp $ */
/*
* Copyright 2001, 2003 Wasabi Systems, Inc.
@@ -40,11 +40,12 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: acpi_lid.c,v 1.34 2010/02/28 09:23:30 jruoho Exp $");
+__KERNEL_RCSID(0, "$NetBSD: acpi_lid.c,v 1.35 2010/02/28 17:22:41 jruoho Exp $");
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/device.h>
+#include <sys/module.h>
#include <dev/acpi/acpica.h>
#include <dev/acpi/acpireg.h>
@@ -234,3 +235,79 @@
return true;
}
+
+#ifdef _MODULE
+
+MODULE(MODULE_CLASS_DRIVER, acpilid, NULL);
+CFDRIVER_DECL(acpilid, DV_DULL, NULL);
+
+static int acpilidloc[] = { -1 };
+extern struct cfattach acpilid_ca;
+
+static struct cfparent acpiparent = {
+ "acpinodebus", NULL, DVUNIT_ANY
+};
+
+static struct cfdata acpilid_cfdata[] = {
+ {
+ .cf_name = "acpilid",
+ .cf_atname = "acpilid",
+ .cf_unit = 0,
+ .cf_fstate = FSTATE_STAR,
+ .cf_loc = acpilidloc,
+ .cf_flags = 0,
+ .cf_pspec = &acpiparent,
+ },
+
+ { NULL }
+};
+
+static int
+acpilid_modcmd(modcmd_t cmd, void *context)
+{
+ int err;
+
+ switch (cmd) {
+
+ case MODULE_CMD_INIT:
+
+ err = config_cfdriver_attach(&acpilid_cd);
+
+ if (err != 0)
+ return err;
+
+ err = config_cfattach_attach("acpilid", &acpilid_ca);
+
+ if (err != 0) {
+ config_cfdriver_detach(&acpilid_cd);
+ return err;
+ }
+
+ err = config_cfdata_attach(acpilid_cfdata, 1);
+
+ if (err != 0) {
+ config_cfattach_detach("acpilid", &acpilid_ca);
+ config_cfdriver_detach(&acpilid_cd);
+ return err;
+ }
+
+ return 0;
+
+ case MODULE_CMD_FINI:
+
+ err = config_cfdata_detach(acpilid_cfdata);
+
+ if (err != 0)
+ return err;
+
+ config_cfattach_detach("acpilid", &acpilid_ca);
+ config_cfdriver_detach(&acpilid_cd);
+
+ return 0;
+
+ default:
+ return ENOTTY;
+ }
+}
+
+#endif /* _MODULE */
Index: src/sys/dev/acpi/thinkpad_acpi.c
diff -u src/sys/dev/acpi/thinkpad_acpi.c:1.26 src/sys/dev/acpi/thinkpad_acpi.c:1.27
--- src/sys/dev/acpi/thinkpad_acpi.c:1.26 Wed Feb 24 22:37:56 2010
+++ src/sys/dev/acpi/thinkpad_acpi.c Sun Feb 28 17:22:41 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: thinkpad_acpi.c,v 1.26 2010/02/24 22:37:56 dyoung Exp $ */
+/* $NetBSD: thinkpad_acpi.c,v 1.27 2010/02/28 17:22:41 jruoho Exp $ */
/*-
* Copyright (c) 2007 Jared D. McNeill <[email protected]>
@@ -27,11 +27,12 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: thinkpad_acpi.c,v 1.26 2010/02/24 22:37:56 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: thinkpad_acpi.c,v 1.27 2010/02/28 17:22:41 jruoho Exp $");
#include <sys/types.h>
#include <sys/param.h>
#include <sys/malloc.h>
+#include <sys/module.h>
#include <sys/buf.h>
#include <sys/callout.h>
#include <sys/kernel.h>
@@ -673,3 +674,79 @@
return true;
}
+
+#ifdef _MODULE
+
+MODULE(MODULE_CLASS_DRIVER, thinkpad, NULL);
+CFDRIVER_DECL(thinkpad, DV_DULL, NULL);
+
+static int thinkpadloc[] = { -1 };
+extern struct cfattach thinkpad_ca;
+
+static struct cfparent acpiparent = {
+ "acpinodebus", NULL, DVUNIT_ANY
+};
+
+static struct cfdata thinkpad_cfdata[] = {
+ {
+ .cf_name = "thinkpad",
+ .cf_atname = "thinkpad",
+ .cf_unit = 0,
+ .cf_fstate = FSTATE_STAR,
+ .cf_loc = thinkpadloc,
+ .cf_flags = 0,
+ .cf_pspec = &acpiparent,
+ },
+
+ { NULL }
+};
+
+static int
+thinkpad_modcmd(modcmd_t cmd, void *opaque)
+{
+ int err;
+
+ switch (cmd) {
+
+ case MODULE_CMD_INIT:
+
+ err = config_cfdriver_attach(&thinkpad_cd);
+
+ if (err != 0)
+ return err;
+
+ err = config_cfattach_attach("thinkpad", &thinkpad_ca);
+
+ if (err != 0) {
+ config_cfdriver_detach(&thinkpad_cd);
+ return err;
+ }
+
+ err = config_cfdata_attach(thinkpad_cfdata, 1);
+
+ if (err != 0) {
+ config_cfattach_detach("thinkpad", &thinkpad_ca);
+ config_cfdriver_detach(&thinkpad_cd);
+ return err;
+ }
+
+ return 0;
+
+ case MODULE_CMD_FINI:
+
+ err = config_cfdata_detach(thinkpad_cfdata);
+
+ if (err != 0)
+ return err;
+
+ config_cfattach_detach("thinkpad", &thinkpad_ca);
+ config_cfdriver_detach(&thinkpad_cd);
+
+ return 0;
+
+ default:
+ return ENOTTY;
+ }
+}
+
+#endif /* _MODULE */