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 <jmcne...@invisible.ca> @@ -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 */