162306a36Sopenharmony_ci// SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0
262306a36Sopenharmony_ci/******************************************************************************
362306a36Sopenharmony_ci *
462306a36Sopenharmony_ci * Module Name: exdump - Interpreter debug output routines
562306a36Sopenharmony_ci *
662306a36Sopenharmony_ci * Copyright (C) 2000 - 2023, Intel Corp.
762306a36Sopenharmony_ci *
862306a36Sopenharmony_ci *****************************************************************************/
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#include <acpi/acpi.h>
1162306a36Sopenharmony_ci#include "accommon.h"
1262306a36Sopenharmony_ci#include "acinterp.h"
1362306a36Sopenharmony_ci#include "amlcode.h"
1462306a36Sopenharmony_ci#include "acnamesp.h"
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci#define _COMPONENT          ACPI_EXECUTER
1762306a36Sopenharmony_ciACPI_MODULE_NAME("exdump")
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci/*
2062306a36Sopenharmony_ci * The following routines are used for debug output only
2162306a36Sopenharmony_ci */
2262306a36Sopenharmony_ci#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
2362306a36Sopenharmony_ci/* Local prototypes */
2462306a36Sopenharmony_cistatic void acpi_ex_out_string(const char *title, const char *value);
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_cistatic void acpi_ex_out_pointer(const char *title, const void *value);
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_cistatic void
2962306a36Sopenharmony_ciacpi_ex_dump_object(union acpi_operand_object *obj_desc,
3062306a36Sopenharmony_ci		    struct acpi_exdump_info *info);
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_cistatic void acpi_ex_dump_reference_obj(union acpi_operand_object *obj_desc);
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_cistatic void
3562306a36Sopenharmony_ciacpi_ex_dump_package_obj(union acpi_operand_object *obj_desc,
3662306a36Sopenharmony_ci			 u32 level, u32 index);
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci/*******************************************************************************
3962306a36Sopenharmony_ci *
4062306a36Sopenharmony_ci * Object Descriptor info tables
4162306a36Sopenharmony_ci *
4262306a36Sopenharmony_ci * Note: The first table entry must be an INIT opcode and must contain
4362306a36Sopenharmony_ci * the table length (number of table entries)
4462306a36Sopenharmony_ci *
4562306a36Sopenharmony_ci ******************************************************************************/
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_cistatic struct acpi_exdump_info acpi_ex_dump_integer[2] = {
4862306a36Sopenharmony_ci	{ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_integer), NULL},
4962306a36Sopenharmony_ci	{ACPI_EXD_UINT64, ACPI_EXD_OFFSET(integer.value), "Value"}
5062306a36Sopenharmony_ci};
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_cistatic struct acpi_exdump_info acpi_ex_dump_string[4] = {
5362306a36Sopenharmony_ci	{ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_string), NULL},
5462306a36Sopenharmony_ci	{ACPI_EXD_UINT32, ACPI_EXD_OFFSET(string.length), "Length"},
5562306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(string.pointer), "Pointer"},
5662306a36Sopenharmony_ci	{ACPI_EXD_STRING, 0, NULL}
5762306a36Sopenharmony_ci};
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_cistatic struct acpi_exdump_info acpi_ex_dump_buffer[5] = {
6062306a36Sopenharmony_ci	{ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_buffer), NULL},
6162306a36Sopenharmony_ci	{ACPI_EXD_UINT32, ACPI_EXD_OFFSET(buffer.length), "Length"},
6262306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(buffer.pointer), "Pointer"},
6362306a36Sopenharmony_ci	{ACPI_EXD_NODE, ACPI_EXD_OFFSET(buffer.node), "Parent Node"},
6462306a36Sopenharmony_ci	{ACPI_EXD_BUFFER, 0, NULL}
6562306a36Sopenharmony_ci};
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_cistatic struct acpi_exdump_info acpi_ex_dump_package[6] = {
6862306a36Sopenharmony_ci	{ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_package), NULL},
6962306a36Sopenharmony_ci	{ACPI_EXD_NODE, ACPI_EXD_OFFSET(package.node), "Parent Node"},
7062306a36Sopenharmony_ci	{ACPI_EXD_UINT8, ACPI_EXD_OFFSET(package.flags), "Flags"},
7162306a36Sopenharmony_ci	{ACPI_EXD_UINT32, ACPI_EXD_OFFSET(package.count), "Element Count"},
7262306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(package.elements), "Element List"},
7362306a36Sopenharmony_ci	{ACPI_EXD_PACKAGE, 0, NULL}
7462306a36Sopenharmony_ci};
7562306a36Sopenharmony_ci
7662306a36Sopenharmony_cistatic struct acpi_exdump_info acpi_ex_dump_device[4] = {
7762306a36Sopenharmony_ci	{ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_device), NULL},
7862306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(device.notify_list[0]),
7962306a36Sopenharmony_ci	 "System Notify"},
8062306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(device.notify_list[1]),
8162306a36Sopenharmony_ci	 "Device Notify"},
8262306a36Sopenharmony_ci	{ACPI_EXD_HDLR_LIST, ACPI_EXD_OFFSET(device.handler), "Handler"}
8362306a36Sopenharmony_ci};
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_cistatic struct acpi_exdump_info acpi_ex_dump_event[2] = {
8662306a36Sopenharmony_ci	{ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_event), NULL},
8762306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(event.os_semaphore), "OsSemaphore"}
8862306a36Sopenharmony_ci};
8962306a36Sopenharmony_ci
9062306a36Sopenharmony_cistatic struct acpi_exdump_info acpi_ex_dump_method[9] = {
9162306a36Sopenharmony_ci	{ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_method), NULL},
9262306a36Sopenharmony_ci	{ACPI_EXD_UINT8, ACPI_EXD_OFFSET(method.info_flags), "Info Flags"},
9362306a36Sopenharmony_ci	{ACPI_EXD_UINT8, ACPI_EXD_OFFSET(method.param_count),
9462306a36Sopenharmony_ci	 "Parameter Count"},
9562306a36Sopenharmony_ci	{ACPI_EXD_UINT8, ACPI_EXD_OFFSET(method.sync_level), "Sync Level"},
9662306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(method.mutex), "Mutex"},
9762306a36Sopenharmony_ci	{ACPI_EXD_UINT16, ACPI_EXD_OFFSET(method.owner_id), "Owner Id"},
9862306a36Sopenharmony_ci	{ACPI_EXD_UINT8, ACPI_EXD_OFFSET(method.thread_count), "Thread Count"},
9962306a36Sopenharmony_ci	{ACPI_EXD_UINT32, ACPI_EXD_OFFSET(method.aml_length), "Aml Length"},
10062306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(method.aml_start), "Aml Start"}
10162306a36Sopenharmony_ci};
10262306a36Sopenharmony_ci
10362306a36Sopenharmony_cistatic struct acpi_exdump_info acpi_ex_dump_mutex[6] = {
10462306a36Sopenharmony_ci	{ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_mutex), NULL},
10562306a36Sopenharmony_ci	{ACPI_EXD_UINT8, ACPI_EXD_OFFSET(mutex.sync_level), "Sync Level"},
10662306a36Sopenharmony_ci	{ACPI_EXD_UINT8, ACPI_EXD_OFFSET(mutex.original_sync_level),
10762306a36Sopenharmony_ci	 "Original Sync Level"},
10862306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(mutex.owner_thread), "Owner Thread"},
10962306a36Sopenharmony_ci	{ACPI_EXD_UINT16, ACPI_EXD_OFFSET(mutex.acquisition_depth),
11062306a36Sopenharmony_ci	 "Acquire Depth"},
11162306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(mutex.os_mutex), "OsMutex"}
11262306a36Sopenharmony_ci};
11362306a36Sopenharmony_ci
11462306a36Sopenharmony_cistatic struct acpi_exdump_info acpi_ex_dump_region[8] = {
11562306a36Sopenharmony_ci	{ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_region), NULL},
11662306a36Sopenharmony_ci	{ACPI_EXD_UINT8, ACPI_EXD_OFFSET(region.space_id), "Space Id"},
11762306a36Sopenharmony_ci	{ACPI_EXD_UINT8, ACPI_EXD_OFFSET(region.flags), "Flags"},
11862306a36Sopenharmony_ci	{ACPI_EXD_NODE, ACPI_EXD_OFFSET(region.node), "Parent Node"},
11962306a36Sopenharmony_ci	{ACPI_EXD_ADDRESS, ACPI_EXD_OFFSET(region.address), "Address"},
12062306a36Sopenharmony_ci	{ACPI_EXD_UINT32, ACPI_EXD_OFFSET(region.length), "Length"},
12162306a36Sopenharmony_ci	{ACPI_EXD_HDLR_LIST, ACPI_EXD_OFFSET(region.handler), "Handler"},
12262306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(region.next), "Next"}
12362306a36Sopenharmony_ci};
12462306a36Sopenharmony_ci
12562306a36Sopenharmony_cistatic struct acpi_exdump_info acpi_ex_dump_power[6] = {
12662306a36Sopenharmony_ci	{ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_power), NULL},
12762306a36Sopenharmony_ci	{ACPI_EXD_UINT32, ACPI_EXD_OFFSET(power_resource.system_level),
12862306a36Sopenharmony_ci	 "System Level"},
12962306a36Sopenharmony_ci	{ACPI_EXD_UINT32, ACPI_EXD_OFFSET(power_resource.resource_order),
13062306a36Sopenharmony_ci	 "Resource Order"},
13162306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(power_resource.notify_list[0]),
13262306a36Sopenharmony_ci	 "System Notify"},
13362306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(power_resource.notify_list[1]),
13462306a36Sopenharmony_ci	 "Device Notify"},
13562306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(power_resource.handler), "Handler"}
13662306a36Sopenharmony_ci};
13762306a36Sopenharmony_ci
13862306a36Sopenharmony_cistatic struct acpi_exdump_info acpi_ex_dump_processor[7] = {
13962306a36Sopenharmony_ci	{ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_processor), NULL},
14062306a36Sopenharmony_ci	{ACPI_EXD_UINT8, ACPI_EXD_OFFSET(processor.proc_id), "Processor ID"},
14162306a36Sopenharmony_ci	{ACPI_EXD_UINT8, ACPI_EXD_OFFSET(processor.length), "Length"},
14262306a36Sopenharmony_ci	{ACPI_EXD_ADDRESS, ACPI_EXD_OFFSET(processor.address), "Address"},
14362306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(processor.notify_list[0]),
14462306a36Sopenharmony_ci	 "System Notify"},
14562306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(processor.notify_list[1]),
14662306a36Sopenharmony_ci	 "Device Notify"},
14762306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(processor.handler), "Handler"}
14862306a36Sopenharmony_ci};
14962306a36Sopenharmony_ci
15062306a36Sopenharmony_cistatic struct acpi_exdump_info acpi_ex_dump_thermal[4] = {
15162306a36Sopenharmony_ci	{ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_thermal), NULL},
15262306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(thermal_zone.notify_list[0]),
15362306a36Sopenharmony_ci	 "System Notify"},
15462306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(thermal_zone.notify_list[1]),
15562306a36Sopenharmony_ci	 "Device Notify"},
15662306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(thermal_zone.handler), "Handler"}
15762306a36Sopenharmony_ci};
15862306a36Sopenharmony_ci
15962306a36Sopenharmony_cistatic struct acpi_exdump_info acpi_ex_dump_buffer_field[3] = {
16062306a36Sopenharmony_ci	{ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_buffer_field), NULL},
16162306a36Sopenharmony_ci	{ACPI_EXD_FIELD, 0, NULL},
16262306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(buffer_field.buffer_obj),
16362306a36Sopenharmony_ci	 "Buffer Object"}
16462306a36Sopenharmony_ci};
16562306a36Sopenharmony_ci
16662306a36Sopenharmony_cistatic struct acpi_exdump_info acpi_ex_dump_region_field[5] = {
16762306a36Sopenharmony_ci	{ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_region_field), NULL},
16862306a36Sopenharmony_ci	{ACPI_EXD_FIELD, 0, NULL},
16962306a36Sopenharmony_ci	{ACPI_EXD_UINT8, ACPI_EXD_OFFSET(field.access_length), "AccessLength"},
17062306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(field.region_obj), "Region Object"},
17162306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(field.resource_buffer),
17262306a36Sopenharmony_ci	 "ResourceBuffer"}
17362306a36Sopenharmony_ci};
17462306a36Sopenharmony_ci
17562306a36Sopenharmony_cistatic struct acpi_exdump_info acpi_ex_dump_bank_field[5] = {
17662306a36Sopenharmony_ci	{ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_bank_field), NULL},
17762306a36Sopenharmony_ci	{ACPI_EXD_FIELD, 0, NULL},
17862306a36Sopenharmony_ci	{ACPI_EXD_UINT32, ACPI_EXD_OFFSET(bank_field.value), "Value"},
17962306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(bank_field.region_obj),
18062306a36Sopenharmony_ci	 "Region Object"},
18162306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(bank_field.bank_obj), "Bank Object"}
18262306a36Sopenharmony_ci};
18362306a36Sopenharmony_ci
18462306a36Sopenharmony_cistatic struct acpi_exdump_info acpi_ex_dump_index_field[5] = {
18562306a36Sopenharmony_ci	{ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_bank_field), NULL},
18662306a36Sopenharmony_ci	{ACPI_EXD_FIELD, 0, NULL},
18762306a36Sopenharmony_ci	{ACPI_EXD_UINT32, ACPI_EXD_OFFSET(index_field.value), "Value"},
18862306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(index_field.index_obj),
18962306a36Sopenharmony_ci	 "Index Object"},
19062306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(index_field.data_obj), "Data Object"}
19162306a36Sopenharmony_ci};
19262306a36Sopenharmony_ci
19362306a36Sopenharmony_cistatic struct acpi_exdump_info acpi_ex_dump_reference[9] = {
19462306a36Sopenharmony_ci	{ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_reference), NULL},
19562306a36Sopenharmony_ci	{ACPI_EXD_UINT8, ACPI_EXD_OFFSET(reference.class), "Class"},
19662306a36Sopenharmony_ci	{ACPI_EXD_UINT8, ACPI_EXD_OFFSET(reference.target_type), "Target Type"},
19762306a36Sopenharmony_ci	{ACPI_EXD_UINT32, ACPI_EXD_OFFSET(reference.value), "Value"},
19862306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(reference.object), "Object Desc"},
19962306a36Sopenharmony_ci	{ACPI_EXD_NODE, ACPI_EXD_OFFSET(reference.node), "Node"},
20062306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(reference.where), "Where"},
20162306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(reference.index_pointer),
20262306a36Sopenharmony_ci	 "Index Pointer"},
20362306a36Sopenharmony_ci	{ACPI_EXD_REFERENCE, 0, NULL}
20462306a36Sopenharmony_ci};
20562306a36Sopenharmony_ci
20662306a36Sopenharmony_cistatic struct acpi_exdump_info acpi_ex_dump_address_handler[6] = {
20762306a36Sopenharmony_ci	{ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_address_handler),
20862306a36Sopenharmony_ci	 NULL},
20962306a36Sopenharmony_ci	{ACPI_EXD_UINT8, ACPI_EXD_OFFSET(address_space.space_id), "Space Id"},
21062306a36Sopenharmony_ci	{ACPI_EXD_HDLR_LIST, ACPI_EXD_OFFSET(address_space.next), "Next"},
21162306a36Sopenharmony_ci	{ACPI_EXD_RGN_LIST, ACPI_EXD_OFFSET(address_space.region_list),
21262306a36Sopenharmony_ci	 "Region List"},
21362306a36Sopenharmony_ci	{ACPI_EXD_NODE, ACPI_EXD_OFFSET(address_space.node), "Node"},
21462306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(address_space.context), "Context"}
21562306a36Sopenharmony_ci};
21662306a36Sopenharmony_ci
21762306a36Sopenharmony_cistatic struct acpi_exdump_info acpi_ex_dump_notify[7] = {
21862306a36Sopenharmony_ci	{ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_notify), NULL},
21962306a36Sopenharmony_ci	{ACPI_EXD_NODE, ACPI_EXD_OFFSET(notify.node), "Node"},
22062306a36Sopenharmony_ci	{ACPI_EXD_UINT32, ACPI_EXD_OFFSET(notify.handler_type), "Handler Type"},
22162306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(notify.handler), "Handler"},
22262306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(notify.context), "Context"},
22362306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(notify.next[0]),
22462306a36Sopenharmony_ci	 "Next System Notify"},
22562306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(notify.next[1]), "Next Device Notify"}
22662306a36Sopenharmony_ci};
22762306a36Sopenharmony_ci
22862306a36Sopenharmony_cistatic struct acpi_exdump_info acpi_ex_dump_extra[6] = {
22962306a36Sopenharmony_ci	{ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_extra), NULL},
23062306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(extra.method_REG), "_REG Method"},
23162306a36Sopenharmony_ci	{ACPI_EXD_NODE, ACPI_EXD_OFFSET(extra.scope_node), "Scope Node"},
23262306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(extra.region_context),
23362306a36Sopenharmony_ci	 "Region Context"},
23462306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(extra.aml_start), "Aml Start"},
23562306a36Sopenharmony_ci	{ACPI_EXD_UINT32, ACPI_EXD_OFFSET(extra.aml_length), "Aml Length"}
23662306a36Sopenharmony_ci};
23762306a36Sopenharmony_ci
23862306a36Sopenharmony_cistatic struct acpi_exdump_info acpi_ex_dump_data[3] = {
23962306a36Sopenharmony_ci	{ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_data), NULL},
24062306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(data.handler), "Handler"},
24162306a36Sopenharmony_ci	{ACPI_EXD_POINTER, ACPI_EXD_OFFSET(data.pointer), "Raw Data"}
24262306a36Sopenharmony_ci};
24362306a36Sopenharmony_ci
24462306a36Sopenharmony_ci/* Miscellaneous tables */
24562306a36Sopenharmony_ci
24662306a36Sopenharmony_cistatic struct acpi_exdump_info acpi_ex_dump_common[5] = {
24762306a36Sopenharmony_ci	{ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_common), NULL},
24862306a36Sopenharmony_ci	{ACPI_EXD_TYPE, 0, NULL},
24962306a36Sopenharmony_ci	{ACPI_EXD_UINT16, ACPI_EXD_OFFSET(common.reference_count),
25062306a36Sopenharmony_ci	 "Reference Count"},
25162306a36Sopenharmony_ci	{ACPI_EXD_UINT8, ACPI_EXD_OFFSET(common.flags), "Flags"},
25262306a36Sopenharmony_ci	{ACPI_EXD_LIST, ACPI_EXD_OFFSET(common.next_object), "Object List"}
25362306a36Sopenharmony_ci};
25462306a36Sopenharmony_ci
25562306a36Sopenharmony_cistatic struct acpi_exdump_info acpi_ex_dump_field_common[7] = {
25662306a36Sopenharmony_ci	{ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_field_common), NULL},
25762306a36Sopenharmony_ci	{ACPI_EXD_UINT8, ACPI_EXD_OFFSET(common_field.field_flags),
25862306a36Sopenharmony_ci	 "Field Flags"},
25962306a36Sopenharmony_ci	{ACPI_EXD_UINT8, ACPI_EXD_OFFSET(common_field.access_byte_width),
26062306a36Sopenharmony_ci	 "Access Byte Width"},
26162306a36Sopenharmony_ci	{ACPI_EXD_UINT32, ACPI_EXD_OFFSET(common_field.bit_length),
26262306a36Sopenharmony_ci	 "Bit Length"},
26362306a36Sopenharmony_ci	{ACPI_EXD_UINT8, ACPI_EXD_OFFSET(common_field.start_field_bit_offset),
26462306a36Sopenharmony_ci	 "Field Bit Offset"},
26562306a36Sopenharmony_ci	{ACPI_EXD_UINT32, ACPI_EXD_OFFSET(common_field.base_byte_offset),
26662306a36Sopenharmony_ci	 "Base Byte Offset"},
26762306a36Sopenharmony_ci	{ACPI_EXD_NODE, ACPI_EXD_OFFSET(common_field.node), "Parent Node"}
26862306a36Sopenharmony_ci};
26962306a36Sopenharmony_ci
27062306a36Sopenharmony_cistatic struct acpi_exdump_info acpi_ex_dump_node[7] = {
27162306a36Sopenharmony_ci	{ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_node), NULL},
27262306a36Sopenharmony_ci	{ACPI_EXD_UINT16, ACPI_EXD_NSOFFSET(flags), "Flags"},
27362306a36Sopenharmony_ci	{ACPI_EXD_UINT16, ACPI_EXD_NSOFFSET(owner_id), "Owner Id"},
27462306a36Sopenharmony_ci	{ACPI_EXD_LIST, ACPI_EXD_NSOFFSET(object), "Object List"},
27562306a36Sopenharmony_ci	{ACPI_EXD_NODE, ACPI_EXD_NSOFFSET(parent), "Parent"},
27662306a36Sopenharmony_ci	{ACPI_EXD_NODE, ACPI_EXD_NSOFFSET(child), "Child"},
27762306a36Sopenharmony_ci	{ACPI_EXD_NODE, ACPI_EXD_NSOFFSET(peer), "Peer"}
27862306a36Sopenharmony_ci};
27962306a36Sopenharmony_ci
28062306a36Sopenharmony_ci/* Dispatch table, indexed by object type */
28162306a36Sopenharmony_ci
28262306a36Sopenharmony_cistatic struct acpi_exdump_info *acpi_ex_dump_info[] = {
28362306a36Sopenharmony_ci	NULL,
28462306a36Sopenharmony_ci	acpi_ex_dump_integer,
28562306a36Sopenharmony_ci	acpi_ex_dump_string,
28662306a36Sopenharmony_ci	acpi_ex_dump_buffer,
28762306a36Sopenharmony_ci	acpi_ex_dump_package,
28862306a36Sopenharmony_ci	NULL,
28962306a36Sopenharmony_ci	acpi_ex_dump_device,
29062306a36Sopenharmony_ci	acpi_ex_dump_event,
29162306a36Sopenharmony_ci	acpi_ex_dump_method,
29262306a36Sopenharmony_ci	acpi_ex_dump_mutex,
29362306a36Sopenharmony_ci	acpi_ex_dump_region,
29462306a36Sopenharmony_ci	acpi_ex_dump_power,
29562306a36Sopenharmony_ci	acpi_ex_dump_processor,
29662306a36Sopenharmony_ci	acpi_ex_dump_thermal,
29762306a36Sopenharmony_ci	acpi_ex_dump_buffer_field,
29862306a36Sopenharmony_ci	NULL,
29962306a36Sopenharmony_ci	NULL,
30062306a36Sopenharmony_ci	acpi_ex_dump_region_field,
30162306a36Sopenharmony_ci	acpi_ex_dump_bank_field,
30262306a36Sopenharmony_ci	acpi_ex_dump_index_field,
30362306a36Sopenharmony_ci	acpi_ex_dump_reference,
30462306a36Sopenharmony_ci	NULL,
30562306a36Sopenharmony_ci	NULL,
30662306a36Sopenharmony_ci	acpi_ex_dump_notify,
30762306a36Sopenharmony_ci	acpi_ex_dump_address_handler,
30862306a36Sopenharmony_ci	NULL,
30962306a36Sopenharmony_ci	NULL,
31062306a36Sopenharmony_ci	NULL,
31162306a36Sopenharmony_ci	acpi_ex_dump_extra,
31262306a36Sopenharmony_ci	acpi_ex_dump_data
31362306a36Sopenharmony_ci};
31462306a36Sopenharmony_ci
31562306a36Sopenharmony_ci/*******************************************************************************
31662306a36Sopenharmony_ci *
31762306a36Sopenharmony_ci * FUNCTION:    acpi_ex_dump_object
31862306a36Sopenharmony_ci *
31962306a36Sopenharmony_ci * PARAMETERS:  obj_desc            - Descriptor to dump
32062306a36Sopenharmony_ci *              info                - Info table corresponding to this object
32162306a36Sopenharmony_ci *                                    type
32262306a36Sopenharmony_ci *
32362306a36Sopenharmony_ci * RETURN:      None
32462306a36Sopenharmony_ci *
32562306a36Sopenharmony_ci * DESCRIPTION: Walk the info table for this object
32662306a36Sopenharmony_ci *
32762306a36Sopenharmony_ci ******************************************************************************/
32862306a36Sopenharmony_ci
32962306a36Sopenharmony_cistatic void
33062306a36Sopenharmony_ciacpi_ex_dump_object(union acpi_operand_object *obj_desc,
33162306a36Sopenharmony_ci		    struct acpi_exdump_info *info)
33262306a36Sopenharmony_ci{
33362306a36Sopenharmony_ci	u8 *target;
33462306a36Sopenharmony_ci	const char *name;
33562306a36Sopenharmony_ci	u8 count;
33662306a36Sopenharmony_ci	union acpi_operand_object *start;
33762306a36Sopenharmony_ci	union acpi_operand_object *data = NULL;
33862306a36Sopenharmony_ci	union acpi_operand_object *next;
33962306a36Sopenharmony_ci	struct acpi_namespace_node *node;
34062306a36Sopenharmony_ci
34162306a36Sopenharmony_ci	if (!info) {
34262306a36Sopenharmony_ci		acpi_os_printf
34362306a36Sopenharmony_ci		    ("ExDumpObject: Display not implemented for object type %s\n",
34462306a36Sopenharmony_ci		     acpi_ut_get_object_type_name(obj_desc));
34562306a36Sopenharmony_ci		return;
34662306a36Sopenharmony_ci	}
34762306a36Sopenharmony_ci
34862306a36Sopenharmony_ci	/* First table entry must contain the table length (# of table entries) */
34962306a36Sopenharmony_ci
35062306a36Sopenharmony_ci	count = info->offset;
35162306a36Sopenharmony_ci
35262306a36Sopenharmony_ci	while (count) {
35362306a36Sopenharmony_ci		if (!obj_desc) {
35462306a36Sopenharmony_ci			return;
35562306a36Sopenharmony_ci		}
35662306a36Sopenharmony_ci
35762306a36Sopenharmony_ci		target = ACPI_ADD_PTR(u8, obj_desc, info->offset);
35862306a36Sopenharmony_ci		name = info->name;
35962306a36Sopenharmony_ci
36062306a36Sopenharmony_ci		switch (info->opcode) {
36162306a36Sopenharmony_ci		case ACPI_EXD_INIT:
36262306a36Sopenharmony_ci
36362306a36Sopenharmony_ci			break;
36462306a36Sopenharmony_ci
36562306a36Sopenharmony_ci		case ACPI_EXD_TYPE:
36662306a36Sopenharmony_ci
36762306a36Sopenharmony_ci			acpi_os_printf("%20s : %2.2X [%s]\n", "Type",
36862306a36Sopenharmony_ci				       obj_desc->common.type,
36962306a36Sopenharmony_ci				       acpi_ut_get_object_type_name(obj_desc));
37062306a36Sopenharmony_ci			break;
37162306a36Sopenharmony_ci
37262306a36Sopenharmony_ci		case ACPI_EXD_UINT8:
37362306a36Sopenharmony_ci
37462306a36Sopenharmony_ci			acpi_os_printf("%20s : %2.2X\n", name, *target);
37562306a36Sopenharmony_ci			break;
37662306a36Sopenharmony_ci
37762306a36Sopenharmony_ci		case ACPI_EXD_UINT16:
37862306a36Sopenharmony_ci
37962306a36Sopenharmony_ci			acpi_os_printf("%20s : %4.4X\n", name,
38062306a36Sopenharmony_ci				       ACPI_GET16(target));
38162306a36Sopenharmony_ci			break;
38262306a36Sopenharmony_ci
38362306a36Sopenharmony_ci		case ACPI_EXD_UINT32:
38462306a36Sopenharmony_ci
38562306a36Sopenharmony_ci			acpi_os_printf("%20s : %8.8X\n", name,
38662306a36Sopenharmony_ci				       ACPI_GET32(target));
38762306a36Sopenharmony_ci			break;
38862306a36Sopenharmony_ci
38962306a36Sopenharmony_ci		case ACPI_EXD_UINT64:
39062306a36Sopenharmony_ci
39162306a36Sopenharmony_ci			acpi_os_printf("%20s : %8.8X%8.8X\n", "Value",
39262306a36Sopenharmony_ci				       ACPI_FORMAT_UINT64(ACPI_GET64(target)));
39362306a36Sopenharmony_ci			break;
39462306a36Sopenharmony_ci
39562306a36Sopenharmony_ci		case ACPI_EXD_POINTER:
39662306a36Sopenharmony_ci		case ACPI_EXD_ADDRESS:
39762306a36Sopenharmony_ci
39862306a36Sopenharmony_ci			acpi_ex_out_pointer(name,
39962306a36Sopenharmony_ci					    *ACPI_CAST_PTR(void *, target));
40062306a36Sopenharmony_ci			break;
40162306a36Sopenharmony_ci
40262306a36Sopenharmony_ci		case ACPI_EXD_STRING:
40362306a36Sopenharmony_ci
40462306a36Sopenharmony_ci			acpi_ut_print_string(obj_desc->string.pointer,
40562306a36Sopenharmony_ci					     ACPI_UINT8_MAX);
40662306a36Sopenharmony_ci			acpi_os_printf("\n");
40762306a36Sopenharmony_ci			break;
40862306a36Sopenharmony_ci
40962306a36Sopenharmony_ci		case ACPI_EXD_BUFFER:
41062306a36Sopenharmony_ci
41162306a36Sopenharmony_ci			ACPI_DUMP_BUFFER(obj_desc->buffer.pointer,
41262306a36Sopenharmony_ci					 obj_desc->buffer.length);
41362306a36Sopenharmony_ci			break;
41462306a36Sopenharmony_ci
41562306a36Sopenharmony_ci		case ACPI_EXD_PACKAGE:
41662306a36Sopenharmony_ci
41762306a36Sopenharmony_ci			/* Dump the package contents */
41862306a36Sopenharmony_ci
41962306a36Sopenharmony_ci			acpi_os_printf("\nPackage Contents:\n");
42062306a36Sopenharmony_ci			acpi_ex_dump_package_obj(obj_desc, 0, 0);
42162306a36Sopenharmony_ci			break;
42262306a36Sopenharmony_ci
42362306a36Sopenharmony_ci		case ACPI_EXD_FIELD:
42462306a36Sopenharmony_ci
42562306a36Sopenharmony_ci			acpi_ex_dump_object(obj_desc,
42662306a36Sopenharmony_ci					    acpi_ex_dump_field_common);
42762306a36Sopenharmony_ci			break;
42862306a36Sopenharmony_ci
42962306a36Sopenharmony_ci		case ACPI_EXD_REFERENCE:
43062306a36Sopenharmony_ci
43162306a36Sopenharmony_ci			acpi_ex_out_string("Class Name",
43262306a36Sopenharmony_ci					   acpi_ut_get_reference_name
43362306a36Sopenharmony_ci					   (obj_desc));
43462306a36Sopenharmony_ci			acpi_ex_dump_reference_obj(obj_desc);
43562306a36Sopenharmony_ci			break;
43662306a36Sopenharmony_ci
43762306a36Sopenharmony_ci		case ACPI_EXD_LIST:
43862306a36Sopenharmony_ci
43962306a36Sopenharmony_ci			start = *ACPI_CAST_PTR(void *, target);
44062306a36Sopenharmony_ci			next = start;
44162306a36Sopenharmony_ci
44262306a36Sopenharmony_ci			acpi_os_printf("%20s : %p ", name, next);
44362306a36Sopenharmony_ci			if (next) {
44462306a36Sopenharmony_ci				acpi_os_printf("%s (Type %2.2X)",
44562306a36Sopenharmony_ci					       acpi_ut_get_object_type_name
44662306a36Sopenharmony_ci					       (next), next->common.type);
44762306a36Sopenharmony_ci
44862306a36Sopenharmony_ci				while (next->common.next_object) {
44962306a36Sopenharmony_ci					if ((next->common.type ==
45062306a36Sopenharmony_ci					     ACPI_TYPE_LOCAL_DATA) && !data) {
45162306a36Sopenharmony_ci						data = next;
45262306a36Sopenharmony_ci					}
45362306a36Sopenharmony_ci
45462306a36Sopenharmony_ci					next = next->common.next_object;
45562306a36Sopenharmony_ci					acpi_os_printf("->%p(%s %2.2X)", next,
45662306a36Sopenharmony_ci						       acpi_ut_get_object_type_name
45762306a36Sopenharmony_ci						       (next),
45862306a36Sopenharmony_ci						       next->common.type);
45962306a36Sopenharmony_ci
46062306a36Sopenharmony_ci					if ((next == start) || (next == data)) {
46162306a36Sopenharmony_ci						acpi_os_printf
46262306a36Sopenharmony_ci						    ("\n**** Error: Object list appears to be circular linked");
46362306a36Sopenharmony_ci						break;
46462306a36Sopenharmony_ci					}
46562306a36Sopenharmony_ci				}
46662306a36Sopenharmony_ci			} else {
46762306a36Sopenharmony_ci				acpi_os_printf("- No attached objects");
46862306a36Sopenharmony_ci			}
46962306a36Sopenharmony_ci
47062306a36Sopenharmony_ci			acpi_os_printf("\n");
47162306a36Sopenharmony_ci			break;
47262306a36Sopenharmony_ci
47362306a36Sopenharmony_ci		case ACPI_EXD_HDLR_LIST:
47462306a36Sopenharmony_ci
47562306a36Sopenharmony_ci			start = *ACPI_CAST_PTR(void *, target);
47662306a36Sopenharmony_ci			next = start;
47762306a36Sopenharmony_ci
47862306a36Sopenharmony_ci			acpi_os_printf("%20s : %p", name, next);
47962306a36Sopenharmony_ci			if (next) {
48062306a36Sopenharmony_ci				acpi_os_printf("(%s %2.2X)",
48162306a36Sopenharmony_ci					       acpi_ut_get_object_type_name
48262306a36Sopenharmony_ci					       (next),
48362306a36Sopenharmony_ci					       next->address_space.space_id);
48462306a36Sopenharmony_ci
48562306a36Sopenharmony_ci				while (next->address_space.next) {
48662306a36Sopenharmony_ci					if ((next->common.type ==
48762306a36Sopenharmony_ci					     ACPI_TYPE_LOCAL_DATA) && !data) {
48862306a36Sopenharmony_ci						data = next;
48962306a36Sopenharmony_ci					}
49062306a36Sopenharmony_ci
49162306a36Sopenharmony_ci					next = next->address_space.next;
49262306a36Sopenharmony_ci					acpi_os_printf("->%p(%s %2.2X)", next,
49362306a36Sopenharmony_ci						       acpi_ut_get_object_type_name
49462306a36Sopenharmony_ci						       (next),
49562306a36Sopenharmony_ci						       next->address_space.
49662306a36Sopenharmony_ci						       space_id);
49762306a36Sopenharmony_ci
49862306a36Sopenharmony_ci					if ((next == start) || (next == data)) {
49962306a36Sopenharmony_ci						acpi_os_printf
50062306a36Sopenharmony_ci						    ("\n**** Error: Handler list appears to be circular linked");
50162306a36Sopenharmony_ci						break;
50262306a36Sopenharmony_ci					}
50362306a36Sopenharmony_ci				}
50462306a36Sopenharmony_ci			}
50562306a36Sopenharmony_ci
50662306a36Sopenharmony_ci			acpi_os_printf("\n");
50762306a36Sopenharmony_ci			break;
50862306a36Sopenharmony_ci
50962306a36Sopenharmony_ci		case ACPI_EXD_RGN_LIST:
51062306a36Sopenharmony_ci
51162306a36Sopenharmony_ci			start = *ACPI_CAST_PTR(void *, target);
51262306a36Sopenharmony_ci			next = start;
51362306a36Sopenharmony_ci
51462306a36Sopenharmony_ci			acpi_os_printf("%20s : %p", name, next);
51562306a36Sopenharmony_ci			if (next) {
51662306a36Sopenharmony_ci				acpi_os_printf("(%s %2.2X)",
51762306a36Sopenharmony_ci					       acpi_ut_get_object_type_name
51862306a36Sopenharmony_ci					       (next), next->common.type);
51962306a36Sopenharmony_ci
52062306a36Sopenharmony_ci				while (next->region.next) {
52162306a36Sopenharmony_ci					if ((next->common.type ==
52262306a36Sopenharmony_ci					     ACPI_TYPE_LOCAL_DATA) && !data) {
52362306a36Sopenharmony_ci						data = next;
52462306a36Sopenharmony_ci					}
52562306a36Sopenharmony_ci
52662306a36Sopenharmony_ci					next = next->region.next;
52762306a36Sopenharmony_ci					acpi_os_printf("->%p(%s %2.2X)", next,
52862306a36Sopenharmony_ci						       acpi_ut_get_object_type_name
52962306a36Sopenharmony_ci						       (next),
53062306a36Sopenharmony_ci						       next->common.type);
53162306a36Sopenharmony_ci
53262306a36Sopenharmony_ci					if ((next == start) || (next == data)) {
53362306a36Sopenharmony_ci						acpi_os_printf
53462306a36Sopenharmony_ci						    ("\n**** Error: Region list appears to be circular linked");
53562306a36Sopenharmony_ci						break;
53662306a36Sopenharmony_ci					}
53762306a36Sopenharmony_ci				}
53862306a36Sopenharmony_ci			}
53962306a36Sopenharmony_ci
54062306a36Sopenharmony_ci			acpi_os_printf("\n");
54162306a36Sopenharmony_ci			break;
54262306a36Sopenharmony_ci
54362306a36Sopenharmony_ci		case ACPI_EXD_NODE:
54462306a36Sopenharmony_ci
54562306a36Sopenharmony_ci			node =
54662306a36Sopenharmony_ci			    *ACPI_CAST_PTR(struct acpi_namespace_node *,
54762306a36Sopenharmony_ci					   target);
54862306a36Sopenharmony_ci
54962306a36Sopenharmony_ci			acpi_os_printf("%20s : %p", name, node);
55062306a36Sopenharmony_ci			if (node) {
55162306a36Sopenharmony_ci				acpi_os_printf(" [%4.4s]", node->name.ascii);
55262306a36Sopenharmony_ci			}
55362306a36Sopenharmony_ci			acpi_os_printf("\n");
55462306a36Sopenharmony_ci			break;
55562306a36Sopenharmony_ci
55662306a36Sopenharmony_ci		default:
55762306a36Sopenharmony_ci
55862306a36Sopenharmony_ci			acpi_os_printf("**** Invalid table opcode [%X] ****\n",
55962306a36Sopenharmony_ci				       info->opcode);
56062306a36Sopenharmony_ci			return;
56162306a36Sopenharmony_ci		}
56262306a36Sopenharmony_ci
56362306a36Sopenharmony_ci		info++;
56462306a36Sopenharmony_ci		count--;
56562306a36Sopenharmony_ci	}
56662306a36Sopenharmony_ci}
56762306a36Sopenharmony_ci
56862306a36Sopenharmony_ci/*******************************************************************************
56962306a36Sopenharmony_ci *
57062306a36Sopenharmony_ci * FUNCTION:    acpi_ex_dump_operand
57162306a36Sopenharmony_ci *
57262306a36Sopenharmony_ci * PARAMETERS:  *obj_desc       - Pointer to entry to be dumped
57362306a36Sopenharmony_ci *              depth           - Current nesting depth
57462306a36Sopenharmony_ci *
57562306a36Sopenharmony_ci * RETURN:      None
57662306a36Sopenharmony_ci *
57762306a36Sopenharmony_ci * DESCRIPTION: Dump an operand object
57862306a36Sopenharmony_ci *
57962306a36Sopenharmony_ci ******************************************************************************/
58062306a36Sopenharmony_ci
58162306a36Sopenharmony_civoid acpi_ex_dump_operand(union acpi_operand_object *obj_desc, u32 depth)
58262306a36Sopenharmony_ci{
58362306a36Sopenharmony_ci	u32 length;
58462306a36Sopenharmony_ci	u32 index;
58562306a36Sopenharmony_ci
58662306a36Sopenharmony_ci	ACPI_FUNCTION_NAME(ex_dump_operand);
58762306a36Sopenharmony_ci
58862306a36Sopenharmony_ci	/* Check if debug output enabled */
58962306a36Sopenharmony_ci
59062306a36Sopenharmony_ci	if (!ACPI_IS_DEBUG_ENABLED(ACPI_LV_EXEC, _COMPONENT)) {
59162306a36Sopenharmony_ci		return;
59262306a36Sopenharmony_ci	}
59362306a36Sopenharmony_ci
59462306a36Sopenharmony_ci	if (!obj_desc) {
59562306a36Sopenharmony_ci
59662306a36Sopenharmony_ci		/* This could be a null element of a package */
59762306a36Sopenharmony_ci
59862306a36Sopenharmony_ci		ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Null Object Descriptor\n"));
59962306a36Sopenharmony_ci		return;
60062306a36Sopenharmony_ci	}
60162306a36Sopenharmony_ci
60262306a36Sopenharmony_ci	if (ACPI_GET_DESCRIPTOR_TYPE(obj_desc) == ACPI_DESC_TYPE_NAMED) {
60362306a36Sopenharmony_ci		ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "%p Namespace Node: ",
60462306a36Sopenharmony_ci				  obj_desc));
60562306a36Sopenharmony_ci		ACPI_DUMP_ENTRY(obj_desc, ACPI_LV_EXEC);
60662306a36Sopenharmony_ci		return;
60762306a36Sopenharmony_ci	}
60862306a36Sopenharmony_ci
60962306a36Sopenharmony_ci	if (ACPI_GET_DESCRIPTOR_TYPE(obj_desc) != ACPI_DESC_TYPE_OPERAND) {
61062306a36Sopenharmony_ci		ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
61162306a36Sopenharmony_ci				  "%p is not a node or operand object: [%s]\n",
61262306a36Sopenharmony_ci				  obj_desc,
61362306a36Sopenharmony_ci				  acpi_ut_get_descriptor_name(obj_desc)));
61462306a36Sopenharmony_ci		ACPI_DUMP_BUFFER(obj_desc, sizeof(union acpi_operand_object));
61562306a36Sopenharmony_ci		return;
61662306a36Sopenharmony_ci	}
61762306a36Sopenharmony_ci
61862306a36Sopenharmony_ci	/* obj_desc is a valid object */
61962306a36Sopenharmony_ci
62062306a36Sopenharmony_ci	if (depth > 0) {
62162306a36Sopenharmony_ci		ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "%*s[%u] %p Refs=%u ",
62262306a36Sopenharmony_ci				  depth, " ", depth, obj_desc,
62362306a36Sopenharmony_ci				  obj_desc->common.reference_count));
62462306a36Sopenharmony_ci	} else {
62562306a36Sopenharmony_ci		ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "%p Refs=%u ",
62662306a36Sopenharmony_ci				  obj_desc, obj_desc->common.reference_count));
62762306a36Sopenharmony_ci	}
62862306a36Sopenharmony_ci
62962306a36Sopenharmony_ci	/* Decode object type */
63062306a36Sopenharmony_ci
63162306a36Sopenharmony_ci	switch (obj_desc->common.type) {
63262306a36Sopenharmony_ci	case ACPI_TYPE_LOCAL_REFERENCE:
63362306a36Sopenharmony_ci
63462306a36Sopenharmony_ci		acpi_os_printf("Reference: [%s] ",
63562306a36Sopenharmony_ci			       acpi_ut_get_reference_name(obj_desc));
63662306a36Sopenharmony_ci
63762306a36Sopenharmony_ci		switch (obj_desc->reference.class) {
63862306a36Sopenharmony_ci		case ACPI_REFCLASS_DEBUG:
63962306a36Sopenharmony_ci
64062306a36Sopenharmony_ci			acpi_os_printf("\n");
64162306a36Sopenharmony_ci			break;
64262306a36Sopenharmony_ci
64362306a36Sopenharmony_ci		case ACPI_REFCLASS_INDEX:
64462306a36Sopenharmony_ci
64562306a36Sopenharmony_ci			acpi_os_printf("%p\n", obj_desc->reference.object);
64662306a36Sopenharmony_ci			break;
64762306a36Sopenharmony_ci
64862306a36Sopenharmony_ci		case ACPI_REFCLASS_TABLE:
64962306a36Sopenharmony_ci
65062306a36Sopenharmony_ci			acpi_os_printf("Table Index %X\n",
65162306a36Sopenharmony_ci				       obj_desc->reference.value);
65262306a36Sopenharmony_ci			break;
65362306a36Sopenharmony_ci
65462306a36Sopenharmony_ci		case ACPI_REFCLASS_REFOF:
65562306a36Sopenharmony_ci
65662306a36Sopenharmony_ci			acpi_os_printf("%p [%s]\n", obj_desc->reference.object,
65762306a36Sopenharmony_ci				       acpi_ut_get_type_name(((union
65862306a36Sopenharmony_ci							       acpi_operand_object
65962306a36Sopenharmony_ci							       *)
66062306a36Sopenharmony_ci							      obj_desc->
66162306a36Sopenharmony_ci							      reference.
66262306a36Sopenharmony_ci							      object)->common.
66362306a36Sopenharmony_ci							     type));
66462306a36Sopenharmony_ci			break;
66562306a36Sopenharmony_ci
66662306a36Sopenharmony_ci		case ACPI_REFCLASS_NAME:
66762306a36Sopenharmony_ci
66862306a36Sopenharmony_ci			acpi_ut_repair_name(obj_desc->reference.node->name.
66962306a36Sopenharmony_ci					    ascii);
67062306a36Sopenharmony_ci			acpi_os_printf("- [%4.4s] (Node %p)\n",
67162306a36Sopenharmony_ci				       obj_desc->reference.node->name.ascii,
67262306a36Sopenharmony_ci				       obj_desc->reference.node);
67362306a36Sopenharmony_ci			break;
67462306a36Sopenharmony_ci
67562306a36Sopenharmony_ci		case ACPI_REFCLASS_ARG:
67662306a36Sopenharmony_ci		case ACPI_REFCLASS_LOCAL:
67762306a36Sopenharmony_ci
67862306a36Sopenharmony_ci			acpi_os_printf("%X\n", obj_desc->reference.value);
67962306a36Sopenharmony_ci			break;
68062306a36Sopenharmony_ci
68162306a36Sopenharmony_ci		default:	/* Unknown reference class */
68262306a36Sopenharmony_ci
68362306a36Sopenharmony_ci			acpi_os_printf("%2.2X\n", obj_desc->reference.class);
68462306a36Sopenharmony_ci			break;
68562306a36Sopenharmony_ci		}
68662306a36Sopenharmony_ci		break;
68762306a36Sopenharmony_ci
68862306a36Sopenharmony_ci	case ACPI_TYPE_BUFFER:
68962306a36Sopenharmony_ci
69062306a36Sopenharmony_ci		acpi_os_printf("Buffer length %.2X @ %p\n",
69162306a36Sopenharmony_ci			       obj_desc->buffer.length,
69262306a36Sopenharmony_ci			       obj_desc->buffer.pointer);
69362306a36Sopenharmony_ci
69462306a36Sopenharmony_ci		/* Debug only -- dump the buffer contents */
69562306a36Sopenharmony_ci
69662306a36Sopenharmony_ci		if (obj_desc->buffer.pointer) {
69762306a36Sopenharmony_ci			length = obj_desc->buffer.length;
69862306a36Sopenharmony_ci			if (length > 128) {
69962306a36Sopenharmony_ci				length = 128;
70062306a36Sopenharmony_ci			}
70162306a36Sopenharmony_ci
70262306a36Sopenharmony_ci			acpi_os_printf
70362306a36Sopenharmony_ci			    ("Buffer Contents: (displaying length 0x%.2X)\n",
70462306a36Sopenharmony_ci			     length);
70562306a36Sopenharmony_ci			ACPI_DUMP_BUFFER(obj_desc->buffer.pointer, length);
70662306a36Sopenharmony_ci		}
70762306a36Sopenharmony_ci		break;
70862306a36Sopenharmony_ci
70962306a36Sopenharmony_ci	case ACPI_TYPE_INTEGER:
71062306a36Sopenharmony_ci
71162306a36Sopenharmony_ci		acpi_os_printf("Integer %8.8X%8.8X\n",
71262306a36Sopenharmony_ci			       ACPI_FORMAT_UINT64(obj_desc->integer.value));
71362306a36Sopenharmony_ci		break;
71462306a36Sopenharmony_ci
71562306a36Sopenharmony_ci	case ACPI_TYPE_PACKAGE:
71662306a36Sopenharmony_ci
71762306a36Sopenharmony_ci		acpi_os_printf("Package [Len %X] ElementArray %p\n",
71862306a36Sopenharmony_ci			       obj_desc->package.count,
71962306a36Sopenharmony_ci			       obj_desc->package.elements);
72062306a36Sopenharmony_ci
72162306a36Sopenharmony_ci		/*
72262306a36Sopenharmony_ci		 * If elements exist, package element pointer is valid,
72362306a36Sopenharmony_ci		 * and debug_level exceeds 1, dump package's elements.
72462306a36Sopenharmony_ci		 */
72562306a36Sopenharmony_ci		if (obj_desc->package.count &&
72662306a36Sopenharmony_ci		    obj_desc->package.elements && acpi_dbg_level > 1) {
72762306a36Sopenharmony_ci			for (index = 0; index < obj_desc->package.count;
72862306a36Sopenharmony_ci			     index++) {
72962306a36Sopenharmony_ci				acpi_ex_dump_operand(obj_desc->package.
73062306a36Sopenharmony_ci						     elements[index],
73162306a36Sopenharmony_ci						     depth + 1);
73262306a36Sopenharmony_ci			}
73362306a36Sopenharmony_ci		}
73462306a36Sopenharmony_ci		break;
73562306a36Sopenharmony_ci
73662306a36Sopenharmony_ci	case ACPI_TYPE_REGION:
73762306a36Sopenharmony_ci
73862306a36Sopenharmony_ci		acpi_os_printf("Region %s (%X)",
73962306a36Sopenharmony_ci			       acpi_ut_get_region_name(obj_desc->region.
74062306a36Sopenharmony_ci						       space_id),
74162306a36Sopenharmony_ci			       obj_desc->region.space_id);
74262306a36Sopenharmony_ci
74362306a36Sopenharmony_ci		/*
74462306a36Sopenharmony_ci		 * If the address and length have not been evaluated,
74562306a36Sopenharmony_ci		 * don't print them.
74662306a36Sopenharmony_ci		 */
74762306a36Sopenharmony_ci		if (!(obj_desc->region.flags & AOPOBJ_DATA_VALID)) {
74862306a36Sopenharmony_ci			acpi_os_printf("\n");
74962306a36Sopenharmony_ci		} else {
75062306a36Sopenharmony_ci			acpi_os_printf(" base %8.8X%8.8X Length %X\n",
75162306a36Sopenharmony_ci				       ACPI_FORMAT_UINT64(obj_desc->region.
75262306a36Sopenharmony_ci							  address),
75362306a36Sopenharmony_ci				       obj_desc->region.length);
75462306a36Sopenharmony_ci		}
75562306a36Sopenharmony_ci		break;
75662306a36Sopenharmony_ci
75762306a36Sopenharmony_ci	case ACPI_TYPE_STRING:
75862306a36Sopenharmony_ci
75962306a36Sopenharmony_ci		acpi_os_printf("String length %X @ %p ",
76062306a36Sopenharmony_ci			       obj_desc->string.length,
76162306a36Sopenharmony_ci			       obj_desc->string.pointer);
76262306a36Sopenharmony_ci
76362306a36Sopenharmony_ci		acpi_ut_print_string(obj_desc->string.pointer, ACPI_UINT8_MAX);
76462306a36Sopenharmony_ci		acpi_os_printf("\n");
76562306a36Sopenharmony_ci		break;
76662306a36Sopenharmony_ci
76762306a36Sopenharmony_ci	case ACPI_TYPE_LOCAL_BANK_FIELD:
76862306a36Sopenharmony_ci
76962306a36Sopenharmony_ci		acpi_os_printf("BankField\n");
77062306a36Sopenharmony_ci		break;
77162306a36Sopenharmony_ci
77262306a36Sopenharmony_ci	case ACPI_TYPE_LOCAL_REGION_FIELD:
77362306a36Sopenharmony_ci
77462306a36Sopenharmony_ci		acpi_os_printf
77562306a36Sopenharmony_ci		    ("RegionField: Bits=%X AccWidth=%X Lock=%X Update=%X at "
77662306a36Sopenharmony_ci		     "byte=%X bit=%X of below:\n", obj_desc->field.bit_length,
77762306a36Sopenharmony_ci		     obj_desc->field.access_byte_width,
77862306a36Sopenharmony_ci		     obj_desc->field.field_flags & AML_FIELD_LOCK_RULE_MASK,
77962306a36Sopenharmony_ci		     obj_desc->field.field_flags & AML_FIELD_UPDATE_RULE_MASK,
78062306a36Sopenharmony_ci		     obj_desc->field.base_byte_offset,
78162306a36Sopenharmony_ci		     obj_desc->field.start_field_bit_offset);
78262306a36Sopenharmony_ci
78362306a36Sopenharmony_ci		acpi_ex_dump_operand(obj_desc->field.region_obj, depth + 1);
78462306a36Sopenharmony_ci		break;
78562306a36Sopenharmony_ci
78662306a36Sopenharmony_ci	case ACPI_TYPE_LOCAL_INDEX_FIELD:
78762306a36Sopenharmony_ci
78862306a36Sopenharmony_ci		acpi_os_printf("IndexField\n");
78962306a36Sopenharmony_ci		break;
79062306a36Sopenharmony_ci
79162306a36Sopenharmony_ci	case ACPI_TYPE_BUFFER_FIELD:
79262306a36Sopenharmony_ci
79362306a36Sopenharmony_ci		acpi_os_printf("BufferField: %X bits at byte %X bit %X of\n",
79462306a36Sopenharmony_ci			       obj_desc->buffer_field.bit_length,
79562306a36Sopenharmony_ci			       obj_desc->buffer_field.base_byte_offset,
79662306a36Sopenharmony_ci			       obj_desc->buffer_field.start_field_bit_offset);
79762306a36Sopenharmony_ci
79862306a36Sopenharmony_ci		if (!obj_desc->buffer_field.buffer_obj) {
79962306a36Sopenharmony_ci			ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "*NULL*\n"));
80062306a36Sopenharmony_ci		} else if ((obj_desc->buffer_field.buffer_obj)->common.type !=
80162306a36Sopenharmony_ci			   ACPI_TYPE_BUFFER) {
80262306a36Sopenharmony_ci			acpi_os_printf("*not a Buffer*\n");
80362306a36Sopenharmony_ci		} else {
80462306a36Sopenharmony_ci			acpi_ex_dump_operand(obj_desc->buffer_field.buffer_obj,
80562306a36Sopenharmony_ci					     depth + 1);
80662306a36Sopenharmony_ci		}
80762306a36Sopenharmony_ci		break;
80862306a36Sopenharmony_ci
80962306a36Sopenharmony_ci	case ACPI_TYPE_EVENT:
81062306a36Sopenharmony_ci
81162306a36Sopenharmony_ci		acpi_os_printf("Event\n");
81262306a36Sopenharmony_ci		break;
81362306a36Sopenharmony_ci
81462306a36Sopenharmony_ci	case ACPI_TYPE_METHOD:
81562306a36Sopenharmony_ci
81662306a36Sopenharmony_ci		acpi_os_printf("Method(%X) @ %p:%X\n",
81762306a36Sopenharmony_ci			       obj_desc->method.param_count,
81862306a36Sopenharmony_ci			       obj_desc->method.aml_start,
81962306a36Sopenharmony_ci			       obj_desc->method.aml_length);
82062306a36Sopenharmony_ci		break;
82162306a36Sopenharmony_ci
82262306a36Sopenharmony_ci	case ACPI_TYPE_MUTEX:
82362306a36Sopenharmony_ci
82462306a36Sopenharmony_ci		acpi_os_printf("Mutex\n");
82562306a36Sopenharmony_ci		break;
82662306a36Sopenharmony_ci
82762306a36Sopenharmony_ci	case ACPI_TYPE_DEVICE:
82862306a36Sopenharmony_ci
82962306a36Sopenharmony_ci		acpi_os_printf("Device\n");
83062306a36Sopenharmony_ci		break;
83162306a36Sopenharmony_ci
83262306a36Sopenharmony_ci	case ACPI_TYPE_POWER:
83362306a36Sopenharmony_ci
83462306a36Sopenharmony_ci		acpi_os_printf("Power\n");
83562306a36Sopenharmony_ci		break;
83662306a36Sopenharmony_ci
83762306a36Sopenharmony_ci	case ACPI_TYPE_PROCESSOR:
83862306a36Sopenharmony_ci
83962306a36Sopenharmony_ci		acpi_os_printf("Processor\n");
84062306a36Sopenharmony_ci		break;
84162306a36Sopenharmony_ci
84262306a36Sopenharmony_ci	case ACPI_TYPE_THERMAL:
84362306a36Sopenharmony_ci
84462306a36Sopenharmony_ci		acpi_os_printf("Thermal\n");
84562306a36Sopenharmony_ci		break;
84662306a36Sopenharmony_ci
84762306a36Sopenharmony_ci	default:
84862306a36Sopenharmony_ci
84962306a36Sopenharmony_ci		/* Unknown Type */
85062306a36Sopenharmony_ci
85162306a36Sopenharmony_ci		acpi_os_printf("Unknown Type %X\n", obj_desc->common.type);
85262306a36Sopenharmony_ci		break;
85362306a36Sopenharmony_ci	}
85462306a36Sopenharmony_ci
85562306a36Sopenharmony_ci	return;
85662306a36Sopenharmony_ci}
85762306a36Sopenharmony_ci
85862306a36Sopenharmony_ci/*******************************************************************************
85962306a36Sopenharmony_ci *
86062306a36Sopenharmony_ci * FUNCTION:    acpi_ex_dump_operands
86162306a36Sopenharmony_ci *
86262306a36Sopenharmony_ci * PARAMETERS:  operands            - A list of Operand objects
86362306a36Sopenharmony_ci *		opcode_name	    - AML opcode name
86462306a36Sopenharmony_ci *		num_operands	    - Operand count for this opcode
86562306a36Sopenharmony_ci *
86662306a36Sopenharmony_ci * DESCRIPTION: Dump the operands associated with the opcode
86762306a36Sopenharmony_ci *
86862306a36Sopenharmony_ci ******************************************************************************/
86962306a36Sopenharmony_ci
87062306a36Sopenharmony_civoid
87162306a36Sopenharmony_ciacpi_ex_dump_operands(union acpi_operand_object **operands,
87262306a36Sopenharmony_ci		      const char *opcode_name, u32 num_operands)
87362306a36Sopenharmony_ci{
87462306a36Sopenharmony_ci	ACPI_FUNCTION_TRACE(ex_dump_operands);
87562306a36Sopenharmony_ci
87662306a36Sopenharmony_ci	if (!opcode_name) {
87762306a36Sopenharmony_ci		opcode_name = "UNKNOWN";
87862306a36Sopenharmony_ci	}
87962306a36Sopenharmony_ci
88062306a36Sopenharmony_ci	ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
88162306a36Sopenharmony_ci			  "**** Start operand dump for opcode [%s], %u operands\n",
88262306a36Sopenharmony_ci			  opcode_name, num_operands));
88362306a36Sopenharmony_ci
88462306a36Sopenharmony_ci	if (num_operands == 0) {
88562306a36Sopenharmony_ci		num_operands = 1;
88662306a36Sopenharmony_ci	}
88762306a36Sopenharmony_ci
88862306a36Sopenharmony_ci	/* Dump the individual operands */
88962306a36Sopenharmony_ci
89062306a36Sopenharmony_ci	while (num_operands) {
89162306a36Sopenharmony_ci		acpi_ex_dump_operand(*operands, 0);
89262306a36Sopenharmony_ci		operands++;
89362306a36Sopenharmony_ci		num_operands--;
89462306a36Sopenharmony_ci	}
89562306a36Sopenharmony_ci
89662306a36Sopenharmony_ci	ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
89762306a36Sopenharmony_ci			  "**** End operand dump for [%s]\n", opcode_name));
89862306a36Sopenharmony_ci	return_VOID;
89962306a36Sopenharmony_ci}
90062306a36Sopenharmony_ci
90162306a36Sopenharmony_ci/*******************************************************************************
90262306a36Sopenharmony_ci *
90362306a36Sopenharmony_ci * FUNCTION:    acpi_ex_out* functions
90462306a36Sopenharmony_ci *
90562306a36Sopenharmony_ci * PARAMETERS:  title               - Descriptive text
90662306a36Sopenharmony_ci *              value               - Value to be displayed
90762306a36Sopenharmony_ci *
90862306a36Sopenharmony_ci * DESCRIPTION: Object dump output formatting functions. These functions
90962306a36Sopenharmony_ci *              reduce the number of format strings required and keeps them
91062306a36Sopenharmony_ci *              all in one place for easy modification.
91162306a36Sopenharmony_ci *
91262306a36Sopenharmony_ci ******************************************************************************/
91362306a36Sopenharmony_ci
91462306a36Sopenharmony_cistatic void acpi_ex_out_string(const char *title, const char *value)
91562306a36Sopenharmony_ci{
91662306a36Sopenharmony_ci	acpi_os_printf("%20s : %s\n", title, value);
91762306a36Sopenharmony_ci}
91862306a36Sopenharmony_ci
91962306a36Sopenharmony_cistatic void acpi_ex_out_pointer(const char *title, const void *value)
92062306a36Sopenharmony_ci{
92162306a36Sopenharmony_ci	acpi_os_printf("%20s : %p\n", title, value);
92262306a36Sopenharmony_ci}
92362306a36Sopenharmony_ci
92462306a36Sopenharmony_ci/*******************************************************************************
92562306a36Sopenharmony_ci *
92662306a36Sopenharmony_ci * FUNCTION:    acpi_ex_dump_namespace_node
92762306a36Sopenharmony_ci *
92862306a36Sopenharmony_ci * PARAMETERS:  node                - Descriptor to dump
92962306a36Sopenharmony_ci *              flags               - Force display if TRUE
93062306a36Sopenharmony_ci *
93162306a36Sopenharmony_ci * DESCRIPTION: Dumps the members of the given.Node
93262306a36Sopenharmony_ci *
93362306a36Sopenharmony_ci ******************************************************************************/
93462306a36Sopenharmony_ci
93562306a36Sopenharmony_civoid acpi_ex_dump_namespace_node(struct acpi_namespace_node *node, u32 flags)
93662306a36Sopenharmony_ci{
93762306a36Sopenharmony_ci
93862306a36Sopenharmony_ci	ACPI_FUNCTION_ENTRY();
93962306a36Sopenharmony_ci
94062306a36Sopenharmony_ci	if (!flags) {
94162306a36Sopenharmony_ci
94262306a36Sopenharmony_ci		/* Check if debug output enabled */
94362306a36Sopenharmony_ci
94462306a36Sopenharmony_ci		if (!ACPI_IS_DEBUG_ENABLED(ACPI_LV_OBJECTS, _COMPONENT)) {
94562306a36Sopenharmony_ci			return;
94662306a36Sopenharmony_ci		}
94762306a36Sopenharmony_ci	}
94862306a36Sopenharmony_ci
94962306a36Sopenharmony_ci	acpi_os_printf("%20s : %4.4s\n", "Name", acpi_ut_get_node_name(node));
95062306a36Sopenharmony_ci	acpi_os_printf("%20s : %2.2X [%s]\n", "Type",
95162306a36Sopenharmony_ci		       node->type, acpi_ut_get_type_name(node->type));
95262306a36Sopenharmony_ci
95362306a36Sopenharmony_ci	acpi_ex_dump_object(ACPI_CAST_PTR(union acpi_operand_object, node),
95462306a36Sopenharmony_ci			    acpi_ex_dump_node);
95562306a36Sopenharmony_ci}
95662306a36Sopenharmony_ci
95762306a36Sopenharmony_ci/*******************************************************************************
95862306a36Sopenharmony_ci *
95962306a36Sopenharmony_ci * FUNCTION:    acpi_ex_dump_reference_obj
96062306a36Sopenharmony_ci *
96162306a36Sopenharmony_ci * PARAMETERS:  object              - Descriptor to dump
96262306a36Sopenharmony_ci *
96362306a36Sopenharmony_ci * DESCRIPTION: Dumps a reference object
96462306a36Sopenharmony_ci *
96562306a36Sopenharmony_ci ******************************************************************************/
96662306a36Sopenharmony_ci
96762306a36Sopenharmony_cistatic void acpi_ex_dump_reference_obj(union acpi_operand_object *obj_desc)
96862306a36Sopenharmony_ci{
96962306a36Sopenharmony_ci	struct acpi_buffer ret_buf;
97062306a36Sopenharmony_ci	acpi_status status;
97162306a36Sopenharmony_ci
97262306a36Sopenharmony_ci	ret_buf.length = ACPI_ALLOCATE_LOCAL_BUFFER;
97362306a36Sopenharmony_ci
97462306a36Sopenharmony_ci	if (obj_desc->reference.class == ACPI_REFCLASS_NAME) {
97562306a36Sopenharmony_ci		acpi_os_printf(" %p ", obj_desc->reference.node);
97662306a36Sopenharmony_ci
97762306a36Sopenharmony_ci		status = acpi_ns_handle_to_pathname(obj_desc->reference.node,
97862306a36Sopenharmony_ci						    &ret_buf, TRUE);
97962306a36Sopenharmony_ci		if (ACPI_FAILURE(status)) {
98062306a36Sopenharmony_ci			acpi_os_printf
98162306a36Sopenharmony_ci			    (" Could not convert name to pathname: %s\n",
98262306a36Sopenharmony_ci			     acpi_format_exception(status));
98362306a36Sopenharmony_ci		} else {
98462306a36Sopenharmony_ci			acpi_os_printf("%s: %s\n",
98562306a36Sopenharmony_ci				       acpi_ut_get_type_name(obj_desc->
98662306a36Sopenharmony_ci							     reference.node->
98762306a36Sopenharmony_ci							     type),
98862306a36Sopenharmony_ci				       (char *)ret_buf.pointer);
98962306a36Sopenharmony_ci			ACPI_FREE(ret_buf.pointer);
99062306a36Sopenharmony_ci		}
99162306a36Sopenharmony_ci	} else if (obj_desc->reference.object) {
99262306a36Sopenharmony_ci		if (ACPI_GET_DESCRIPTOR_TYPE(obj_desc) ==
99362306a36Sopenharmony_ci		    ACPI_DESC_TYPE_OPERAND) {
99462306a36Sopenharmony_ci			acpi_os_printf("%22s %p", "Target :",
99562306a36Sopenharmony_ci				       obj_desc->reference.object);
99662306a36Sopenharmony_ci			if (obj_desc->reference.class == ACPI_REFCLASS_TABLE) {
99762306a36Sopenharmony_ci				acpi_os_printf(" Table Index: %X\n",
99862306a36Sopenharmony_ci					       obj_desc->reference.value);
99962306a36Sopenharmony_ci			} else {
100062306a36Sopenharmony_ci				acpi_os_printf(" [%s]\n",
100162306a36Sopenharmony_ci					       acpi_ut_get_type_name(((union
100262306a36Sopenharmony_ci								       acpi_operand_object
100362306a36Sopenharmony_ci								       *)
100462306a36Sopenharmony_ci								      obj_desc->
100562306a36Sopenharmony_ci								      reference.
100662306a36Sopenharmony_ci								      object)->
100762306a36Sopenharmony_ci								     common.
100862306a36Sopenharmony_ci								     type));
100962306a36Sopenharmony_ci			}
101062306a36Sopenharmony_ci		} else {
101162306a36Sopenharmony_ci			acpi_os_printf(" Target: %p\n",
101262306a36Sopenharmony_ci				       obj_desc->reference.object);
101362306a36Sopenharmony_ci		}
101462306a36Sopenharmony_ci	}
101562306a36Sopenharmony_ci}
101662306a36Sopenharmony_ci
101762306a36Sopenharmony_ci/*******************************************************************************
101862306a36Sopenharmony_ci *
101962306a36Sopenharmony_ci * FUNCTION:    acpi_ex_dump_package_obj
102062306a36Sopenharmony_ci *
102162306a36Sopenharmony_ci * PARAMETERS:  obj_desc            - Descriptor to dump
102262306a36Sopenharmony_ci *              level               - Indentation Level
102362306a36Sopenharmony_ci *              index               - Package index for this object
102462306a36Sopenharmony_ci *
102562306a36Sopenharmony_ci * DESCRIPTION: Dumps the elements of the package
102662306a36Sopenharmony_ci *
102762306a36Sopenharmony_ci ******************************************************************************/
102862306a36Sopenharmony_ci
102962306a36Sopenharmony_cistatic void
103062306a36Sopenharmony_ciacpi_ex_dump_package_obj(union acpi_operand_object *obj_desc,
103162306a36Sopenharmony_ci			 u32 level, u32 index)
103262306a36Sopenharmony_ci{
103362306a36Sopenharmony_ci	u32 i;
103462306a36Sopenharmony_ci
103562306a36Sopenharmony_ci	/* Indentation and index output */
103662306a36Sopenharmony_ci
103762306a36Sopenharmony_ci	if (level > 0) {
103862306a36Sopenharmony_ci		for (i = 0; i < level; i++) {
103962306a36Sopenharmony_ci			acpi_os_printf(" ");
104062306a36Sopenharmony_ci		}
104162306a36Sopenharmony_ci
104262306a36Sopenharmony_ci		acpi_os_printf("[%.2d] ", index);
104362306a36Sopenharmony_ci	}
104462306a36Sopenharmony_ci
104562306a36Sopenharmony_ci	acpi_os_printf("%p ", obj_desc);
104662306a36Sopenharmony_ci
104762306a36Sopenharmony_ci	/* Null package elements are allowed */
104862306a36Sopenharmony_ci
104962306a36Sopenharmony_ci	if (!obj_desc) {
105062306a36Sopenharmony_ci		acpi_os_printf("[Null Object]\n");
105162306a36Sopenharmony_ci		return;
105262306a36Sopenharmony_ci	}
105362306a36Sopenharmony_ci
105462306a36Sopenharmony_ci	/* Packages may only contain a few object types */
105562306a36Sopenharmony_ci
105662306a36Sopenharmony_ci	switch (obj_desc->common.type) {
105762306a36Sopenharmony_ci	case ACPI_TYPE_INTEGER:
105862306a36Sopenharmony_ci
105962306a36Sopenharmony_ci		acpi_os_printf("[Integer] = %8.8X%8.8X\n",
106062306a36Sopenharmony_ci			       ACPI_FORMAT_UINT64(obj_desc->integer.value));
106162306a36Sopenharmony_ci		break;
106262306a36Sopenharmony_ci
106362306a36Sopenharmony_ci	case ACPI_TYPE_STRING:
106462306a36Sopenharmony_ci
106562306a36Sopenharmony_ci		acpi_os_printf("[String] Value: ");
106662306a36Sopenharmony_ci		acpi_ut_print_string(obj_desc->string.pointer, ACPI_UINT8_MAX);
106762306a36Sopenharmony_ci		acpi_os_printf("\n");
106862306a36Sopenharmony_ci		break;
106962306a36Sopenharmony_ci
107062306a36Sopenharmony_ci	case ACPI_TYPE_BUFFER:
107162306a36Sopenharmony_ci
107262306a36Sopenharmony_ci		acpi_os_printf("[Buffer] Length %.2X = ",
107362306a36Sopenharmony_ci			       obj_desc->buffer.length);
107462306a36Sopenharmony_ci		if (obj_desc->buffer.length) {
107562306a36Sopenharmony_ci			acpi_ut_debug_dump_buffer(ACPI_CAST_PTR
107662306a36Sopenharmony_ci						  (u8,
107762306a36Sopenharmony_ci						   obj_desc->buffer.pointer),
107862306a36Sopenharmony_ci						  obj_desc->buffer.length,
107962306a36Sopenharmony_ci						  DB_DWORD_DISPLAY, _COMPONENT);
108062306a36Sopenharmony_ci		} else {
108162306a36Sopenharmony_ci			acpi_os_printf("\n");
108262306a36Sopenharmony_ci		}
108362306a36Sopenharmony_ci		break;
108462306a36Sopenharmony_ci
108562306a36Sopenharmony_ci	case ACPI_TYPE_PACKAGE:
108662306a36Sopenharmony_ci
108762306a36Sopenharmony_ci		acpi_os_printf("[Package] Contains %u Elements:\n",
108862306a36Sopenharmony_ci			       obj_desc->package.count);
108962306a36Sopenharmony_ci
109062306a36Sopenharmony_ci		for (i = 0; i < obj_desc->package.count; i++) {
109162306a36Sopenharmony_ci			acpi_ex_dump_package_obj(obj_desc->package.elements[i],
109262306a36Sopenharmony_ci						 level + 1, i);
109362306a36Sopenharmony_ci		}
109462306a36Sopenharmony_ci		break;
109562306a36Sopenharmony_ci
109662306a36Sopenharmony_ci	case ACPI_TYPE_LOCAL_REFERENCE:
109762306a36Sopenharmony_ci
109862306a36Sopenharmony_ci		acpi_os_printf("[Object Reference] Class [%s]",
109962306a36Sopenharmony_ci			       acpi_ut_get_reference_name(obj_desc));
110062306a36Sopenharmony_ci		acpi_ex_dump_reference_obj(obj_desc);
110162306a36Sopenharmony_ci		break;
110262306a36Sopenharmony_ci
110362306a36Sopenharmony_ci	default:
110462306a36Sopenharmony_ci
110562306a36Sopenharmony_ci		acpi_os_printf("[%s] Type: %2.2X\n",
110662306a36Sopenharmony_ci			       acpi_ut_get_type_name(obj_desc->common.type),
110762306a36Sopenharmony_ci			       obj_desc->common.type);
110862306a36Sopenharmony_ci		break;
110962306a36Sopenharmony_ci	}
111062306a36Sopenharmony_ci}
111162306a36Sopenharmony_ci
111262306a36Sopenharmony_ci/*******************************************************************************
111362306a36Sopenharmony_ci *
111462306a36Sopenharmony_ci * FUNCTION:    acpi_ex_dump_object_descriptor
111562306a36Sopenharmony_ci *
111662306a36Sopenharmony_ci * PARAMETERS:  obj_desc            - Descriptor to dump
111762306a36Sopenharmony_ci *              flags               - Force display if TRUE
111862306a36Sopenharmony_ci *
111962306a36Sopenharmony_ci * DESCRIPTION: Dumps the members of the object descriptor given.
112062306a36Sopenharmony_ci *
112162306a36Sopenharmony_ci ******************************************************************************/
112262306a36Sopenharmony_ci
112362306a36Sopenharmony_civoid
112462306a36Sopenharmony_ciacpi_ex_dump_object_descriptor(union acpi_operand_object *obj_desc, u32 flags)
112562306a36Sopenharmony_ci{
112662306a36Sopenharmony_ci	ACPI_FUNCTION_TRACE(ex_dump_object_descriptor);
112762306a36Sopenharmony_ci
112862306a36Sopenharmony_ci	if (!obj_desc) {
112962306a36Sopenharmony_ci		return_VOID;
113062306a36Sopenharmony_ci	}
113162306a36Sopenharmony_ci
113262306a36Sopenharmony_ci	if (!flags) {
113362306a36Sopenharmony_ci
113462306a36Sopenharmony_ci		/* Check if debug output enabled */
113562306a36Sopenharmony_ci
113662306a36Sopenharmony_ci		if (!ACPI_IS_DEBUG_ENABLED(ACPI_LV_OBJECTS, _COMPONENT)) {
113762306a36Sopenharmony_ci			return_VOID;
113862306a36Sopenharmony_ci		}
113962306a36Sopenharmony_ci	}
114062306a36Sopenharmony_ci
114162306a36Sopenharmony_ci	if (ACPI_GET_DESCRIPTOR_TYPE(obj_desc) == ACPI_DESC_TYPE_NAMED) {
114262306a36Sopenharmony_ci		acpi_ex_dump_namespace_node((struct acpi_namespace_node *)
114362306a36Sopenharmony_ci					    obj_desc, flags);
114462306a36Sopenharmony_ci
114562306a36Sopenharmony_ci		obj_desc = ((struct acpi_namespace_node *)obj_desc)->object;
114662306a36Sopenharmony_ci		if (!obj_desc) {
114762306a36Sopenharmony_ci			return_VOID;
114862306a36Sopenharmony_ci		}
114962306a36Sopenharmony_ci
115062306a36Sopenharmony_ci		acpi_os_printf("\nAttached Object %p", obj_desc);
115162306a36Sopenharmony_ci		if (ACPI_GET_DESCRIPTOR_TYPE(obj_desc) == ACPI_DESC_TYPE_NAMED) {
115262306a36Sopenharmony_ci			acpi_os_printf(" - Namespace Node");
115362306a36Sopenharmony_ci		}
115462306a36Sopenharmony_ci
115562306a36Sopenharmony_ci		acpi_os_printf(":\n");
115662306a36Sopenharmony_ci		goto dump_object;
115762306a36Sopenharmony_ci	}
115862306a36Sopenharmony_ci
115962306a36Sopenharmony_ci	if (ACPI_GET_DESCRIPTOR_TYPE(obj_desc) != ACPI_DESC_TYPE_OPERAND) {
116062306a36Sopenharmony_ci		acpi_os_printf("%p is not an ACPI operand object: [%s]\n",
116162306a36Sopenharmony_ci			       obj_desc, acpi_ut_get_descriptor_name(obj_desc));
116262306a36Sopenharmony_ci		return_VOID;
116362306a36Sopenharmony_ci	}
116462306a36Sopenharmony_ci
116562306a36Sopenharmony_ci	/* Validate the object type */
116662306a36Sopenharmony_ci
116762306a36Sopenharmony_ci	if (obj_desc->common.type > ACPI_TYPE_LOCAL_MAX) {
116862306a36Sopenharmony_ci		acpi_os_printf("Not a known object type: %2.2X\n",
116962306a36Sopenharmony_ci			       obj_desc->common.type);
117062306a36Sopenharmony_ci		return_VOID;
117162306a36Sopenharmony_ci	}
117262306a36Sopenharmony_ci
117362306a36Sopenharmony_cidump_object:
117462306a36Sopenharmony_ci
117562306a36Sopenharmony_ci	if (!obj_desc) {
117662306a36Sopenharmony_ci		return_VOID;
117762306a36Sopenharmony_ci	}
117862306a36Sopenharmony_ci
117962306a36Sopenharmony_ci	/* Common Fields */
118062306a36Sopenharmony_ci
118162306a36Sopenharmony_ci	acpi_ex_dump_object(obj_desc, acpi_ex_dump_common);
118262306a36Sopenharmony_ci
118362306a36Sopenharmony_ci	/* Object-specific fields */
118462306a36Sopenharmony_ci
118562306a36Sopenharmony_ci	acpi_ex_dump_object(obj_desc, acpi_ex_dump_info[obj_desc->common.type]);
118662306a36Sopenharmony_ci
118762306a36Sopenharmony_ci	if (obj_desc->common.type == ACPI_TYPE_REGION) {
118862306a36Sopenharmony_ci		obj_desc = obj_desc->common.next_object;
118962306a36Sopenharmony_ci		if (obj_desc->common.type > ACPI_TYPE_LOCAL_MAX) {
119062306a36Sopenharmony_ci			acpi_os_printf
119162306a36Sopenharmony_ci			    ("Secondary object is not a known object type: %2.2X\n",
119262306a36Sopenharmony_ci			     obj_desc->common.type);
119362306a36Sopenharmony_ci
119462306a36Sopenharmony_ci			return_VOID;
119562306a36Sopenharmony_ci		}
119662306a36Sopenharmony_ci
119762306a36Sopenharmony_ci		acpi_os_printf("\nExtra attached Object (%p):\n", obj_desc);
119862306a36Sopenharmony_ci		acpi_ex_dump_object(obj_desc,
119962306a36Sopenharmony_ci				    acpi_ex_dump_info[obj_desc->common.type]);
120062306a36Sopenharmony_ci	}
120162306a36Sopenharmony_ci
120262306a36Sopenharmony_ci	return_VOID;
120362306a36Sopenharmony_ci}
120462306a36Sopenharmony_ci
120562306a36Sopenharmony_ci#endif
1206