aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBob Moore <robert.moore@intel.com>2014-02-25 21:33:32 -0500
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2014-03-17 20:52:17 -0400
commita487af33a4f0f5ced860ab18c4a740b97b435a3e (patch)
treefa3eb3eb30150c86672ec6c78fa074360ce30272
parent73581c022d2e4484734f226284bda817b2937dfe (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.h4
-rw-r--r--drivers/acpi/acpica/exdump.c229
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
101static struct acpi_exdump_info acpi_ex_dump_package[5] = { 101static 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
109static struct acpi_exdump_info acpi_ex_dump_device[4] = { 110static 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
118static struct acpi_exdump_info acpi_ex_dump_event[2] = { 119static 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
145static struct acpi_exdump_info acpi_ex_dump_region[7] = { 146static 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
155static struct acpi_exdump_info acpi_ex_dump_power[5] = { 157static 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
167static struct acpi_exdump_info acpi_ex_dump_processor[7] = { 170static 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
244static struct acpi_exdump_info acpi_ex_dump_notify[7] = { 247static 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
258static 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
268static 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
257static struct acpi_exdump_info acpi_ex_dump_common[4] = { 276static 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
265static struct acpi_exdump_info acpi_ex_dump_field_common[7] = { 285static 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"},