|
@@ -49,22 +49,7 @@
|
|
|
#define _COMPONENT ACPI_EVENTS
|
|
|
ACPI_MODULE_NAME("evmisc")
|
|
|
|
|
|
-/* Names for Notify() values, used for debug output */
|
|
|
-#ifdef ACPI_DEBUG_OUTPUT
|
|
|
-static const char *acpi_notify_value_names[] = {
|
|
|
- "Bus Check",
|
|
|
- "Device Check",
|
|
|
- "Device Wake",
|
|
|
- "Eject Request",
|
|
|
- "Device Check Light",
|
|
|
- "Frequency Mismatch",
|
|
|
- "Bus Mode Mismatch",
|
|
|
- "Power Fault"
|
|
|
-};
|
|
|
-#endif
|
|
|
-
|
|
|
/* Pointer to FACS needed for the Global Lock */
|
|
|
-
|
|
|
static struct acpi_table_facs *facs = NULL;
|
|
|
|
|
|
/* Local prototypes */
|
|
@@ -94,7 +79,6 @@ u8 acpi_ev_is_notify_object(struct acpi_namespace_node *node)
|
|
|
switch (node->type) {
|
|
|
case ACPI_TYPE_DEVICE:
|
|
|
case ACPI_TYPE_PROCESSOR:
|
|
|
- case ACPI_TYPE_POWER:
|
|
|
case ACPI_TYPE_THERMAL:
|
|
|
/*
|
|
|
* These are the ONLY objects that can receive ACPI notifications
|
|
@@ -139,17 +123,9 @@ acpi_ev_queue_notify_request(struct acpi_namespace_node * node,
|
|
|
* initiate soft-off or sleep operation?
|
|
|
*/
|
|
|
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
|
|
- "Dispatching Notify(%X) on node %p\n", notify_value,
|
|
|
- node));
|
|
|
-
|
|
|
- if (notify_value <= 7) {
|
|
|
- ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Notify value: %s\n",
|
|
|
- acpi_notify_value_names[notify_value]));
|
|
|
- } else {
|
|
|
- ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
|
|
- "Notify value: 0x%2.2X **Device Specific**\n",
|
|
|
- notify_value));
|
|
|
- }
|
|
|
+ "Dispatching Notify on [%4.4s] Node %p Value 0x%2.2X (%s)\n",
|
|
|
+ acpi_ut_get_node_name(node), node, notify_value,
|
|
|
+ acpi_ut_get_notify_name(notify_value)));
|
|
|
|
|
|
/* Get the notify object attached to the NS Node */
|
|
|
|
|
@@ -159,10 +135,12 @@ acpi_ev_queue_notify_request(struct acpi_namespace_node * node,
|
|
|
/* We have the notify object, Get the right handler */
|
|
|
|
|
|
switch (node->type) {
|
|
|
+
|
|
|
+ /* Notify allowed only on these types */
|
|
|
+
|
|
|
case ACPI_TYPE_DEVICE:
|
|
|
case ACPI_TYPE_THERMAL:
|
|
|
case ACPI_TYPE_PROCESSOR:
|
|
|
- case ACPI_TYPE_POWER:
|
|
|
|
|
|
if (notify_value <= ACPI_MAX_SYS_NOTIFY) {
|
|
|
handler_obj =
|
|
@@ -179,8 +157,13 @@ acpi_ev_queue_notify_request(struct acpi_namespace_node * node,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /* If there is any handler to run, schedule the dispatcher */
|
|
|
-
|
|
|
+ /*
|
|
|
+ * If there is any handler to run, schedule the dispatcher.
|
|
|
+ * Check for:
|
|
|
+ * 1) Global system notify handler
|
|
|
+ * 2) Global device notify handler
|
|
|
+ * 3) Per-device notify handler
|
|
|
+ */
|
|
|
if ((acpi_gbl_system_notify.handler
|
|
|
&& (notify_value <= ACPI_MAX_SYS_NOTIFY))
|
|
|
|| (acpi_gbl_device_notify.handler
|
|
@@ -190,6 +173,13 @@ acpi_ev_queue_notify_request(struct acpi_namespace_node * node,
|
|
|
return (AE_NO_MEMORY);
|
|
|
}
|
|
|
|
|
|
+ if (!handler_obj) {
|
|
|
+ ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
|
|
+ "Executing system notify handler for Notify (%4.4s, %X) node %p\n",
|
|
|
+ acpi_ut_get_node_name(node),
|
|
|
+ notify_value, node));
|
|
|
+ }
|
|
|
+
|
|
|
notify_info->common.descriptor_type =
|
|
|
ACPI_DESC_TYPE_STATE_NOTIFY;
|
|
|
notify_info->notify.node = node;
|
|
@@ -202,15 +192,12 @@ acpi_ev_queue_notify_request(struct acpi_namespace_node * node,
|
|
|
if (ACPI_FAILURE(status)) {
|
|
|
acpi_ut_delete_generic_state(notify_info);
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- if (!handler_obj) {
|
|
|
+ } else {
|
|
|
/*
|
|
|
- * There is no per-device notify handler for this device.
|
|
|
- * This may or may not be a problem.
|
|
|
+ * There is no notify handler (per-device or system) for this device.
|
|
|
*/
|
|
|
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
|
|
- "No notify handler for Notify(%4.4s, %X) node %p\n",
|
|
|
+ "No notify handler for Notify (%4.4s, %X) node %p\n",
|
|
|
acpi_ut_get_node_name(node), notify_value,
|
|
|
node));
|
|
|
}
|