diff options
| author | Bob Moore <robert.moore@intel.com> | 2014-02-25 21:33:32 -0500 |
|---|---|---|
| committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2014-03-17 20:52:17 -0400 |
| commit | a487af33a4f0f5ced860ab18c4a740b97b435a3e (patch) | |
| tree | fa3eb3eb30150c86672ec6c78fa074360ce30272 | |
| parent | 73581c022d2e4484734f226284bda817b2937dfe (diff) | |
ACPICA: Debugger: Add missing objects; Traverse linked lists
This change adds support for two missing objects, the "extra" and
"data" secondary objects, as well as adding support to traverse and
display linked lists related to ACPICA objects.
Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Lv Zheng <lv.zheng@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
| -rw-r--r-- | drivers/acpi/acpica/acinterp.h | 4 | ||||
| -rw-r--r-- | drivers/acpi/acpica/exdump.c | 229 |
2 files changed, 199 insertions, 34 deletions
diff --git a/drivers/acpi/acpica/acinterp.h b/drivers/acpi/acpica/acinterp.h index 277f4d03c080..fc222d69e2ab 100644 --- a/drivers/acpi/acpica/acinterp.h +++ b/drivers/acpi/acpica/acinterp.h | |||
| @@ -89,6 +89,10 @@ typedef const struct acpi_exdump_info { | |||
| 89 | #define ACPI_EXD_PACKAGE 11 | 89 | #define ACPI_EXD_PACKAGE 11 |
| 90 | #define ACPI_EXD_FIELD 12 | 90 | #define ACPI_EXD_FIELD 12 |
| 91 | #define ACPI_EXD_REFERENCE 13 | 91 | #define ACPI_EXD_REFERENCE 13 |
| 92 | #define ACPI_EXD_LIST 14 /* Operand object list */ | ||
| 93 | #define ACPI_EXD_HDLR_LIST 15 /* Address Handler list */ | ||
| 94 | #define ACPI_EXD_RGN_LIST 16 /* Region list */ | ||
| 95 | #define ACPI_EXD_NODE 17 /* Namespace Node */ | ||
| 92 | 96 | ||
| 93 | /* restore default alignment */ | 97 | /* restore default alignment */ |
| 94 | 98 | ||
diff --git a/drivers/acpi/acpica/exdump.c b/drivers/acpi/acpica/exdump.c index c3e419c23d17..973fdae00f94 100644 --- a/drivers/acpi/acpica/exdump.c +++ b/drivers/acpi/acpica/exdump.c | |||
| @@ -94,12 +94,13 @@ static struct acpi_exdump_info acpi_ex_dump_buffer[5] = { | |||
| 94 | {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_buffer), NULL}, | 94 | {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_buffer), NULL}, |
| 95 | {ACPI_EXD_UINT32, ACPI_EXD_OFFSET(buffer.length), "Length"}, | 95 | {ACPI_EXD_UINT32, ACPI_EXD_OFFSET(buffer.length), "Length"}, |
| 96 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(buffer.pointer), "Pointer"}, | 96 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(buffer.pointer), "Pointer"}, |
| 97 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(buffer.node), "Parent Node"}, | 97 | {ACPI_EXD_NODE, ACPI_EXD_OFFSET(buffer.node), "Parent Node"}, |
| 98 | {ACPI_EXD_BUFFER, 0, NULL} | 98 | {ACPI_EXD_BUFFER, 0, NULL} |
| 99 | }; | 99 | }; |
| 100 | 100 | ||
| 101 | static struct acpi_exdump_info acpi_ex_dump_package[5] = { | 101 | static struct acpi_exdump_info acpi_ex_dump_package[6] = { |
| 102 | {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_package), NULL}, | 102 | {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_package), NULL}, |
| 103 | {ACPI_EXD_NODE, ACPI_EXD_OFFSET(package.node), "Parent Node"}, | ||
| 103 | {ACPI_EXD_UINT8, ACPI_EXD_OFFSET(package.flags), "Flags"}, | 104 | {ACPI_EXD_UINT8, ACPI_EXD_OFFSET(package.flags), "Flags"}, |
| 104 | {ACPI_EXD_UINT32, ACPI_EXD_OFFSET(package.count), "Elements"}, | 105 | {ACPI_EXD_UINT32, ACPI_EXD_OFFSET(package.count), "Elements"}, |
| 105 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(package.elements), "Element List"}, | 106 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(package.elements), "Element List"}, |
| @@ -108,11 +109,11 @@ static struct acpi_exdump_info acpi_ex_dump_package[5] = { | |||
| 108 | 109 | ||
| 109 | static struct acpi_exdump_info acpi_ex_dump_device[4] = { | 110 | static struct acpi_exdump_info acpi_ex_dump_device[4] = { |
| 110 | {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_device), NULL}, | 111 | {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_device), NULL}, |
| 111 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(device.handler), "Handler"}, | ||
| 112 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(device.notify_list[0]), | 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.notify_list[1]), | 114 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(device.notify_list[1]), |
| 115 | "Device Notify"} | 115 | "Device Notify"}, |
| 116 | {ACPI_EXD_HDLR_LIST, ACPI_EXD_OFFSET(device.handler), "Handler"} | ||
| 116 | }; | 117 | }; |
| 117 | 118 | ||
| 118 | static struct acpi_exdump_info acpi_ex_dump_event[2] = { | 119 | static struct acpi_exdump_info acpi_ex_dump_event[2] = { |
| @@ -142,17 +143,18 @@ static struct acpi_exdump_info acpi_ex_dump_mutex[5] = { | |||
| 142 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(mutex.os_mutex), "OsMutex"} | 143 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(mutex.os_mutex), "OsMutex"} |
| 143 | }; | 144 | }; |
| 144 | 145 | ||
| 145 | static struct acpi_exdump_info acpi_ex_dump_region[7] = { | 146 | static struct acpi_exdump_info acpi_ex_dump_region[8] = { |
| 146 | {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_region), NULL}, | 147 | {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_region), NULL}, |
| 147 | {ACPI_EXD_UINT8, ACPI_EXD_OFFSET(region.space_id), "Space Id"}, | 148 | {ACPI_EXD_UINT8, ACPI_EXD_OFFSET(region.space_id), "Space Id"}, |
| 148 | {ACPI_EXD_UINT8, ACPI_EXD_OFFSET(region.flags), "Flags"}, | 149 | {ACPI_EXD_UINT8, ACPI_EXD_OFFSET(region.flags), "Flags"}, |
| 150 | {ACPI_EXD_NODE, ACPI_EXD_OFFSET(region.node), "Parent Node"}, | ||
| 149 | {ACPI_EXD_ADDRESS, ACPI_EXD_OFFSET(region.address), "Address"}, | 151 | {ACPI_EXD_ADDRESS, ACPI_EXD_OFFSET(region.address), "Address"}, |
| 150 | {ACPI_EXD_UINT32, ACPI_EXD_OFFSET(region.length), "Length"}, | 152 | {ACPI_EXD_UINT32, ACPI_EXD_OFFSET(region.length), "Length"}, |
| 151 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(region.handler), "Handler"}, | 153 | {ACPI_EXD_HDLR_LIST, ACPI_EXD_OFFSET(region.handler), "Handler"}, |
| 152 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(region.next), "Next"} | 154 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(region.next), "Next"} |
| 153 | }; | 155 | }; |
| 154 | 156 | ||
| 155 | static struct acpi_exdump_info acpi_ex_dump_power[5] = { | 157 | static struct acpi_exdump_info acpi_ex_dump_power[6] = { |
| 156 | {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_power), NULL}, | 158 | {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_power), NULL}, |
| 157 | {ACPI_EXD_UINT32, ACPI_EXD_OFFSET(power_resource.system_level), | 159 | {ACPI_EXD_UINT32, ACPI_EXD_OFFSET(power_resource.system_level), |
| 158 | "System Level"}, | 160 | "System Level"}, |
| @@ -161,7 +163,8 @@ static struct acpi_exdump_info acpi_ex_dump_power[5] = { | |||
| 161 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(power_resource.notify_list[0]), | 163 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(power_resource.notify_list[0]), |
| 162 | "System Notify"}, | 164 | "System Notify"}, |
| 163 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(power_resource.notify_list[1]), | 165 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(power_resource.notify_list[1]), |
| 164 | "Device Notify"} | 166 | "Device Notify"}, |
| 167 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(power_resource.handler), "Handler"} | ||
| 165 | }; | 168 | }; |
| 166 | 169 | ||
| 167 | static struct acpi_exdump_info acpi_ex_dump_processor[7] = { | 170 | static struct acpi_exdump_info acpi_ex_dump_processor[7] = { |
| @@ -225,7 +228,7 @@ static struct acpi_exdump_info acpi_ex_dump_reference[8] = { | |||
| 225 | {ACPI_EXD_UINT8, ACPI_EXD_OFFSET(reference.target_type), "Target Type"}, | 228 | {ACPI_EXD_UINT8, ACPI_EXD_OFFSET(reference.target_type), "Target Type"}, |
| 226 | {ACPI_EXD_UINT32, ACPI_EXD_OFFSET(reference.value), "Value"}, | 229 | {ACPI_EXD_UINT32, ACPI_EXD_OFFSET(reference.value), "Value"}, |
| 227 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(reference.object), "Object Desc"}, | 230 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(reference.object), "Object Desc"}, |
| 228 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(reference.node), "Node"}, | 231 | {ACPI_EXD_NODE, ACPI_EXD_OFFSET(reference.node), "Node"}, |
| 229 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(reference.where), "Where"}, | 232 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(reference.where), "Where"}, |
| 230 | {ACPI_EXD_REFERENCE, 0, NULL} | 233 | {ACPI_EXD_REFERENCE, 0, NULL} |
| 231 | }; | 234 | }; |
| @@ -234,16 +237,16 @@ static struct acpi_exdump_info acpi_ex_dump_address_handler[6] = { | |||
| 234 | {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_address_handler), | 237 | {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_address_handler), |
| 235 | NULL}, | 238 | NULL}, |
| 236 | {ACPI_EXD_UINT8, ACPI_EXD_OFFSET(address_space.space_id), "Space Id"}, | 239 | {ACPI_EXD_UINT8, ACPI_EXD_OFFSET(address_space.space_id), "Space Id"}, |
| 237 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(address_space.next), "Next"}, | 240 | {ACPI_EXD_HDLR_LIST, ACPI_EXD_OFFSET(address_space.next), "Next"}, |
| 238 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(address_space.region_list), | 241 | {ACPI_EXD_RGN_LIST, ACPI_EXD_OFFSET(address_space.region_list), |
| 239 | "Region List"}, | 242 | "Region List"}, |
| 240 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(address_space.node), "Node"}, | 243 | {ACPI_EXD_NODE, ACPI_EXD_OFFSET(address_space.node), "Node"}, |
| 241 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(address_space.context), "Context"} | 244 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(address_space.context), "Context"} |
| 242 | }; | 245 | }; |
| 243 | 246 | ||
| 244 | static struct acpi_exdump_info acpi_ex_dump_notify[7] = { | 247 | static struct acpi_exdump_info acpi_ex_dump_notify[7] = { |
| 245 | {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_notify), NULL}, | 248 | {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_notify), NULL}, |
| 246 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(notify.node), "Node"}, | 249 | {ACPI_EXD_NODE, ACPI_EXD_OFFSET(notify.node), "Node"}, |
| 247 | {ACPI_EXD_UINT32, ACPI_EXD_OFFSET(notify.handler_type), "Handler Type"}, | 250 | {ACPI_EXD_UINT32, ACPI_EXD_OFFSET(notify.handler_type), "Handler Type"}, |
| 248 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(notify.handler), "Handler"}, | 251 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(notify.handler), "Handler"}, |
| 249 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(notify.context), "Context"}, | 252 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(notify.context), "Context"}, |
| @@ -252,14 +255,31 @@ static struct acpi_exdump_info acpi_ex_dump_notify[7] = { | |||
| 252 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(notify.next[1]), "Next Device Notify"} | 255 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(notify.next[1]), "Next Device Notify"} |
| 253 | }; | 256 | }; |
| 254 | 257 | ||
| 258 | static struct acpi_exdump_info acpi_ex_dump_extra[6] = { | ||
| 259 | {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_extra), NULL}, | ||
| 260 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(extra.method_REG), "_REG Method"}, | ||
| 261 | {ACPI_EXD_NODE, ACPI_EXD_OFFSET(extra.scope_node), "Scope Node"}, | ||
| 262 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(extra.region_context), | ||
| 263 | "Region Context"}, | ||
| 264 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(extra.aml_start), "Aml Start"}, | ||
| 265 | {ACPI_EXD_UINT32, ACPI_EXD_OFFSET(extra.aml_length), "Aml Length"} | ||
| 266 | }; | ||
| 267 | |||
| 268 | static struct acpi_exdump_info acpi_ex_dump_data[3] = { | ||
| 269 | {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_data), NULL}, | ||
| 270 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(data.handler), "Handler"}, | ||
| 271 | {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(data.pointer), "Raw Data"} | ||
| 272 | }; | ||
| 273 | |||
| 255 | /* Miscellaneous tables */ | 274 | /* Miscellaneous tables */ |
| 256 | 275 | ||
| 257 | static struct acpi_exdump_info acpi_ex_dump_common[4] = { | 276 | static struct acpi_exdump_info acpi_ex_dump_common[5] = { |
| 258 | {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_common), NULL}, | 277 | {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_common), NULL}, |
| 259 | {ACPI_EXD_TYPE, 0, NULL}, | 278 | {ACPI_EXD_TYPE, 0, NULL}, |
| 260 | {ACPI_EXD_UINT16, ACPI_EXD_OFFSET(common.reference_count), | 279 | {ACPI_EXD_UINT16, ACPI_EXD_OFFSET(common.reference_count), |
| 261 | "Reference Count"}, | 280 | "Reference Count"}, |
| 262 | {ACPI_EXD_UINT8, ACPI_EXD_OFFSET(common.flags), "Flags"} | 281 | {ACPI_EXD_UINT8, ACPI_EXD_OFFSET(common.flags), "Flags"}, |
| 282 | {ACPI_EXD_LIST, ACPI_EXD_OFFSET(common.next_object), "Object List"} | ||
| 263 | }; | 283 | }; |
| 264 | 284 | ||
| 265 | static struct acpi_exdump_info acpi_ex_dump_field_common[7] = { | 285 | static struct acpi_exdump_info acpi_ex_dump_field_common[7] = { |
| @@ -274,15 +294,17 @@ static struct acpi_exdump_info acpi_ex_dump_field_common[7] = { | |||
| 274 | "Field Bit Offset"}, | 294 | "Field Bit Offset"}, |
| 275 | {ACPI_EXD_UINT32, ACPI_EXD_OFFSET(common_field.base_byte_offset), | 295 | {ACPI_EXD_UINT32, ACPI_EXD_OFFSET(common_field.base_byte_offset), |
| 276 | "Base Byte Offset"}, | 296 | "Base Byte Offset"}, |
