As discussed with jmcneill@, install a global "bus notification handler"
that receives all notifications and deliver notifications to drivers via it.
This commit is contained in:
parent
b97f222512
commit
55052eca77
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: acpi.c,v 1.174 2010/04/15 04:03:38 jruoho Exp $ */
|
||||
/* $NetBSD: acpi.c,v 1.175 2010/04/15 07:02:24 jruoho Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2003, 2007 The NetBSD Foundation, Inc.
|
||||
|
@ -65,7 +65,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: acpi.c,v 1.174 2010/04/15 04:03:38 jruoho Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: acpi.c,v 1.175 2010/04/15 07:02:24 jruoho Exp $");
|
||||
|
||||
#include "opt_acpi.h"
|
||||
#include "opt_pcifixup.h"
|
||||
|
@ -175,6 +175,8 @@ static void acpi_rescan_nodes(struct acpi_softc *);
|
|||
static void acpi_rescan_capabilities(struct acpi_softc *);
|
||||
static int acpi_print(void *aux, const char *);
|
||||
|
||||
static void acpi_notify_handler(ACPI_HANDLE, uint32_t, void *);
|
||||
|
||||
static void acpi_register_fixed_button(struct acpi_softc *, int);
|
||||
static void acpi_deregister_fixed_button(struct acpi_softc *, int);
|
||||
static uint32_t acpi_fixed_button_handler(void *);
|
||||
|
@ -446,6 +448,21 @@ acpi_attach(device_t parent, device_t self, void *aux)
|
|||
|
||||
rv = AcpiInitializeObjects(ACPI_FULL_INITIALIZATION);
|
||||
|
||||
if (ACPI_FAILURE(rv))
|
||||
goto fail;
|
||||
|
||||
/*
|
||||
* Install global notify handlers.
|
||||
*/
|
||||
rv = AcpiInstallNotifyHandler(ACPI_ROOT_OBJECT,
|
||||
ACPI_SYSTEM_NOTIFY, acpi_notify_handler, NULL);
|
||||
|
||||
if (ACPI_FAILURE(rv))
|
||||
goto fail;
|
||||
|
||||
rv = AcpiInstallNotifyHandler(ACPI_ROOT_OBJECT,
|
||||
ACPI_DEVICE_NOTIFY, acpi_notify_handler, NULL);
|
||||
|
||||
if (ACPI_FAILURE(rv))
|
||||
goto fail;
|
||||
|
||||
|
@ -502,8 +519,21 @@ static int
|
|||
acpi_detach(device_t self, int flags)
|
||||
{
|
||||
struct acpi_softc *sc = device_private(self);
|
||||
ACPI_STATUS rv;
|
||||
int rc;
|
||||
|
||||
rv = AcpiRemoveNotifyHandler(ACPI_ROOT_OBJECT,
|
||||
ACPI_SYSTEM_NOTIFY, acpi_notify_handler);
|
||||
|
||||
if (ACPI_FAILURE(rv))
|
||||
return EBUSY;
|
||||
|
||||
rv = AcpiRemoveNotifyHandler(ACPI_ROOT_OBJECT,
|
||||
ACPI_DEVICE_NOTIFY, acpi_notify_handler);
|
||||
|
||||
if (ACPI_FAILURE(rv))
|
||||
return EBUSY;
|
||||
|
||||
if ((rc = config_detach_children(self, flags)) != 0)
|
||||
return rc;
|
||||
|
||||
|
@ -609,10 +639,12 @@ acpi_make_devnode(ACPI_HANDLE handle, uint32_t level,
|
|||
if (ad == NULL)
|
||||
return AE_NO_MEMORY;
|
||||
|
||||
ad->ad_device = NULL;
|
||||
ad->ad_parent = sc->sc_dev;
|
||||
ad->ad_devinfo = devinfo;
|
||||
ad->ad_handle = handle;
|
||||
|
||||
ad->ad_type = type;
|
||||
ad->ad_handle = handle;
|
||||
ad->ad_devinfo = devinfo;
|
||||
|
||||
anu = (ACPI_NAME_UNION *)&devinfo->Name;
|
||||
ad->ad_name[4] = '\0';
|
||||
|
@ -1048,6 +1080,104 @@ acpi_print(void *aux, const char *pnp)
|
|||
return UNCONF;
|
||||
}
|
||||
|
||||
/*
|
||||
* Notify.
|
||||
*/
|
||||
static void
|
||||
acpi_notify_handler(ACPI_HANDLE handle, uint32_t event, void *aux)
|
||||
{
|
||||
struct acpi_softc *sc = acpi_softc;
|
||||
struct acpi_devnode *ad;
|
||||
|
||||
KASSERT(sc != NULL);
|
||||
KASSERT(aux == NULL);
|
||||
KASSERT(acpi_active != 0);
|
||||
|
||||
if (acpi_suspended != 0)
|
||||
return;
|
||||
|
||||
/*
|
||||
* System: 0x00 - 0x7F.
|
||||
* Device: 0x80 - 0xFF.
|
||||
*/
|
||||
switch (event) {
|
||||
|
||||
case ACPI_NOTIFY_BUS_CHECK:
|
||||
case ACPI_NOTIFY_DEVICE_CHECK:
|
||||
case ACPI_NOTIFY_DEVICE_WAKE:
|
||||
case ACPI_NOTIFY_EJECT_REQUEST:
|
||||
case ACPI_NOTIFY_DEVICE_CHECK_LIGHT:
|
||||
case ACPI_NOTIFY_FREQUENCY_MISMATCH:
|
||||
case ACPI_NOTIFY_BUS_MODE_MISMATCH:
|
||||
case ACPI_NOTIFY_POWER_FAULT:
|
||||
case ACPI_NOTIFY_CAPABILITIES_CHECK:
|
||||
case ACPI_NOTIFY_DEVICE_PLD_CHECK:
|
||||
case ACPI_NOTIFY_RESERVED:
|
||||
case ACPI_NOTIFY_LOCALITY_UPDATE:
|
||||
break;
|
||||
}
|
||||
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "notification 0x%02X for "
|
||||
"%s (%p)\n", event, acpi_name(handle), handle));
|
||||
|
||||
/*
|
||||
* We deliver notifications only to drivers
|
||||
* that have been succesfully attached and
|
||||
* that have registered a handler with us.
|
||||
* The opaque pointer is always the device_t.
|
||||
*/
|
||||
SIMPLEQ_FOREACH(ad, &sc->sc_devnodes, ad_list) {
|
||||
|
||||
if (ad->ad_device == NULL)
|
||||
continue;
|
||||
|
||||
if (ad->ad_notify == NULL)
|
||||
continue;
|
||||
|
||||
if (ad->ad_handle != handle)
|
||||
continue;
|
||||
|
||||
(*ad->ad_notify)(ad->ad_handle, event, ad->ad_device);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
aprint_debug_dev(sc->sc_dev, "unhandled notify 0x%02X "
|
||||
"for %s (%p)\n", event, acpi_name(handle), handle);
|
||||
}
|
||||
|
||||
bool
|
||||
acpi_register_notify(struct acpi_devnode *ad, ACPI_NOTIFY_HANDLER notify)
|
||||
{
|
||||
struct acpi_softc *sc = acpi_softc;
|
||||
|
||||
KASSERT(sc != NULL);
|
||||
KASSERT(acpi_active != 0);
|
||||
|
||||
if (acpi_suspended != 0)
|
||||
goto fail;
|
||||
|
||||
if (ad == NULL || notify == NULL)
|
||||
goto fail;
|
||||
|
||||
ad->ad_notify = notify;
|
||||
|
||||
return true;
|
||||
|
||||
fail:
|
||||
aprint_error_dev(sc->sc_dev, "failed to register notify "
|
||||
"handler for %s (%p)\n", ad->ad_name, ad->ad_handle);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void
|
||||
acpi_deregister_notify(struct acpi_devnode *ad)
|
||||
{
|
||||
|
||||
ad->ad_notify = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Fixed buttons.
|
||||
*/
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: acpi_acad.c,v 1.42 2010/03/05 14:00:16 jruoho Exp $ */
|
||||
/* $NetBSD: acpi_acad.c,v 1.43 2010/04/15 07:02:24 jruoho Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 2001 Wasabi Systems, Inc.
|
||||
|
@ -40,7 +40,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: acpi_acad.c,v 1.42 2010/03/05 14:00:16 jruoho Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: acpi_acad.c,v 1.43 2010/04/15 07:02:24 jruoho Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/device.h>
|
||||
|
@ -105,7 +105,6 @@ acpiacad_attach(device_t parent, device_t self, void *aux)
|
|||
{
|
||||
struct acpiacad_softc *sc = device_private(self);
|
||||
struct acpi_attach_args *aa = aux;
|
||||
ACPI_STATUS rv;
|
||||
|
||||
aprint_naive(": ACPI AC Adapter\n");
|
||||
aprint_normal(": ACPI AC Adapter\n");
|
||||
|
@ -114,6 +113,7 @@ acpiacad_attach(device_t parent, device_t self, void *aux)
|
|||
sc->sc_status = -1;
|
||||
sc->sc_node = aa->aa_node;
|
||||
|
||||
acpiacad_init_envsys(self);
|
||||
mutex_init(&sc->sc_mutex, MUTEX_DEFAULT, IPL_NONE);
|
||||
|
||||
sc->sc_smpsw.smpsw_name = device_xname(self);
|
||||
|
@ -121,12 +121,7 @@ acpiacad_attach(device_t parent, device_t self, void *aux)
|
|||
|
||||
(void)sysmon_pswitch_register(&sc->sc_smpsw);
|
||||
(void)pmf_device_register(self, NULL, acpiacad_resume);
|
||||
|
||||
rv = AcpiInstallNotifyHandler(sc->sc_node->ad_handle,
|
||||
ACPI_ALL_NOTIFY, acpiacad_notify_handler, self);
|
||||
|
||||
if (ACPI_SUCCESS(rv))
|
||||
acpiacad_init_envsys(self);
|
||||
(void)acpi_register_notify(sc->sc_node, acpiacad_notify_handler);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -138,13 +133,8 @@ static int
|
|||
acpiacad_detach(device_t self, int flags)
|
||||
{
|
||||
struct acpiacad_softc *sc = device_private(self);
|
||||
ACPI_STATUS rv;
|
||||
|
||||
rv = AcpiRemoveNotifyHandler(sc->sc_node->ad_handle,
|
||||
ACPI_ALL_NOTIFY, acpiacad_notify_handler);
|
||||
|
||||
if (ACPI_FAILURE(rv))
|
||||
return EBUSY;
|
||||
acpi_deregister_notify(sc->sc_node);
|
||||
|
||||
mutex_destroy(&sc->sc_mutex);
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: acpi_bat.c,v 1.99 2010/04/14 19:27:28 jruoho Exp $ */
|
||||
/* $NetBSD: acpi_bat.c,v 1.100 2010/04/15 07:02:24 jruoho Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2003 The NetBSD Foundation, Inc.
|
||||
|
@ -75,7 +75,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: acpi_bat.c,v 1.99 2010/04/14 19:27:28 jruoho Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: acpi_bat.c,v 1.100 2010/04/15 07:02:24 jruoho Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/condvar.h>
|
||||
|
@ -217,7 +217,6 @@ acpibat_attach(device_t parent, device_t self, void *aux)
|
|||
{
|
||||
struct acpibat_softc *sc = device_private(self);
|
||||
struct acpi_attach_args *aa = aux;
|
||||
ACPI_STATUS rv;
|
||||
|
||||
aprint_naive(": ACPI Battery\n");
|
||||
aprint_normal(": ACPI Battery\n");
|
||||
|
@ -234,16 +233,8 @@ acpibat_attach(device_t parent, device_t self, void *aux)
|
|||
mutex_init(&sc->sc_mutex, MUTEX_DEFAULT, IPL_NONE);
|
||||
cv_init(&sc->sc_condvar, device_xname(self));
|
||||
|
||||
if (pmf_device_register(self, NULL, acpibat_resume) != true)
|
||||
aprint_error_dev(self, "couldn't establish power handler\n");
|
||||
|
||||
rv = AcpiInstallNotifyHandler(sc->sc_node->ad_handle,
|
||||
ACPI_ALL_NOTIFY, acpibat_notify_handler, self);
|
||||
|
||||
if (ACPI_FAILURE(rv)) {
|
||||
aprint_error_dev(self, "couldn't install notify handler\n");
|
||||
return;
|
||||
}
|
||||
(void)pmf_device_register(self, NULL, acpibat_resume);
|
||||
(void)acpi_register_notify(sc->sc_node, acpibat_notify_handler);
|
||||
|
||||
sc->sc_sensor = kmem_zalloc(ACPIBAT_COUNT *
|
||||
sizeof(*sc->sc_sensor), KM_SLEEP);
|
||||
|
@ -263,13 +254,8 @@ static int
|
|||
acpibat_detach(device_t self, int flags)
|
||||
{
|
||||
struct acpibat_softc *sc = device_private(self);
|
||||
ACPI_STATUS rv;
|
||||
|
||||
rv = AcpiRemoveNotifyHandler(sc->sc_node->ad_handle,
|
||||
ACPI_ALL_NOTIFY, acpibat_notify_handler);
|
||||
|
||||
if (ACPI_FAILURE(rv))
|
||||
return EBUSY;
|
||||
acpi_deregister_notify(sc->sc_node);
|
||||
|
||||
cv_destroy(&sc->sc_condvar);
|
||||
mutex_destroy(&sc->sc_mutex);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: acpi_button.c,v 1.34 2010/03/05 14:00:16 jruoho Exp $ */
|
||||
/* $NetBSD: acpi_button.c,v 1.35 2010/04/15 07:02:24 jruoho Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 2001, 2003 Wasabi Systems, Inc.
|
||||
|
@ -40,7 +40,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: acpi_button.c,v 1.34 2010/03/05 14:00:16 jruoho Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: acpi_button.c,v 1.35 2010/04/15 07:02:24 jruoho Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/device.h>
|
||||
|
@ -110,7 +110,6 @@ acpibut_attach(device_t parent, device_t self, void *aux)
|
|||
struct acpibut_softc *sc = device_private(self);
|
||||
struct acpi_attach_args *aa = aux;
|
||||
const char *desc;
|
||||
ACPI_STATUS rv;
|
||||
|
||||
sc->sc_smpsw.smpsw_name = device_xname(self);
|
||||
|
||||
|
@ -130,12 +129,7 @@ acpibut_attach(device_t parent, device_t self, void *aux)
|
|||
|
||||
(void)pmf_device_register(self, NULL, NULL);
|
||||
(void)sysmon_pswitch_register(&sc->sc_smpsw);
|
||||
|
||||
rv = AcpiInstallNotifyHandler(sc->sc_node->ad_handle,
|
||||
ACPI_DEVICE_NOTIFY, acpibut_notify_handler, self);
|
||||
|
||||
if (ACPI_FAILURE(rv))
|
||||
aprint_error_dev(self, "failed to install notify handler\n");
|
||||
(void)acpi_register_notify(sc->sc_node, acpibut_notify_handler);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -147,15 +141,9 @@ static int
|
|||
acpibut_detach(device_t self, int flags)
|
||||
{
|
||||
struct acpibut_softc *sc = device_private(self);
|
||||
ACPI_STATUS rv;
|
||||
|
||||
rv = AcpiRemoveNotifyHandler(sc->sc_node->ad_handle,
|
||||
ACPI_DEVICE_NOTIFY, acpibut_notify_handler);
|
||||
|
||||
if (ACPI_FAILURE(rv))
|
||||
return EBUSY;
|
||||
|
||||
pmf_device_deregister(self);
|
||||
acpi_deregister_notify(sc->sc_node);
|
||||
sysmon_pswitch_unregister(&sc->sc_smpsw);
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: acpi_lid.c,v 1.38 2010/04/14 19:27:28 jruoho Exp $ */
|
||||
/* $NetBSD: acpi_lid.c,v 1.39 2010/04/15 07:02:24 jruoho Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 2001, 2003 Wasabi Systems, Inc.
|
||||
|
@ -40,7 +40,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: acpi_lid.c,v 1.38 2010/04/14 19:27:28 jruoho Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: acpi_lid.c,v 1.39 2010/04/15 07:02:24 jruoho Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/device.h>
|
||||
|
@ -99,7 +99,6 @@ acpilid_attach(device_t parent, device_t self, void *aux)
|
|||
{
|
||||
struct acpilid_softc *sc = device_private(self);
|
||||
struct acpi_attach_args *aa = aux;
|
||||
ACPI_STATUS rv;
|
||||
|
||||
aprint_naive(": ACPI Lid Switch\n");
|
||||
aprint_normal(": ACPI Lid Switch\n");
|
||||
|
@ -111,27 +110,16 @@ acpilid_attach(device_t parent, device_t self, void *aux)
|
|||
|
||||
(void)pmf_device_register(self, NULL, NULL);
|
||||
(void)sysmon_pswitch_register(&sc->sc_smpsw);
|
||||
|
||||
rv = AcpiInstallNotifyHandler(sc->sc_node->ad_handle,
|
||||
ACPI_DEVICE_NOTIFY, acpilid_notify_handler, self);
|
||||
|
||||
if (ACPI_FAILURE(rv))
|
||||
aprint_error_dev(self, "failed to register notify handler\n");
|
||||
(void)acpi_register_notify(sc->sc_node, acpilid_notify_handler);
|
||||
}
|
||||
|
||||
static int
|
||||
acpilid_detach(device_t self, int flags)
|
||||
{
|
||||
struct acpilid_softc *sc = device_private(self);
|
||||
ACPI_STATUS rv;
|
||||
|
||||
rv = AcpiRemoveNotifyHandler(sc->sc_node->ad_handle,
|
||||
ACPI_DEVICE_NOTIFY, acpilid_notify_handler);
|
||||
|
||||
if (ACPI_FAILURE(rv))
|
||||
return EBUSY;
|
||||
|
||||
pmf_device_deregister(self);
|
||||
acpi_deregister_notify(sc->sc_node);
|
||||
sysmon_pswitch_unregister(&sc->sc_smpsw);
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: acpi_tz.c,v 1.64 2010/04/14 19:27:28 jruoho Exp $ */
|
||||
/* $NetBSD: acpi_tz.c,v 1.65 2010/04/15 07:02:24 jruoho Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2003 Jared D. McNeill <jmcneill@invisible.ca>
|
||||
|
@ -30,7 +30,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: acpi_tz.c,v 1.64 2010/04/14 19:27:28 jruoho Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: acpi_tz.c,v 1.65 2010/04/15 07:02:24 jruoho Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/device.h>
|
||||
|
@ -211,11 +211,7 @@ acpitz_attach(device_t parent, device_t self, void *aux)
|
|||
acpitz_get_zone(self, 1);
|
||||
acpitz_get_status(self);
|
||||
|
||||
rv = AcpiInstallNotifyHandler(sc->sc_devnode->ad_handle,
|
||||
ACPI_DEVICE_NOTIFY, acpitz_notify_handler, self);
|
||||
|
||||
if (ACPI_FAILURE(rv))
|
||||
return;
|
||||
(void)acpi_register_notify(sc->sc_devnode, acpitz_notify_handler);
|
||||
|
||||
callout_init(&sc->sc_callout, CALLOUT_MPSAFE);
|
||||
callout_setfunc(&sc->sc_callout, acpitz_tick, self);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: acpivar.h,v 1.47 2010/04/14 17:12:14 jruoho Exp $ */
|
||||
/* $NetBSD: acpivar.h,v 1.48 2010/04/15 07:02:24 jruoho Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 2001 Wasabi Systems, Inc.
|
||||
|
@ -54,9 +54,7 @@
|
|||
#include <dev/sysmon/sysmonvar.h>
|
||||
|
||||
/*
|
||||
* acpibus_attach_args:
|
||||
*
|
||||
* This structure is used to attach the ACPI "bus".
|
||||
* This structure is used to attach the ACPI "bus".
|
||||
*/
|
||||
struct acpibus_attach_args {
|
||||
bus_space_tag_t aa_iot; /* PCI I/O space tag */
|
||||
|
@ -73,13 +71,15 @@ struct acpibus_attach_args {
|
|||
#define ACPI_DEVICE_WAKEUP __BIT(1)
|
||||
|
||||
/*
|
||||
* acpi_devnode:
|
||||
* An ACPI device node.
|
||||
*
|
||||
* An ACPI device node.
|
||||
* Note that this is available for all nodes, meaning that e.g.
|
||||
* the device_t (ad_device) may be NULL for unattached devices.
|
||||
*/
|
||||
struct acpi_devnode {
|
||||
device_t ad_device; /* Device */
|
||||
device_t ad_parent; /* Backpointer to the parent */
|
||||
ACPI_NOTIFY_HANDLER ad_notify; /* Device notify */
|
||||
ACPI_DEVICE_INFO *ad_devinfo; /* Device info */
|
||||
ACPI_HANDLE ad_handle; /* Device handle */
|
||||
char ad_name[5]; /* Device name */
|
||||
|
@ -91,9 +91,7 @@ struct acpi_devnode {
|
|||
};
|
||||
|
||||
/*
|
||||
* acpi_softc:
|
||||
*
|
||||
* Software state of the ACPI subsystem.
|
||||
* Software state of the ACPI subsystem.
|
||||
*/
|
||||
struct acpi_softc {
|
||||
device_t sc_dev; /* base device info */
|
||||
|
@ -247,6 +245,10 @@ int acpi_check(device_t, const char *);
|
|||
|
||||
ACPI_PHYSICAL_ADDRESS acpi_OsGetRootPointer(void);
|
||||
|
||||
bool acpi_register_notify(struct acpi_devnode *,
|
||||
ACPI_NOTIFY_HANDLER);
|
||||
void acpi_deregister_notify(struct acpi_devnode *);
|
||||
|
||||
ACPI_STATUS acpi_resource_parse(device_t, ACPI_HANDLE, const char *,
|
||||
void *, const struct acpi_resource_parse_ops *);
|
||||
void acpi_resource_print(device_t, struct acpi_resources *);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: asus_acpi.c,v 1.19 2010/04/14 19:27:28 jruoho Exp $ */
|
||||
/* $NetBSD: asus_acpi.c,v 1.20 2010/04/15 07:02:24 jruoho Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2007, 2008, 2009 Jared D. McNeill <jmcneill@invisible.ca>
|
||||
|
@ -27,7 +27,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: asus_acpi.c,v 1.19 2010/04/14 19:27:28 jruoho Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: asus_acpi.c,v 1.20 2010/04/15 07:02:24 jruoho Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/device.h>
|
||||
|
@ -125,10 +125,9 @@ asus_attach(device_t parent, device_t self, void *opaque)
|
|||
{
|
||||
struct asus_softc *sc = device_private(self);
|
||||
struct acpi_attach_args *aa = opaque;
|
||||
ACPI_STATUS rv;
|
||||
|
||||
sc->sc_node = aa->aa_node;
|
||||
sc->sc_dev = self;
|
||||
sc->sc_node = aa->aa_node;
|
||||
|
||||
aprint_naive("\n");
|
||||
aprint_normal("\n");
|
||||
|
@ -147,7 +146,7 @@ asus_attach(device_t parent, device_t self, void *opaque)
|
|||
}
|
||||
|
||||
if (asus_get_fan_speed(sc, NULL) == false)
|
||||
goto nosensors;
|
||||
goto out;
|
||||
|
||||
sc->sc_sme = sysmon_envsys_create();
|
||||
|
||||
|
@ -166,39 +165,32 @@ asus_attach(device_t parent, device_t self, void *opaque)
|
|||
sysmon_envsys_destroy(sc->sc_sme);
|
||||
sc->sc_sme = NULL;
|
||||
}
|
||||
nosensors:
|
||||
|
||||
rv = AcpiInstallNotifyHandler(sc->sc_node->ad_handle, ACPI_ALL_NOTIFY,
|
||||
asus_notify_handler, sc);
|
||||
if (ACPI_FAILURE(rv))
|
||||
aprint_error_dev(self, "couldn't install notify handler: %s\n",
|
||||
AcpiFormatException(rv));
|
||||
|
||||
if (!pmf_device_register(self, asus_suspend, asus_resume))
|
||||
aprint_error_dev(self, "couldn't establish power handler\n");
|
||||
out:
|
||||
(void)pmf_device_register(self, asus_suspend, asus_resume);
|
||||
(void)acpi_register_notify(sc->sc_node, asus_notify_handler);
|
||||
}
|
||||
|
||||
static int
|
||||
asus_detach(device_t self, int flags)
|
||||
{
|
||||
struct asus_softc *sc = device_private(self);
|
||||
ACPI_STATUS rv;
|
||||
int i;
|
||||
|
||||
rv = AcpiRemoveNotifyHandler(sc->sc_node->ad_handle,
|
||||
ACPI_ALL_NOTIFY, asus_notify_handler);
|
||||
acpi_deregister_notify(sc->sc_node);
|
||||
|
||||
if (ACPI_FAILURE(rv))
|
||||
return EBUSY;
|
||||
if (sc->sc_smpsw_valid != false) {
|
||||
|
||||
if (sc->sc_smpsw_valid)
|
||||
for (i = 0; i < ASUS_PSW_LAST; i++)
|
||||
sysmon_pswitch_unregister(&sc->sc_smpsw[i]);
|
||||
}
|
||||
|
||||
if (sc->sc_sme)
|
||||
if (sc->sc_sme != NULL)
|
||||
sysmon_envsys_unregister(sc->sc_sme);
|
||||
if (sc->sc_log)
|
||||
|
||||
if (sc->sc_log != NULL)
|
||||
sysctl_teardown(&sc->sc_log);
|
||||
|
||||
pmf_device_deregister(self);
|
||||
|
||||
return 0;
|
||||
|
@ -207,7 +199,10 @@ asus_detach(device_t self, int flags)
|
|||
static void
|
||||
asus_notify_handler(ACPI_HANDLE hdl, uint32_t notify, void *opaque)
|
||||
{
|
||||
struct asus_softc *sc = opaque;
|
||||
struct asus_softc *sc;
|
||||
device_t self = opaque;
|
||||
|
||||
sc = device_private(self);
|
||||
|
||||
if (notify >= ASUS_NOTIFY_BrightnessLow &&
|
||||
notify <= ASUS_NOTIFY_BrightnessHigh) {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: dalb_acpi.c,v 1.13 2010/04/14 19:27:28 jruoho Exp $ */
|
||||
/* $NetBSD: dalb_acpi.c,v 1.14 2010/04/15 07:02:24 jruoho Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2008 Christoph Egger <cegger@netbsd.org>
|
||||
|
@ -27,7 +27,7 @@
|
|||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: dalb_acpi.c,v 1.13 2010/04/14 19:27:28 jruoho Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: dalb_acpi.c,v 1.14 2010/04/15 07:02:24 jruoho Exp $");
|
||||
|
||||
/*
|
||||
* Direct Application Launch Button:
|
||||
|
@ -154,44 +154,29 @@ acpi_dalb_attach(device_t parent, device_t self, void *aux)
|
|||
{
|
||||
struct acpi_dalb_softc *sc = device_private(self);
|
||||
struct acpi_attach_args *aa = aux;
|
||||
ACPI_STATUS rv;
|
||||
|
||||
aprint_naive("\n");
|
||||
aprint_normal(": Direct Application Launch Button\n");
|
||||
|
||||
sc->sc_node = aa->aa_node;
|
||||
sc->sc_dev = self;
|
||||
sc->sc_node = aa->aa_node;
|
||||
|
||||
config_interrupts(self, acpi_dalb_init);
|
||||
|
||||
/* Install notify handler */
|
||||
rv = AcpiInstallNotifyHandler(sc->sc_node->ad_handle,
|
||||
ACPI_ALL_NOTIFY, acpi_dalb_notify_handler, self);
|
||||
if (ACPI_FAILURE(rv))
|
||||
aprint_error_dev(self,
|
||||
"couldn't install notify handler: (%s)\n",
|
||||
AcpiFormatException(rv));
|
||||
(void)pmf_device_register(self, NULL, acpi_dalb_resume);
|
||||
(void)acpi_register_notify(sc->sc_node, acpi_dalb_notify_handler);
|
||||
|
||||
sc->sc_smpsw_valid = false;
|
||||
acpi_dalb_sysmon_init(sc);
|
||||
|
||||
if (!pmf_device_register(self, NULL, acpi_dalb_resume))
|
||||
aprint_error_dev(self, "couldn't establish power handler\n");
|
||||
}
|
||||
|
||||
static int
|
||||
acpi_dalb_detach(device_t self, int flags)
|
||||
{
|
||||
struct acpi_dalb_softc *sc = device_private(self);
|
||||
ACPI_STATUS rv;
|
||||
|
||||
rv = AcpiRemoveNotifyHandler(sc->sc_node->ad_handle,
|
||||
ACPI_ALL_NOTIFY, acpi_dalb_notify_handler);
|
||||
|
||||
if (ACPI_FAILURE(rv))
|
||||
return EBUSY;
|
||||
|
||||
pmf_device_deregister(self);
|
||||
acpi_deregister_notify(sc->sc_node);
|
||||
sysmon_pswitch_unregister(&sc->sc_smpsw);
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: smbus_acpi.c,v 1.9 2010/03/05 14:00:17 jruoho Exp $ */
|
||||
/* $NetBSD: smbus_acpi.c,v 1.10 2010/04/15 07:02:24 jruoho Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2009 The NetBSD Foundation, Inc.
|
||||
|
@ -36,7 +36,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: smbus_acpi.c,v 1.9 2010/03/05 14:00:17 jruoho Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: smbus_acpi.c,v 1.10 2010/04/15 07:02:24 jruoho Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/device.h>
|
||||
|
@ -212,14 +212,10 @@ acpi_smbus_attach(device_t parent, device_t self, void *aux)
|
|||
if (smi_buf.Pointer != NULL)
|
||||
ACPI_FREE(smi_buf.Pointer);
|
||||
|
||||
/* Install notify handler if possible */
|
||||
rv = AcpiInstallNotifyHandler(sc->sc_devnode->ad_handle,
|
||||
ACPI_DEVICE_NOTIFY, acpi_smbus_notify_handler, self);
|
||||
if (ACPI_FAILURE(rv)) {
|
||||
aprint_error(": unable to install DEVICE NOTIFY handler: %s\n",
|
||||
AcpiFormatException(rv));
|
||||
sc->sc_poll_alert = 2; /* If failed, fall-back to polling */
|
||||
}
|
||||
/* If failed, fall-back to polling. */
|
||||
if (acpi_register_notify(sc->sc_devnode,
|
||||
acpi_smbus_notify_handler) != true)
|
||||
sc->sc_poll_alert = 2;
|
||||
|
||||
callout_init(&sc->sc_callout, 0);
|
||||
callout_setfunc(&sc->sc_callout, acpi_smbus_tick, self);
|
||||
|
@ -280,15 +276,9 @@ static int
|
|||
acpi_smbus_detach(device_t self, int flags)
|
||||
{
|
||||
struct acpi_smbus_softc *sc = device_private(self);
|
||||
ACPI_STATUS rv;
|
||||
|
||||
rv = AcpiRemoveNotifyHandler(sc->sc_devnode->ad_handle,
|
||||
ACPI_DEVICE_NOTIFY, acpi_smbus_notify_handler);
|
||||
|
||||
if (ACPI_FAILURE(rv))
|
||||
return EBUSY;
|
||||
|
||||
pmf_device_deregister(self);
|
||||
acpi_deregister_notify(sc->sc_devnode);
|
||||
|
||||
callout_halt(&sc->sc_callout, NULL);
|
||||
callout_destroy(&sc->sc_callout);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: sony_acpi.c,v 1.17 2010/04/14 19:27:28 jruoho Exp $ */
|
||||
/* $NetBSD: sony_acpi.c,v 1.18 2010/04/15 07:02:24 jruoho Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2005 The NetBSD Foundation, Inc.
|
||||
|
@ -29,7 +29,7 @@
|
|||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: sony_acpi.c,v 1.17 2010/04/14 19:27:28 jruoho Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: sony_acpi.c,v 1.18 2010/04/15 07:02:24 jruoho Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/sysctl.h>
|
||||
|
@ -280,16 +280,12 @@ sony_acpi_attach(device_t parent, device_t self, void *aux)
|
|||
sc->sc_smpsw_valid = 0;
|
||||
}
|
||||
|
||||
/* Install notify handler */
|
||||
rv = AcpiInstallNotifyHandler(sc->sc_node->ad_handle,
|
||||
ACPI_DEVICE_NOTIFY, sony_acpi_notify_handler, self);
|
||||
if (ACPI_FAILURE(rv))
|
||||
aprint_error_dev(self,
|
||||
"couldn't install notify handler (%u)\n", rv);
|
||||
(void)acpi_register_notify(sc->sc_node, sony_acpi_notify_handler);
|
||||
|
||||
/* Install sysctl handler */
|
||||
rv = AcpiWalkNamespace(ACPI_TYPE_METHOD,
|
||||
sc->sc_node->ad_handle, 1, sony_walk_cb, NULL, sc, NULL);
|
||||
|
||||
#ifdef DIAGNOSTIC
|
||||
if (ACPI_FAILURE(rv))
|
||||
aprint_error_dev(self, "Cannot walk ACPI namespace (%u)\n",
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: thinkpad_acpi.c,v 1.29 2010/04/14 19:27:28 jruoho Exp $ */
|
||||
/* $NetBSD: thinkpad_acpi.c,v 1.30 2010/04/15 07:02:24 jruoho Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2007 Jared D. McNeill <jmcneill@invisible.ca>
|
||||
|
@ -27,7 +27,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: thinkpad_acpi.c,v 1.29 2010/04/14 19:27:28 jruoho Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: thinkpad_acpi.c,v 1.30 2010/04/15 07:02:24 jruoho Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/device.h>
|
||||
|
@ -219,12 +219,7 @@ thinkpad_attach(device_t parent, device_t self, void *opaque)
|
|||
goto fail;
|
||||
}
|
||||
|
||||
/* Install notify handler for events */
|
||||
rv = AcpiInstallNotifyHandler(sc->sc_node->ad_handle,
|
||||
ACPI_DEVICE_NOTIFY, thinkpad_notify_handler, sc);
|
||||
if (ACPI_FAILURE(rv))
|
||||
aprint_error_dev(self, "couldn't install notify handler: %s\n",
|
||||
AcpiFormatException(rv));
|
||||
(void)acpi_register_notify(sc->sc_node, thinkpad_notify_handler);
|
||||
|
||||
/* Register power switches with sysmon */
|
||||
psw = sc->sc_smpsw;
|
||||
|
@ -275,14 +270,9 @@ static int
|
|||
thinkpad_detach(device_t self, int flags)
|
||||
{
|
||||
struct thinkpad_softc *sc = device_private(self);
|
||||
ACPI_STATUS rv;
|
||||
int i;
|
||||
|
||||
rv = AcpiRemoveNotifyHandler(sc->sc_node->ad_handle,
|
||||
ACPI_DEVICE_NOTIFY, thinkpad_notify_handler);
|
||||
|
||||
if (ACPI_FAILURE(rv))
|
||||
return EBUSY;
|
||||
acpi_deregister_notify(sc->sc_node);
|
||||
|
||||
for (i = 0; i < TP_PSW_LAST; i++)
|
||||
sysmon_pswitch_unregister(&sc->sc_smpsw[i]);
|
||||
|
@ -304,19 +294,17 @@ thinkpad_detach(device_t self, int flags)
|
|||
static void
|
||||
thinkpad_notify_handler(ACPI_HANDLE hdl, uint32_t notify, void *opaque)
|
||||
{
|
||||
thinkpad_softc_t *sc = (thinkpad_softc_t *)opaque;
|
||||
device_t self = sc->sc_dev;
|
||||
ACPI_STATUS rv;
|
||||
|
||||
device_t self = opaque;
|
||||
thinkpad_softc_t *sc;
|
||||
|
||||
sc = device_private(self);
|
||||
|
||||
if (notify != 0x80) {
|
||||
aprint_debug_dev(self, "unknown notify 0x%02x\n", notify);
|
||||
return;
|
||||
}
|
||||
|
||||
rv = AcpiOsExecute(OSL_NOTIFY_HANDLER, thinkpad_get_hotkeys, sc);
|
||||
if (ACPI_FAILURE(rv))
|
||||
aprint_error_dev(self, "couldn't queue hotkey handler: %s\n",
|
||||
AcpiFormatException(rv));
|
||||
(void)AcpiOsExecute(OSL_NOTIFY_HANDLER, thinkpad_get_hotkeys, sc);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: vald_acpi.c,v 1.3 2010/04/14 19:27:28 jruoho Exp $ */
|
||||
/* $NetBSD: vald_acpi.c,v 1.4 2010/04/15 07:02:24 jruoho Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2002 The NetBSD Foundation, Inc.
|
||||
|
@ -74,7 +74,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: vald_acpi.c,v 1.3 2010/04/14 19:27:28 jruoho Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: vald_acpi.c,v 1.4 2010/04/15 07:02:24 jruoho Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -235,12 +235,11 @@ vald_acpi_attach(device_t parent, device_t self, void *aux)
|
|||
vald_acpi_libright_set(sc, LIBRIGHT_HOLD);
|
||||
|
||||
/* enable vald notify */
|
||||
AcpiEvaluateObject(sc->sc_node->ad_handle, "ENAB", NULL, NULL);
|
||||
rv = AcpiInstallNotifyHandler(sc->sc_node->ad_handle,
|
||||
ACPI_DEVICE_NOTIFY, vald_acpi_notify_handler, sc);
|
||||
if (ACPI_FAILURE(rv))
|
||||
aprint_error_dev(self, "can't install DEVICE NOTIFY handler: %s\n",
|
||||
AcpiFormatException(rv));
|
||||
rv = AcpiEvaluateObject(sc->sc_node->ad_handle, "ENAB", NULL, NULL);
|
||||
|
||||
if (ACPI_SUCCESS(rv))
|
||||
(void)acpi_register_notify(sc->sc_node,
|
||||
vald_acpi_notify_handler);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -251,7 +250,10 @@ vald_acpi_attach(device_t parent, device_t self, void *aux)
|
|||
static void
|
||||
vald_acpi_notify_handler(ACPI_HANDLE handle, uint32_t notify, void *context)
|
||||
{
|
||||
struct vald_acpi_softc *sc = context;
|
||||
struct vald_acpi_softc *sc;
|
||||
device_t self = context;
|
||||
|
||||
sc = device_private(self);
|
||||
|
||||
switch (notify) {
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: valz_acpi.c,v 1.2 2010/04/14 19:27:28 jruoho Exp $ */
|
||||
/* $NetBSD: valz_acpi.c,v 1.3 2010/04/15 07:02:24 jruoho Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2010 Jonathan A. Kollasch
|
||||
|
@ -27,7 +27,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: valz_acpi.c,v 1.2 2010/04/14 19:27:28 jruoho Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: valz_acpi.c,v 1.3 2010/04/15 07:02:24 jruoho Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -102,7 +102,15 @@ valz_attach(device_t parent, device_t self, void *aux)
|
|||
if(!pmf_event_register(self, PMFE_DISPLAY_BRIGHTNESS_UP,
|
||||
valz_pmf_brightness_increase, false))
|
||||
aprint_error_dev(self, "failed to register event handler\n");
|
||||
|
||||
|
||||
/*
|
||||
* XXX: This is broken.
|
||||
*
|
||||
* It claims resources that do not belong to it.
|
||||
*
|
||||
* It either prevents an ACPI video driver for
|
||||
* receiving events or duplicates the notifications.
|
||||
*/
|
||||
rv = AcpiInstallNotifyHandler(sc->sc_lcd, ACPI_DEVICE_NOTIFY,
|
||||
valz_lcd_notify_handler, sc);
|
||||
if (ACPI_FAILURE(rv))
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: wmi_acpi.c,v 1.3 2010/04/09 04:48:23 jruoho Exp $ */
|
||||
/* $NetBSD: wmi_acpi.c,v 1.4 2010/04/15 07:02:24 jruoho Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2009, 2010 Jukka Ruohonen <jruohonen@iki.fi>
|
||||
|
@ -27,7 +27,7 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: wmi_acpi.c,v 1.3 2010/04/09 04:48:23 jruoho Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: wmi_acpi.c,v 1.4 2010/04/15 07:02:24 jruoho Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/device.h>
|
||||
|
@ -129,8 +129,8 @@ static void acpi_wmi_dump(struct acpi_wmi_softc *);
|
|||
|
||||
static ACPI_STATUS acpi_wmi_guid_get(struct acpi_wmi_softc *,
|
||||
const char *, struct wmi_t **);
|
||||
static ACPI_STATUS acpi_wmi_event_add(struct acpi_wmi_softc *);
|
||||
static ACPI_STATUS acpi_wmi_event_del(struct acpi_wmi_softc *);
|
||||
static void acpi_wmi_event_add(struct acpi_wmi_softc *);
|
||||
static void acpi_wmi_event_del(struct acpi_wmi_softc *);
|
||||
static void acpi_wmi_event_handler(ACPI_HANDLE, uint32_t, void *);
|
||||
static bool acpi_wmi_suspend(device_t, const pmf_qual_t *);
|
||||
static bool acpi_wmi_resume(device_t, const pmf_qual_t *);
|
||||
|
@ -178,23 +178,20 @@ acpi_wmi_attach(device_t parent, device_t self, void *aux)
|
|||
acpi_wmi_dump(sc);
|
||||
#endif
|
||||
|
||||
(void)acpi_wmi_event_add(sc);
|
||||
(void)pmf_device_register(self, acpi_wmi_suspend, acpi_wmi_resume);
|
||||
acpi_wmi_event_add(sc);
|
||||
|
||||
sc->sc_child = config_found_ia(self, "acpiwmibus",
|
||||
NULL, acpi_wmi_print);
|
||||
|
||||
(void)pmf_device_register(self, acpi_wmi_suspend, acpi_wmi_resume);
|
||||
}
|
||||
|
||||
static int
|
||||
acpi_wmi_detach(device_t self, int flags)
|
||||
{
|
||||
struct acpi_wmi_softc *sc = device_private(self);
|
||||
ACPI_STATUS rv;
|
||||
|
||||
rv = acpi_wmi_event_del(sc);
|
||||
|
||||
if (ACPI_FAILURE(rv))
|
||||
return EBUSY;
|
||||
acpi_wmi_event_del(sc);
|
||||
|
||||
if (sc->sc_child != NULL)
|
||||
(void)config_detach(sc->sc_child, flags);
|
||||
|
@ -411,20 +408,14 @@ acpi_wmi_guid_match(device_t self, const char *guid)
|
|||
/*
|
||||
* Adds internal event handler.
|
||||
*/
|
||||
static ACPI_STATUS
|
||||
static void
|
||||
acpi_wmi_event_add(struct acpi_wmi_softc *sc)
|
||||
{
|
||||
struct wmi_t *wmi;
|
||||
ACPI_STATUS rv;
|
||||
|
||||
rv = AcpiInstallNotifyHandler(sc->sc_node->ad_handle,
|
||||
ACPI_ALL_NOTIFY, acpi_wmi_event_handler, sc);
|
||||
|
||||
if (ACPI_FAILURE(rv)) {
|
||||
aprint_error_dev(sc->sc_dev, "failed to install notify "
|
||||
"handler: %s\n", AcpiFormatException(rv));
|
||||
return rv;
|
||||
}
|
||||
if (acpi_register_notify(sc->sc_node, acpi_wmi_event_handler) != true)
|
||||
return;
|
||||
|
||||
/* Enable possible expensive events. */
|
||||
SIMPLEQ_FOREACH(wmi, &sc->wmi_head, wmi_link) {
|
||||
|
@ -444,27 +435,18 @@ acpi_wmi_event_add(struct acpi_wmi_softc *sc)
|
|||
"expensive WExx: %s\n", AcpiFormatException(rv));
|
||||
}
|
||||
}
|
||||
|
||||
return AE_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* Removes the internal event handler.
|
||||
*/
|
||||
static ACPI_STATUS
|
||||
static void
|
||||
acpi_wmi_event_del(struct acpi_wmi_softc *sc)
|
||||
{
|
||||
struct wmi_t *wmi;
|
||||
ACPI_STATUS rv;
|
||||
|
||||
rv = AcpiRemoveNotifyHandler(sc->sc_node->ad_handle,
|
||||
ACPI_ALL_NOTIFY, acpi_wmi_event_handler);
|
||||
|
||||
if (ACPI_FAILURE(rv)) {
|
||||
aprint_debug_dev(sc->sc_dev, "failed to remove notify "
|
||||
"handler: %s\n", AcpiFormatException(rv));
|
||||
return rv;
|
||||
}
|
||||
acpi_deregister_notify(sc->sc_node);
|
||||
|
||||
SIMPLEQ_FOREACH(wmi, &sc->wmi_head, wmi_link) {
|
||||
|
||||
|
@ -485,8 +467,6 @@ acpi_wmi_event_del(struct acpi_wmi_softc *sc)
|
|||
aprint_error_dev(sc->sc_dev, "failed to disable "
|
||||
"expensive WExx: %s\n", AcpiFormatException(rv));
|
||||
}
|
||||
|
||||
return AE_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -538,7 +518,10 @@ acpi_wmi_event_get(device_t self, uint32_t event, ACPI_BUFFER *obuf)
|
|||
static void
|
||||
acpi_wmi_event_handler(ACPI_HANDLE hdl, uint32_t evt, void *aux)
|
||||
{
|
||||
struct acpi_wmi_softc *sc = aux;
|
||||
struct acpi_wmi_softc *sc;
|
||||
device_t self = aux;
|
||||
|
||||
sc = device_private(self);
|
||||
|
||||
if (sc->sc_child == NULL)
|
||||
return;
|
||||
|
|
Loading…
Reference in New Issue