void acpi_db_dump_namespace(char *start_arg, char *depth_arg) { acpi_handle subtree_entry = acpi_gbl_root_node; u32 max_depth = ACPI_UINT32_MAX; /* No argument given, just start at the root and dump entire namespace */ if (start_arg) { subtree_entry = acpi_db_convert_to_node(start_arg); if (!subtree_entry) { return; } /* Now we can check for the depth argument */ if (depth_arg) { max_depth = strtoul(depth_arg, NULL, 0); } } acpi_db_set_output_destination(ACPI_DB_DUPLICATE_OUTPUT); acpi_os_printf("ACPI Namespace (from %4.4s (%p) subtree):\n", ((struct acpi_namespace_node *)subtree_entry)->name. ascii, subtree_entry); /* Display the subtree */ acpi_db_set_output_destination(ACPI_DB_REDIRECTABLE_OUTPUT); acpi_ns_dump_objects(ACPI_TYPE_ANY, ACPI_DISPLAY_SUMMARY, max_depth, ACPI_OWNER_ID_MAX, subtree_entry); acpi_db_set_output_destination(ACPI_DB_CONSOLE_OUTPUT); }
void acpi_db_send_notify(char *name, u32 value) { struct acpi_namespace_node *node; acpi_status status; /* Translate name to an Named object */ node = acpi_db_convert_to_node(name); if (!node) { return; } /* Dispatch the notify if legal */ if (acpi_ev_is_notify_object(node)) { status = acpi_ev_queue_notify_request(node, value); if (ACPI_FAILURE(status)) { acpi_os_printf("Could not queue notify\n"); } } else { acpi_os_printf("Named object [%4.4s] Type %s, " "must be Device/Thermal/Processor type\n", acpi_ut_get_node_name(node), acpi_ut_get_type_name(node->type)); } }
void acpi_db_display_resources(char *object_arg) { struct acpi_namespace_node *node; acpi_db_set_output_destination(ACPI_DB_REDIRECTABLE_OUTPUT); acpi_dbg_level |= ACPI_LV_RESOURCES; /* Asterisk means "display resources for all devices" */ if (!object_arg || (!strcmp(object_arg, "*"))) { (void)acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, acpi_db_device_resources, NULL, NULL, NULL); } else { /* Convert string to object pointer */ node = acpi_db_convert_to_node(object_arg); if (node) { if (node->type != ACPI_TYPE_DEVICE) { acpi_os_printf ("%4.4s: Name is not a device object (%s)\n", node->name.ascii, acpi_ut_get_type_name(node->type)); } else { (void)acpi_db_device_resources(node, 0, NULL, NULL); } } } acpi_db_set_output_destination(ACPI_DB_CONSOLE_OUTPUT); }
void acpi_db_display_template(char *buffer_arg) { struct acpi_namespace_node *node; acpi_status status; struct acpi_buffer return_buffer; /* Translate buffer_arg to an Named object */ node = acpi_db_convert_to_node(buffer_arg); if (!node || (node == acpi_gbl_root_node)) { acpi_os_printf("Invalid argument: %s\n", buffer_arg); return; } /* We must have a buffer object */ if (node->type != ACPI_TYPE_BUFFER) { acpi_os_printf ("Not a Buffer object, cannot be a template: %s\n", buffer_arg); return; } return_buffer.length = ACPI_DEBUG_BUFFER_SIZE; return_buffer.pointer = acpi_gbl_db_buffer; /* Attempt to convert the raw buffer to a resource list */ status = acpi_rs_create_resource_list(node->object, &return_buffer); acpi_db_set_output_destination(ACPI_DB_REDIRECTABLE_OUTPUT); acpi_dbg_level |= ACPI_LV_RESOURCES; if (ACPI_FAILURE(status)) { acpi_os_printf ("Could not convert Buffer to a resource list: %s, %s\n", buffer_arg, acpi_format_exception(status)); goto dump_buffer; } /* Now we can dump the resource list */ acpi_rs_dump_resource_list(ACPI_CAST_PTR(struct acpi_resource, return_buffer.pointer)); dump_buffer: acpi_os_printf("\nRaw data buffer:\n"); acpi_ut_debug_dump_buffer((u8 *)node->object->buffer.pointer, node->object->buffer.length, DB_BYTE_DISPLAY, ACPI_UINT32_MAX); acpi_db_set_output_destination(ACPI_DB_CONSOLE_OUTPUT); return; }
void acpi_db_unload_acpi_table(char *object_name) { struct acpi_namespace_node *node; acpi_status status; /* Translate name to an Named object */ node = acpi_db_convert_to_node(object_name); if (!node) { return; } status = acpi_unload_parent_table(ACPI_CAST_PTR(acpi_handle, node)); if (ACPI_SUCCESS(status)) { acpi_os_printf("Parent of [%s] (%p) unloaded and uninstalled\n", object_name, node); } else { acpi_os_printf("%s, while unloading parent table of [%s]\n", acpi_format_exception(status), object_name); } }