From: Erik Schmauss <erik.schmauss@intel.com>
To: "Rafael J . Wysocki" <rafael@kernel.org>, linux-acpi@vger.kernel.org
Cc: Erik Schmauss <erik.schmauss@intel.com>,
Bob Moore <robert.moore@intel.com>
Subject: [PATCH 07/12] ACPICA: Debugger: add command to dump all fields of a particular subtype
Date: Thu, 24 Oct 2019 11:55:51 -0700 [thread overview]
Message-ID: <20191024185556.4606-8-erik.schmauss@intel.com> (raw)
In-Reply-To: <20191024185556.4606-1-erik.schmauss@intel.com>
ACPICA commit 85cbe5e8b3b077593950eaffebaf07348b73e99d
In acpiexec, this can be invoked by typing "fields" followed by a
number representing the address space ID of that field.
Link: https://github.com/acpica/acpica/commit/85cbe5e8
Signed-off-by: Erik Schmauss <erik.schmauss@intel.com>
Signed-off-by: Bob Moore <robert.moore@intel.com>
---
drivers/acpi/acpica/acdebug.h | 2 +
drivers/acpi/acpica/acstruct.h | 10 +++
drivers/acpi/acpica/dbinput.c | 20 ++++++
drivers/acpi/acpica/dbnames.c | 108 +++++++++++++++++++++++++++++++++
4 files changed, 140 insertions(+)
diff --git a/drivers/acpi/acpica/acdebug.h b/drivers/acpi/acpica/acdebug.h
index 32f2e38c7570..694cf206fa9a 100644
--- a/drivers/acpi/acpica/acdebug.h
+++ b/drivers/acpi/acpica/acdebug.h
@@ -148,6 +148,8 @@ void acpi_db_find_references(char *object_arg);
void acpi_db_get_bus_info(void);
+acpi_status acpi_db_display_fields(u32 address_space_id);
+
/*
* dbdisply - debug display commands
*/
diff --git a/drivers/acpi/acpica/acstruct.h b/drivers/acpi/acpica/acstruct.h
index 218ff4c8b817..2043dff370b1 100644
--- a/drivers/acpi/acpica/acstruct.h
+++ b/drivers/acpi/acpica/acstruct.h
@@ -192,6 +192,16 @@ struct acpi_device_walk_info {
u32 num_INI;
};
+/* Info used by Acpi acpi_db_display_fields */
+
+struct acpi_region_walk_info {
+ u32 debug_level;
+ u32 count;
+ acpi_owner_id owner_id;
+ u8 display_type;
+ u32 address_space_id;
+};
+
/* TBD: [Restructure] Merge with struct above */
struct acpi_walk_info {
diff --git a/drivers/acpi/acpica/dbinput.c b/drivers/acpi/acpica/dbinput.c
index 95738313916b..44d6d7246e6e 100644
--- a/drivers/acpi/acpica/dbinput.c
+++ b/drivers/acpi/acpica/dbinput.c
@@ -50,6 +50,7 @@ enum acpi_ex_debugger_commands {
CMD_EVALUATE,
CMD_EXECUTE,
CMD_EXIT,
+ CMD_FIELDS,
CMD_FIND,
CMD_GO,
CMD_HANDLERS,
@@ -127,6 +128,7 @@ static const struct acpi_db_command_info acpi_gbl_db_commands[] = {
{"EVALUATE", 1},
{"EXECUTE", 1},
{"EXIT", 0},
+ {"FIELDS", 1},
{"FIND", 1},
{"GO", 0},
{"HANDLERS", 0},
@@ -200,6 +202,8 @@ static const struct acpi_db_command_help acpi_gbl_db_command_help[] = {
"Find ACPI name(s) with wildcards\n"},
{1, " Integrity", "Validate namespace integrity\n"},
{1, " Methods", "Display list of loaded control methods\n"},
+ {1, " Fields <AddressSpaceId>",
+ "Display list of loaded field units by space ID\n"},
{1, " Namespace [Object] [Depth]",
"Display loaded namespace tree/subtree\n"},
{1, " Notify <Object> <Value>", "Send a notification on Object\n"},
@@ -674,6 +678,7 @@ acpi_db_command_dispatch(char *input_buffer,
union acpi_parse_object *op)
{
u32 temp;
+ u64 temp64;
u32 command_index;
u32 param_count;
char *command_line;
@@ -789,6 +794,21 @@ acpi_db_command_dispatch(char *input_buffer,
status = acpi_db_find_name_in_namespace(acpi_gbl_db_args[1]);
break;
+ case CMD_FIELDS:
+
+ status = acpi_ut_strtoul64(acpi_gbl_db_args[1], &temp64);
+
+ if (ACPI_FAILURE(status)
+ || temp64 >= ACPI_NUM_PREDEFINED_REGIONS) {
+ acpi_os_printf
+ ("Invalid adress space ID: must be between 0 and %u inclusive\n",
+ ACPI_NUM_PREDEFINED_REGIONS - 1);
+ return (AE_OK);
+ }
+
+ status = acpi_db_display_fields((u32)temp64);
+ break;
+
case CMD_GO:
acpi_gbl_cm_single_step = FALSE;
diff --git a/drivers/acpi/acpica/dbnames.c b/drivers/acpi/acpica/dbnames.c
index 63fe30e86807..06fe87c6647d 100644
--- a/drivers/acpi/acpica/dbnames.c
+++ b/drivers/acpi/acpica/dbnames.c
@@ -10,6 +10,7 @@
#include "acnamesp.h"
#include "acdebug.h"
#include "acpredef.h"
+#include "acinterp.h"
#define _COMPONENT ACPI_CA_DEBUGGER
ACPI_MODULE_NAME("dbnames")
@@ -502,6 +503,80 @@ acpi_db_walk_for_object_counts(acpi_handle obj_handle,
return (AE_OK);
}
+/*******************************************************************************
+ *
+ * FUNCTION: acpi_db_walk_for_fields
+ *
+ * PARAMETERS: Callback from walk_namespace
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Display short info about objects in the namespace
+ *
+ ******************************************************************************/
+
+static acpi_status
+acpi_db_walk_for_fields(acpi_handle obj_handle,
+ u32 nesting_level, void *context, void **return_value)
+{
+ union acpi_object *ret_value;
+ ACPI_REGION_WALK_INFO *info = (ACPI_REGION_WALK_INFO *) context;
+ struct acpi_buffer buffer;
+ acpi_status status;
+ struct acpi_namespace_node *node = acpi_ns_validate_handle(obj_handle);
+
+ if (!node) {
+ return (AE_OK);
+ }
+ if (node->object->field.region_obj->region.space_id !=
+ info->address_space_id) {
+ return (AE_OK);
+ }
+
+ info->count++;
+
+ /* Get and display the full pathname to this object */
+
+ buffer.length = ACPI_ALLOCATE_LOCAL_BUFFER;
+ status = acpi_ns_handle_to_pathname(obj_handle, &buffer, TRUE);
+ if (ACPI_FAILURE(status)) {
+ acpi_os_printf("Could Not get pathname for object %p\n",
+ obj_handle);
+ return (AE_OK);
+ }
+
+ acpi_os_printf("%s ", (char *)buffer.pointer);
+ ACPI_FREE(buffer.pointer);
+
+ buffer.length = ACPI_ALLOCATE_LOCAL_BUFFER;
+ acpi_evaluate_object(obj_handle, NULL, NULL, &buffer);
+
+ ret_value = (union acpi_object *)buffer.pointer;
+ switch (ret_value->type) {
+ case ACPI_TYPE_INTEGER:
+
+ acpi_os_printf("%8.8X%8.8X",
+ ACPI_FORMAT_UINT64(ret_value->integer.value));
+ break;
+
+ case ACPI_TYPE_BUFFER:
+
+ acpi_ut_dump_buffer(ret_value->buffer.pointer,
+ ret_value->buffer.length,
+ DB_DISPLAY_DATA_ONLY | DB_BYTE_DISPLAY, 0);
+ break;
+
+ default:
+
+ break;
+ }
+
+ acpi_os_printf("\n");
+
+ ACPI_FREE(buffer.pointer);
+ return (AE_OK);
+}
+
/*******************************************************************************
*
* FUNCTION: acpi_db_walk_for_specific_objects
@@ -628,6 +703,39 @@ acpi_status acpi_db_display_objects(char *obj_type_arg, char *display_count_arg)
return (AE_OK);
}
+/*******************************************************************************
+ *
+ * FUNCTION: acpi_db_display_fields
+ *
+ * PARAMETERS: obj_type_arg - Type of object to display
+ * display_count_arg - Max depth to display
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Display objects in the namespace of the requested type
+ *
+ ******************************************************************************/
+
+acpi_status acpi_db_display_fields(u32 address_space_id)
+{
+ ACPI_REGION_WALK_INFO info;
+
+ info.count = 0;
+ info.owner_id = ACPI_OWNER_ID_MAX;
+ info.debug_level = ACPI_UINT32_MAX;
+ info.display_type = ACPI_DISPLAY_SUMMARY | ACPI_DISPLAY_SHORT;
+ info.address_space_id = address_space_id;
+
+ /* Walk the namespace from the root */
+
+ (void)acpi_walk_namespace(ACPI_TYPE_LOCAL_REGION_FIELD,
+ ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,
+ acpi_db_walk_for_fields, NULL, (void *)&info,
+ NULL);
+
+ return (AE_OK);
+}
+
/*******************************************************************************
*
* FUNCTION: acpi_db_integrity_walk
--
2.21.0
next prev parent reply other threads:[~2019-10-24 19:13 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-24 18:55 [PATCH 00/12] ACPICA version 20191018 Erik Schmauss
2019-10-24 18:55 ` [PATCH 01/12] ACPICA: Results from Clang changes/fixes From Clang V5.0.1. Mostly "set but never read" warnings Erik Schmauss
2019-10-24 18:55 ` [PATCH 02/12] ACPICA: Win OSL: Replace get_tick_count with get_tick_count64 Erik Schmauss
2019-10-24 18:55 ` [PATCH 03/12] ACPICA: More Clang changes - V8.0.1 Fixed all "dead assignment" warnings Erik Schmauss
2019-10-24 18:55 ` [PATCH 04/12] ACPICA: Add new external interface, acpi_unload_table Erik Schmauss
2019-10-24 18:55 ` [PATCH 05/12] ACPICA: make acpi_load_table() return table index Erik Schmauss
2019-10-25 8:19 ` Andy Shevchenko
2019-10-25 8:22 ` Rafael J. Wysocki
2019-10-24 18:55 ` [PATCH 06/12] ACPICA: utilities: add flag to only display data when dumping buffers Erik Schmauss
2019-10-24 18:55 ` Erik Schmauss [this message]
2019-10-27 20:57 ` [PATCH 07/12] ACPICA: Debugger: add command to dump all fields of a particular subtype kbuild test robot
2019-10-27 21:33 ` kbuild test robot
2019-10-24 18:55 ` [PATCH 08/12] ACPICA: debugger: surround field unit output with braces '{' Erik Schmauss
2019-10-24 18:55 ` [PATCH 09/12] ACPICA: debugger: add field unit support for acpi_db_get_next_token Erik Schmauss
2019-10-24 18:55 ` [PATCH 10/12] ACPICA: acpiexec: initialize all simple types and field units from user input Erik Schmauss
2019-10-24 18:55 ` [PATCH 11/12] ACPICA: debugger: remove leading whitespaces when converting a string to a buffer Erik Schmauss
2019-10-24 18:55 ` [PATCH 12/12] ACPICA: Update version to 20191018 Erik Schmauss
2019-10-25 9:19 ` [PATCH 00/12] ACPICA version 20191018 Rafael J. Wysocki
2019-10-25 17:08 ` Schmauss, Erik
2019-10-28 15:08 ` Rafael J. Wysocki
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20191024185556.4606-8-erik.schmauss@intel.com \
--to=erik.schmauss@intel.com \
--cc=linux-acpi@vger.kernel.org \
--cc=rafael@kernel.org \
--cc=robert.moore@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox