Module Name: src Committed By: jmcneill Date: Sun Oct 24 15:07:20 UTC 2010
Modified Files: src/sys/dev/acpi/wmi: wmi_acpi.c Log Message: add rescan support To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 src/sys/dev/acpi/wmi/wmi_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/wmi/wmi_acpi.c diff -u src/sys/dev/acpi/wmi/wmi_acpi.c:1.7 src/sys/dev/acpi/wmi/wmi_acpi.c:1.8 --- src/sys/dev/acpi/wmi/wmi_acpi.c:1.7 Fri Aug 6 22:45:00 2010 +++ src/sys/dev/acpi/wmi/wmi_acpi.c Sun Oct 24 15:07:20 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: wmi_acpi.c,v 1.7 2010/08/06 22:45:00 jruoho Exp $ */ +/* $NetBSD: wmi_acpi.c,v 1.8 2010/10/24 15:07:20 jmcneill Exp $ */ /*- * Copyright (c) 2009, 2010 Jukka Ruohonen <jruoho...@iki.fi> @@ -27,7 +27,7 @@ * SUCH DAMAGE. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: wmi_acpi.c,v 1.7 2010/08/06 22:45:00 jruoho Exp $"); +__KERNEL_RCSID(0, "$NetBSD: wmi_acpi.c,v 1.8 2010/10/24 15:07:20 jmcneill Exp $"); #include <sys/param.h> #include <sys/device.h> @@ -54,6 +54,8 @@ static int acpi_wmi_match(device_t, cfdata_t, void *); static void acpi_wmi_attach(device_t, device_t, void *); static int acpi_wmi_detach(device_t, int); +static int acpi_wmi_rescan(device_t, const char *, const int *); +static void acpi_wmi_childdet(device_t, device_t); static int acpi_wmi_print(void *, const char *); static bool acpi_wmi_init(struct acpi_wmi_softc *); static bool acpi_wmi_add(struct acpi_wmi_softc *, ACPI_OBJECT *); @@ -76,8 +78,9 @@ NULL }; -CFATTACH_DECL_NEW(acpiwmi, sizeof(struct acpi_wmi_softc), - acpi_wmi_match, acpi_wmi_attach, acpi_wmi_detach, NULL); +CFATTACH_DECL2_NEW(acpiwmi, sizeof(struct acpi_wmi_softc), + acpi_wmi_match, acpi_wmi_attach, acpi_wmi_detach, NULL, + acpi_wmi_rescan, acpi_wmi_childdet); static int acpi_wmi_match(device_t parent, cfdata_t match, void *aux) @@ -111,8 +114,7 @@ acpi_wmi_dump(sc); acpi_wmi_event_add(sc); - sc->sc_child = config_found_ia(self, "acpiwmibus", - NULL, acpi_wmi_print); + acpi_wmi_rescan(self, NULL, NULL); (void)pmf_device_register(self, acpi_wmi_suspend, acpi_wmi_resume); } @@ -134,6 +136,27 @@ } static int +acpi_wmi_rescan(device_t self, const char *ifattr, const int *locators) +{ + struct acpi_wmi_softc *sc = device_private(self); + + if (ifattr_match(ifattr, "acpiwmibus") && sc->sc_child == NULL) + sc->sc_child = config_found_ia(self, "acpiwmibus", + NULL, acpi_wmi_print); + + return 0; +} + +static void +acpi_wmi_childdet(device_t self, device_t child) +{ + struct acpi_wmi_softc *sc = device_private(self); + + if (sc->sc_child == child) + sc->sc_child = NULL; +} + +static int acpi_wmi_print(void *aux, const char *pnp) {