diff options
author | Bob Moore <robert.moore@intel.com> | 2012-05-02 23:08:19 -0400 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2012-06-01 11:51:50 -0400 |
commit | 86ed4bc83abf530cf2019044b74f89a39dfd6425 (patch) | |
tree | 7cd21414f6121486079be2ca9cb9ff0a7722e01b /drivers/acpi/acpica/exdump.c | |
parent | 5134abfcfb4a8a9ef42c82dabad05762fbf04376 (diff) |
ACPICA: Add support for multiple notify handlers
This change adds support to allow multiple notify handlers on
Device, ThermalZone, and Processor objects. Also re-worked
and restructured the entire notify support code for handler
installation, handler removal, notify event queuing, and notify
dispatch to handler.
Extends and updates original commit 3f0be67("ACPI / ACPICA: Multiple
system notify handlers per device") by Rafael Wysocki.
Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Lin Ming <ming.m.lin@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/acpi/acpica/exdump.c')
-rw-r--r-- | drivers/acpi/acpica/exdump.c | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/drivers/acpi/acpica/exdump.c b/drivers/acpi/acpica/exdump.c index 836fe76e65d0..26c56545804d 100644 --- a/drivers/acpi/acpica/exdump.c +++ b/drivers/acpi/acpica/exdump.c | |||
@@ -109,9 +109,9 @@ static struct acpi_exdump_info acpi_ex_dump_package[5] = { | |||
109 | static struct acpi_exdump_info acpi_ex_dump_device[4] = { | 109 | static struct acpi_exdump_info acpi_ex_dump_device[4] = { |
110 | {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_device), NULL}, | 110 | {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_device), NULL}, |
111 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(device.handler), "Handler"}, | 111 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(device.handler), "Handler"}, |
112 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(device.system_notify), | 112 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(device.notify_list[0]), |
113 | "System Notify"}, | 113 | "System Notify"}, |
114 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(device.device_notify), | 114 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(device.notify_list[1]), |
115 | "Device Notify"} | 115 | "Device Notify"} |
116 | }; | 116 | }; |
117 | 117 | ||
@@ -158,9 +158,9 @@ static struct acpi_exdump_info acpi_ex_dump_power[5] = { | |||
158 | "System Level"}, | 158 | "System Level"}, |
159 | {ACPI_EXD_UINT32, ACPI_EXD_OFFSET(power_resource.resource_order), | 159 | {ACPI_EXD_UINT32, ACPI_EXD_OFFSET(power_resource.resource_order), |
160 | "Resource Order"}, | 160 | "Resource Order"}, |
161 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(power_resource.system_notify), | 161 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(power_resource.notify_list[0]), |
162 | "System Notify"}, | 162 | "System Notify"}, |
163 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(power_resource.device_notify), | 163 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(power_resource.notify_list[1]), |
164 | "Device Notify"} | 164 | "Device Notify"} |
165 | }; | 165 | }; |
166 | 166 | ||
@@ -169,18 +169,18 @@ static struct acpi_exdump_info acpi_ex_dump_processor[7] = { | |||
169 | {ACPI_EXD_UINT8, ACPI_EXD_OFFSET(processor.proc_id), "Processor ID"}, | 169 | {ACPI_EXD_UINT8, ACPI_EXD_OFFSET(processor.proc_id), "Processor ID"}, |
170 | {ACPI_EXD_UINT8, ACPI_EXD_OFFSET(processor.length), "Length"}, | 170 | {ACPI_EXD_UINT8, ACPI_EXD_OFFSET(processor.length), "Length"}, |
171 | {ACPI_EXD_ADDRESS, ACPI_EXD_OFFSET(processor.address), "Address"}, | 171 | {ACPI_EXD_ADDRESS, ACPI_EXD_OFFSET(processor.address), "Address"}, |
172 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(processor.system_notify), | 172 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(processor.notify_list[0]), |
173 | "System Notify"}, | 173 | "System Notify"}, |
174 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(processor.device_notify), | 174 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(processor.notify_list[1]), |
175 | "Device Notify"}, | 175 | "Device Notify"}, |
176 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(processor.handler), "Handler"} | 176 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(processor.handler), "Handler"} |
177 | }; | 177 | }; |
178 | 178 | ||
179 | static struct acpi_exdump_info acpi_ex_dump_thermal[4] = { | 179 | static struct acpi_exdump_info acpi_ex_dump_thermal[4] = { |
180 | {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_thermal), NULL}, | 180 | {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_thermal), NULL}, |
181 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(thermal_zone.system_notify), | 181 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(thermal_zone.notify_list[0]), |
182 | "System Notify"}, | 182 | "System Notify"}, |
183 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(thermal_zone.device_notify), | 183 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(thermal_zone.notify_list[1]), |
184 | "Device Notify"}, | 184 | "Device Notify"}, |
185 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(thermal_zone.handler), "Handler"} | 185 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(thermal_zone.handler), "Handler"} |
186 | }; | 186 | }; |
@@ -241,10 +241,15 @@ static struct acpi_exdump_info acpi_ex_dump_address_handler[6] = { | |||
241 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(address_space.context), "Context"} | 241 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(address_space.context), "Context"} |
242 | }; | 242 | }; |
243 | 243 | ||
244 | static struct acpi_exdump_info acpi_ex_dump_notify[3] = { | 244 | static struct acpi_exdump_info acpi_ex_dump_notify[7] = { |
245 | {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_notify), NULL}, | 245 | {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_notify), NULL}, |
246 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(notify.node), "Node"}, | 246 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(notify.node), "Node"}, |
247 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(notify.context), "Context"} | 247 | {ACPI_EXD_UINT32, ACPI_EXD_OFFSET(notify.handler_type), "Handler Type"}, |
248 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(notify.handler), "Handler"}, | ||
249 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(notify.context), "Context"}, | ||
250 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(notify.next[0]), | ||
251 | "Next System Notify"}, | ||
252 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(notify.next[1]), "Next Device Notify"} | ||
248 | }; | 253 | }; |
249 | 254 | ||
250 | /* Miscellaneous tables */ | 255 | /* Miscellaneous tables */ |