Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/acpica/acpi.c
Show All 12 Lines | |||||
/* Local pools for managing system resources for ACPI child devices. */ | /* Local pools for managing system resources for ACPI child devices. */ | ||||
static struct rman acpi_rman_io, acpi_rman_mem; | static struct rman acpi_rman_io, acpi_rman_mem; | ||||
#define ACPI_MINIMUM_AWAKETIME 5 | #define ACPI_MINIMUM_AWAKETIME 5 | ||||
/* Holds the description of the acpi0 device. */ | /* Holds the description of the acpi0 device. */ | ||||
static char acpi_desc[ACPI_OEM_ID_SIZE + ACPI_OEM_TABLE_ID_SIZE + 2]; | static char acpi_desc[ACPI_OEM_ID_SIZE + ACPI_OEM_TABLE_ID_SIZE + 2]; | ||||
SYSCTL_NODE(_debug, OID_AUTO, acpi, CTLFLAG_RD, NULL, "ACPI debugging"); | SYSCTL_NODE(_debug, OID_AUTO, acpi, CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, | ||||
"ACPI debugging"); | |||||
static char acpi_ca_version[12]; | static char acpi_ca_version[12]; | ||||
SYSCTL_STRING(_debug_acpi, OID_AUTO, acpi_ca_version, CTLFLAG_RD, | SYSCTL_STRING(_debug_acpi, OID_AUTO, acpi_ca_version, CTLFLAG_RD, | ||||
acpi_ca_version, 0, "Version of Intel ACPI-CA"); | acpi_ca_version, 0, "Version of Intel ACPI-CA"); | ||||
/* | /* | ||||
* Allow overriding _OSI methods. | * Allow overriding _OSI methods. | ||||
*/ | */ | ||||
static char acpi_install_interface[256]; | static char acpi_install_interface[256]; | ||||
TUNABLE_STR("hw.acpi.install_interface", acpi_install_interface, | TUNABLE_STR("hw.acpi.install_interface", acpi_install_interface, | ||||
sizeof(acpi_install_interface)); | sizeof(acpi_install_interface)); | ||||
static char acpi_remove_interface[256]; | static char acpi_remove_interface[256]; | ||||
TUNABLE_STR("hw.acpi.remove_interface", acpi_remove_interface, | TUNABLE_STR("hw.acpi.remove_interface", acpi_remove_interface, | ||||
sizeof(acpi_remove_interface)); | sizeof(acpi_remove_interface)); | ||||
/* Allow users to dump Debug objects without ACPI debugger. */ | /* Allow users to dump Debug objects without ACPI debugger. */ | ||||
static int acpi_debug_objects; | static int acpi_debug_objects; | ||||
TUNABLE_INT("debug.acpi.enable_debug_objects", &acpi_debug_objects); | TUNABLE_INT("debug.acpi.enable_debug_objects", &acpi_debug_objects); | ||||
SYSCTL_PROC(_debug_acpi, OID_AUTO, enable_debug_objects, | SYSCTL_PROC(_debug_acpi, OID_AUTO, enable_debug_objects, | ||||
CTLFLAG_RW | CTLTYPE_INT, NULL, 0, acpi_debug_objects_sysctl, "I", | CTLFLAG_RW | CTLTYPE_INT | CTLFLAG_NEEDGIANT, NULL, 0, | ||||
acpi_debug_objects_sysctl, "I", | |||||
"Enable Debug objects"); | "Enable Debug objects"); | ||||
/* Allow the interpreter to ignore common mistakes in BIOS. */ | /* Allow the interpreter to ignore common mistakes in BIOS. */ | ||||
static int acpi_interpreter_slack = 1; | static int acpi_interpreter_slack = 1; | ||||
TUNABLE_INT("debug.acpi.interpreter_slack", &acpi_interpreter_slack); | TUNABLE_INT("debug.acpi.interpreter_slack", &acpi_interpreter_slack); | ||||
SYSCTL_INT(_debug_acpi, OID_AUTO, interpreter_slack, CTLFLAG_RDTUN, | SYSCTL_INT(_debug_acpi, OID_AUTO, interpreter_slack, CTLFLAG_RDTUN, | ||||
&acpi_interpreter_slack, 1, "Turn on interpreter slack mode."); | &acpi_interpreter_slack, 1, "Turn on interpreter slack mode."); | ||||
Show All 24 Lines | |||||
/* | /* | ||||
* Setup our sysctl tree. | * Setup our sysctl tree. | ||||
* | * | ||||
* XXX: This doesn't check to make sure that none of these fail. | * XXX: This doesn't check to make sure that none of these fail. | ||||
*/ | */ | ||||
sysctl_ctx_init(&sc->acpi_sysctl_ctx); | sysctl_ctx_init(&sc->acpi_sysctl_ctx); | ||||
sc->acpi_sysctl_tree = SYSCTL_ADD_NODE(&sc->acpi_sysctl_ctx, | sc->acpi_sysctl_tree = SYSCTL_ADD_NODE(&sc->acpi_sysctl_ctx, | ||||
SYSCTL_STATIC_CHILDREN(_hw), OID_AUTO, | SYSCTL_STATIC_CHILDREN(_hw), OID_AUTO, device_get_name(dev), | ||||
device_get_name(dev), CTLFLAG_RD, 0, ""); | CTLFLAG_RD | CTLFLAG_MPSAFE, 0, ""); | ||||
SYSCTL_ADD_PROC(&sc->acpi_sysctl_ctx, SYSCTL_CHILDREN(sc->acpi_sysctl_tree), | SYSCTL_ADD_PROC(&sc->acpi_sysctl_ctx, SYSCTL_CHILDREN(sc->acpi_sysctl_tree), | ||||
OID_AUTO, "supported_sleep_state", CTLTYPE_STRING | CTLFLAG_RD, | OID_AUTO, "supported_sleep_state", | ||||
CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_NEEDGIANT, | |||||
0, 0, acpi_supported_sleep_state_sysctl, "A", | 0, 0, acpi_supported_sleep_state_sysctl, "A", | ||||
"List supported ACPI sleep states."); | "List supported ACPI sleep states."); | ||||
SYSCTL_ADD_PROC(&sc->acpi_sysctl_ctx, SYSCTL_CHILDREN(sc->acpi_sysctl_tree), | SYSCTL_ADD_PROC(&sc->acpi_sysctl_ctx, SYSCTL_CHILDREN(sc->acpi_sysctl_tree), | ||||
OID_AUTO, "power_button_state", CTLTYPE_STRING | CTLFLAG_RW, | OID_AUTO, "power_button_state", | ||||
CTLTYPE_STRING | CTLFLAG_RW | CTLFLAG_NEEDGIANT, | |||||
&sc->acpi_power_button_sx, 0, acpi_sleep_state_sysctl, "A", | &sc->acpi_power_button_sx, 0, acpi_sleep_state_sysctl, "A", | ||||
"Power button ACPI sleep state."); | "Power button ACPI sleep state."); | ||||
SYSCTL_ADD_PROC(&sc->acpi_sysctl_ctx, SYSCTL_CHILDREN(sc->acpi_sysctl_tree), | SYSCTL_ADD_PROC(&sc->acpi_sysctl_ctx, SYSCTL_CHILDREN(sc->acpi_sysctl_tree), | ||||
OID_AUTO, "sleep_button_state", CTLTYPE_STRING | CTLFLAG_RW, | OID_AUTO, "sleep_button_state", | ||||
CTLTYPE_STRING | CTLFLAG_RW | CTLFLAG_NEEDGIANT, | |||||
&sc->acpi_sleep_button_sx, 0, acpi_sleep_state_sysctl, "A", | &sc->acpi_sleep_button_sx, 0, acpi_sleep_state_sysctl, "A", | ||||
"Sleep button ACPI sleep state."); | "Sleep button ACPI sleep state."); | ||||
SYSCTL_ADD_PROC(&sc->acpi_sysctl_ctx, SYSCTL_CHILDREN(sc->acpi_sysctl_tree), | SYSCTL_ADD_PROC(&sc->acpi_sysctl_ctx, SYSCTL_CHILDREN(sc->acpi_sysctl_tree), | ||||
OID_AUTO, "lid_switch_state", CTLTYPE_STRING | CTLFLAG_RW, | OID_AUTO, "lid_switch_state", | ||||
CTLTYPE_STRING | CTLFLAG_RW | CTLFLAG_NEEDGIANT, | |||||
&sc->acpi_lid_switch_sx, 0, acpi_sleep_state_sysctl, "A", | &sc->acpi_lid_switch_sx, 0, acpi_sleep_state_sysctl, "A", | ||||
"Lid ACPI sleep state. Set to S3 if you want to suspend your laptop when close the Lid."); | "Lid ACPI sleep state. Set to S3 if you want to suspend your laptop when close the Lid."); | ||||
SYSCTL_ADD_PROC(&sc->acpi_sysctl_ctx, SYSCTL_CHILDREN(sc->acpi_sysctl_tree), | SYSCTL_ADD_PROC(&sc->acpi_sysctl_ctx, SYSCTL_CHILDREN(sc->acpi_sysctl_tree), | ||||
OID_AUTO, "standby_state", CTLTYPE_STRING | CTLFLAG_RW, | OID_AUTO, "standby_state", | ||||
CTLTYPE_STRING | CTLFLAG_RW | CTLFLAG_NEEDGIANT, | |||||
&sc->acpi_standby_sx, 0, acpi_sleep_state_sysctl, "A", ""); | &sc->acpi_standby_sx, 0, acpi_sleep_state_sysctl, "A", ""); | ||||
SYSCTL_ADD_PROC(&sc->acpi_sysctl_ctx, SYSCTL_CHILDREN(sc->acpi_sysctl_tree), | SYSCTL_ADD_PROC(&sc->acpi_sysctl_ctx, SYSCTL_CHILDREN(sc->acpi_sysctl_tree), | ||||
OID_AUTO, "suspend_state", CTLTYPE_STRING | CTLFLAG_RW, | OID_AUTO, "suspend_state", | ||||
CTLTYPE_STRING | CTLFLAG_RW | CTLFLAG_NEEDGIANT, | |||||
&sc->acpi_suspend_sx, 0, acpi_sleep_state_sysctl, "A", ""); | &sc->acpi_suspend_sx, 0, acpi_sleep_state_sysctl, "A", ""); | ||||
SYSCTL_ADD_INT(&sc->acpi_sysctl_ctx, SYSCTL_CHILDREN(sc->acpi_sysctl_tree), | SYSCTL_ADD_INT(&sc->acpi_sysctl_ctx, SYSCTL_CHILDREN(sc->acpi_sysctl_tree), | ||||
OID_AUTO, "sleep_delay", CTLFLAG_RW, &sc->acpi_sleep_delay, 0, | OID_AUTO, "sleep_delay", CTLFLAG_RW, &sc->acpi_sleep_delay, 0, | ||||
"sleep delay in seconds"); | "sleep delay in seconds"); | ||||
SYSCTL_ADD_INT(&sc->acpi_sysctl_ctx, SYSCTL_CHILDREN(sc->acpi_sysctl_tree), | SYSCTL_ADD_INT(&sc->acpi_sysctl_ctx, SYSCTL_CHILDREN(sc->acpi_sysctl_tree), | ||||
OID_AUTO, "s4bios", CTLFLAG_RW, &sc->acpi_s4bios, 0, "S4BIOS mode"); | OID_AUTO, "s4bios", CTLFLAG_RW, &sc->acpi_s4bios, 0, "S4BIOS mode"); | ||||
SYSCTL_ADD_INT(&sc->acpi_sysctl_ctx, SYSCTL_CHILDREN(sc->acpi_sysctl_tree), | SYSCTL_ADD_INT(&sc->acpi_sysctl_ctx, SYSCTL_CHILDREN(sc->acpi_sysctl_tree), | ||||
OID_AUTO, "verbose", CTLFLAG_RW, &sc->acpi_verbose, 0, "verbose mode"); | OID_AUTO, "verbose", CTLFLAG_RW, &sc->acpi_verbose, 0, "verbose mode"); | ||||
Show All 24 Lines | |||||
child = devlist[i]; | child = devlist[i]; | ||||
acpi_wake_sysctl_walk(child); | acpi_wake_sysctl_walk(child); | ||||
if (!device_is_attached(child)) | if (!device_is_attached(child)) | ||||
continue; | continue; | ||||
status = AcpiEvaluateObject(acpi_get_handle(child), "_PRW", NULL, NULL); | status = AcpiEvaluateObject(acpi_get_handle(child), "_PRW", NULL, NULL); | ||||
if (ACPI_SUCCESS(status)) { | if (ACPI_SUCCESS(status)) { | ||||
SYSCTL_ADD_PROC(device_get_sysctl_ctx(child), | SYSCTL_ADD_PROC(device_get_sysctl_ctx(child), | ||||
SYSCTL_CHILDREN(device_get_sysctl_tree(child)), OID_AUTO, | SYSCTL_CHILDREN(device_get_sysctl_tree(child)), OID_AUTO, | ||||
"wake", CTLTYPE_INT | CTLFLAG_RW, child, 0, | "wake", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, child, 0, | ||||
acpi_wake_set_sysctl, "I", "Device set to wake the system"); | acpi_wake_set_sysctl, "I", "Device set to wake the system"); | ||||
} | } | ||||
} | } | ||||
free(devlist, M_TEMP); | free(devlist, M_TEMP); | ||||
return (0); | return (0); | ||||
} | } | ||||
Show All 24 Lines | |||||
kern_setenv((char *)oidp->oid_arg1, temp); | kern_setenv((char *)oidp->oid_arg1, temp); | ||||
acpi_set_debugging(NULL); | acpi_set_debugging(NULL); | ||||
} | } | ||||
ACPI_SERIAL_END(acpi); | ACPI_SERIAL_END(acpi); | ||||
return (error); | return (error); | ||||
} | } | ||||
SYSCTL_PROC(_debug_acpi, OID_AUTO, layer, CTLFLAG_RW | CTLTYPE_STRING, | SYSCTL_PROC(_debug_acpi, OID_AUTO, layer, | ||||
"debug.acpi.layer", 0, acpi_debug_sysctl, "A", ""); | CTLFLAG_RW | CTLTYPE_STRING | CTLFLAG_NEEDGIANT, "debug.acpi.layer", 0, | ||||
SYSCTL_PROC(_debug_acpi, OID_AUTO, level, CTLFLAG_RW | CTLTYPE_STRING, | acpi_debug_sysctl, "A", | ||||
"debug.acpi.level", 0, acpi_debug_sysctl, "A", ""); | ""); | ||||
SYSCTL_PROC(_debug_acpi, OID_AUTO, level, | |||||
CTLFLAG_RW | CTLTYPE_STRING | CTLFLAG_NEEDGIANT, "debug.acpi.level", 0, | |||||
acpi_debug_sysctl, "A", | |||||
""); | |||||
#endif /* ACPI_DEBUG */ | #endif /* ACPI_DEBUG */ | ||||
static int | static int | ||||
acpi_debug_objects_sysctl(SYSCTL_HANDLER_ARGS) | acpi_debug_objects_sysctl(SYSCTL_HANDLER_ARGS) | ||||
{ | { | ||||
int error; | int error; | ||||
int old; | int old; | ||||
Show All 12 Lines |