ACPICA: Events: Add support to return both enable/status register values for GPE and fixed event.
ACPICA commit e25d791e4b3d5b9f4ead298269610cb05f89749a There is a facility in Linux, developers can obtain GPE and fixed event status via /sys/firmware/interrupts/. This is implemented using acpi_get_event_status() and acpi_get_gpe_status(). Recently while debugging some GPE race issues, it is found that the facility is lacking in the ability to obtain real hardware register values, the confusing information makes debugging difficult. This patch modifies acpi_get_gpe_status() to return EN register values to fix this gap. Then flags returned from acpi_get_event_status() and acpi_get_gpe_status() are also cleaned up to reflect this change. The old ACPI_EVENT_FLAG_SET is carefully kept to avoid regressions. It can be deleted after we can make sure all its references are removed from OSPM code. Lv Zheng. Link: https://github.com/acpica/acpica/commit/e25d791e Signed-off-by: Lv Zheng <lv.zheng@intel.com> Signed-off-by: Bob Moore <robert.moore@intel.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
77ddc2fe08
commit
09af8e8290
|
@ -356,7 +356,8 @@ acpi_status acpi_get_event_status(u32 event, acpi_event_status * event_status)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (in_byte) {
|
if (in_byte) {
|
||||||
local_event_status |= ACPI_EVENT_FLAG_ENABLED;
|
local_event_status |=
|
||||||
|
(ACPI_EVENT_FLAG_ENABLED | ACPI_EVENT_FLAG_ENABLE_SET);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Fixed event currently active? */
|
/* Fixed event currently active? */
|
||||||
|
@ -369,7 +370,7 @@ acpi_status acpi_get_event_status(u32 event, acpi_event_status * event_status)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (in_byte) {
|
if (in_byte) {
|
||||||
local_event_status |= ACPI_EVENT_FLAG_SET;
|
local_event_status |= ACPI_EVENT_FLAG_STATUS_SET;
|
||||||
}
|
}
|
||||||
|
|
||||||
(*event_status) = local_event_status;
|
(*event_status) = local_event_status;
|
||||||
|
|
|
@ -250,6 +250,17 @@ acpi_hw_get_gpe_status(struct acpi_gpe_event_info * gpe_event_info,
|
||||||
local_event_status |= ACPI_EVENT_FLAG_WAKE_ENABLED;
|
local_event_status |= ACPI_EVENT_FLAG_WAKE_ENABLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* GPE currently enabled (enable bit == 1)? */
|
||||||
|
|
||||||
|
status = acpi_hw_read(&in_byte, &gpe_register_info->enable_address);
|
||||||
|
if (ACPI_FAILURE(status)) {
|
||||||
|
return (status);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (register_bit & in_byte) {
|
||||||
|
local_event_status |= ACPI_EVENT_FLAG_ENABLE_SET;
|
||||||
|
}
|
||||||
|
|
||||||
/* GPE currently active (status bit == 1)? */
|
/* GPE currently active (status bit == 1)? */
|
||||||
|
|
||||||
status = acpi_hw_read(&in_byte, &gpe_register_info->status_address);
|
status = acpi_hw_read(&in_byte, &gpe_register_info->status_address);
|
||||||
|
@ -258,7 +269,7 @@ acpi_hw_get_gpe_status(struct acpi_gpe_event_info * gpe_event_info,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (register_bit & in_byte) {
|
if (register_bit & in_byte) {
|
||||||
local_event_status |= ACPI_EVENT_FLAG_SET;
|
local_event_status |= ACPI_EVENT_FLAG_STATUS_SET;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set return value */
|
/* Set return value */
|
||||||
|
|
|
@ -733,23 +733,26 @@ typedef u32 acpi_event_type;
|
||||||
* The encoding of acpi_event_status is illustrated below.
|
* The encoding of acpi_event_status is illustrated below.
|
||||||
* Note that a set bit (1) indicates the property is TRUE
|
* Note that a set bit (1) indicates the property is TRUE
|
||||||
* (e.g. if bit 0 is set then the event is enabled).
|
* (e.g. if bit 0 is set then the event is enabled).
|
||||||
* +-------------+-+-+-+-+
|
* +-------------+-+-+-+-+-+
|
||||||
* | Bits 31:4 |3|2|1|0|
|
* | Bits 31:5 |4|3|2|1|0|
|
||||||
* +-------------+-+-+-+-+
|
* +-------------+-+-+-+-+-+
|
||||||
* | | | | |
|
* | | | | | |
|
||||||
* | | | | +- Enabled?
|
* | | | | | +- Enabled?
|
||||||
* | | | +--- Enabled for wake?
|
* | | | | +--- Enabled for wake?
|
||||||
* | | +----- Set?
|
* | | | +----- Status bit set?
|
||||||
* | +------- Has a handler?
|
* | | +------- Enable bit set?
|
||||||
* +------------- <Reserved>
|
* | +--------- Has a handler?
|
||||||
|
* +--------------- <Reserved>
|
||||||
*/
|
*/
|
||||||
typedef u32 acpi_event_status;
|
typedef u32 acpi_event_status;
|
||||||
|
|
||||||
#define ACPI_EVENT_FLAG_DISABLED (acpi_event_status) 0x00
|
#define ACPI_EVENT_FLAG_DISABLED (acpi_event_status) 0x00
|
||||||
#define ACPI_EVENT_FLAG_ENABLED (acpi_event_status) 0x01
|
#define ACPI_EVENT_FLAG_ENABLED (acpi_event_status) 0x01
|
||||||
#define ACPI_EVENT_FLAG_WAKE_ENABLED (acpi_event_status) 0x02
|
#define ACPI_EVENT_FLAG_WAKE_ENABLED (acpi_event_status) 0x02
|
||||||
#define ACPI_EVENT_FLAG_SET (acpi_event_status) 0x04
|
#define ACPI_EVENT_FLAG_STATUS_SET (acpi_event_status) 0x04
|
||||||
#define ACPI_EVENT_FLAG_HAS_HANDLER (acpi_event_status) 0x08
|
#define ACPI_EVENT_FLAG_ENABLE_SET (acpi_event_status) 0x08
|
||||||
|
#define ACPI_EVENT_FLAG_HAS_HANDLER (acpi_event_status) 0x10
|
||||||
|
#define ACPI_EVENT_FLAG_SET ACPI_EVENT_FLAG_STATUS_SET
|
||||||
|
|
||||||
/* Actions for acpi_set_gpe, acpi_gpe_wakeup, acpi_hw_low_set_gpe */
|
/* Actions for acpi_set_gpe, acpi_gpe_wakeup, acpi_hw_low_set_gpe */
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue