195857638SErik Schmauss // SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 295b482a8SLen Brown /******************************************************************************* 395b482a8SLen Brown * 439239fedSBob Moore * Module Name: rsdump - AML debugger support for resource structures. 595b482a8SLen Brown * 695b482a8SLen Brown ******************************************************************************/ 795b482a8SLen Brown 895b482a8SLen Brown #include <acpi/acpi.h> 9e2f7a777SLen Brown #include "accommon.h" 10e2f7a777SLen Brown #include "acresrc.h" 1195b482a8SLen Brown 1295b482a8SLen Brown #define _COMPONENT ACPI_RESOURCES 1395b482a8SLen Brown ACPI_MODULE_NAME("rsdump") 143334861bSLv Zheng 1539239fedSBob Moore /* 1639239fedSBob Moore * All functions in this module are used by the AML Debugger only 1739239fedSBob Moore */ 1895b482a8SLen Brown /* Local prototypes */ 190dfaaa3dSBob Moore static void acpi_rs_out_string(const char *title, const char *value); 2095b482a8SLen Brown 210dfaaa3dSBob Moore static void acpi_rs_out_integer8(const char *title, u8 value); 2295b482a8SLen Brown 230dfaaa3dSBob Moore static void acpi_rs_out_integer16(const char *title, u16 value); 2495b482a8SLen Brown 250dfaaa3dSBob Moore static void acpi_rs_out_integer32(const char *title, u32 value); 2695b482a8SLen Brown 270dfaaa3dSBob Moore static void acpi_rs_out_integer64(const char *title, u64 value); 2895b482a8SLen Brown 290dfaaa3dSBob Moore static void acpi_rs_out_title(const char *title); 3095b482a8SLen Brown 3195b482a8SLen Brown static void acpi_rs_dump_byte_list(u16 length, u8 *data); 3295b482a8SLen Brown 33e0fe0a8dSLin Ming static void acpi_rs_dump_word_list(u16 length, u16 *data); 34e0fe0a8dSLin Ming 3595b482a8SLen Brown static void acpi_rs_dump_dword_list(u8 length, u32 *data); 3695b482a8SLen Brown 3795b482a8SLen Brown static void acpi_rs_dump_short_byte_list(u8 length, u8 *data); 3895b482a8SLen Brown 3995b482a8SLen Brown static void 4095b482a8SLen Brown acpi_rs_dump_resource_source(struct acpi_resource_source *resource_source); 4195b482a8SLen Brown 42fdaa0980SMika Westerberg static void 43fdaa0980SMika Westerberg acpi_rs_dump_resource_label(char *title, 44fdaa0980SMika Westerberg struct acpi_resource_label *resource_label); 45fdaa0980SMika Westerberg 4695b482a8SLen Brown static void acpi_rs_dump_address_common(union acpi_resource_data *resource); 4795b482a8SLen Brown 4895b482a8SLen Brown static void 4995b482a8SLen Brown acpi_rs_dump_descriptor(void *resource, struct acpi_rsdump_info *table); 5095b482a8SLen Brown 5195b482a8SLen Brown /******************************************************************************* 5295b482a8SLen Brown * 5339239fedSBob Moore * FUNCTION: acpi_rs_dump_resource_list 5439239fedSBob Moore * 5539239fedSBob Moore * PARAMETERS: resource_list - Pointer to a resource descriptor list 5639239fedSBob Moore * 5739239fedSBob Moore * RETURN: None 5839239fedSBob Moore * 5939239fedSBob Moore * DESCRIPTION: Dispatches the structure to the correct dump routine. 6039239fedSBob Moore * 6139239fedSBob Moore ******************************************************************************/ 6239239fedSBob Moore 6339239fedSBob Moore void acpi_rs_dump_resource_list(struct acpi_resource *resource_list) 6439239fedSBob Moore { 6539239fedSBob Moore u32 count = 0; 6639239fedSBob Moore u32 type; 6739239fedSBob Moore 6839239fedSBob Moore ACPI_FUNCTION_ENTRY(); 6939239fedSBob Moore 7039239fedSBob Moore /* Check if debug output enabled */ 7139239fedSBob Moore 7239239fedSBob Moore if (!ACPI_IS_DEBUG_ENABLED(ACPI_LV_RESOURCES, _COMPONENT)) { 7339239fedSBob Moore return; 7439239fedSBob Moore } 7539239fedSBob Moore 7639239fedSBob Moore /* Walk list and dump all resource descriptors (END_TAG terminates) */ 7739239fedSBob Moore 7839239fedSBob Moore do { 7939239fedSBob Moore acpi_os_printf("\n[%02X] ", count); 8039239fedSBob Moore count++; 8139239fedSBob Moore 8239239fedSBob Moore /* Validate Type before dispatch */ 8339239fedSBob Moore 8439239fedSBob Moore type = resource_list->type; 8539239fedSBob Moore if (type > ACPI_RESOURCE_TYPE_MAX) { 8639239fedSBob Moore acpi_os_printf 8739239fedSBob Moore ("Invalid descriptor type (%X) in resource list\n", 8839239fedSBob Moore resource_list->type); 8939239fedSBob Moore return; 9039239fedSBob Moore } 9139239fedSBob Moore 9239239fedSBob Moore /* Sanity check the length. It must not be zero, or we loop forever */ 9339239fedSBob Moore 9439239fedSBob Moore if (!resource_list->length) { 9539239fedSBob Moore acpi_os_printf 9639239fedSBob Moore ("Invalid zero length descriptor in resource list\n"); 9739239fedSBob Moore return; 9839239fedSBob Moore } 9939239fedSBob Moore 10039239fedSBob Moore /* Dump the resource descriptor */ 10139239fedSBob Moore 10239239fedSBob Moore if (type == ACPI_RESOURCE_TYPE_SERIAL_BUS) { 10339239fedSBob Moore acpi_rs_dump_descriptor(&resource_list->data, 10439239fedSBob Moore acpi_gbl_dump_serial_bus_dispatch 10539239fedSBob Moore [resource_list->data. 10639239fedSBob Moore common_serial_bus.type]); 10739239fedSBob Moore } else { 10839239fedSBob Moore acpi_rs_dump_descriptor(&resource_list->data, 10939239fedSBob Moore acpi_gbl_dump_resource_dispatch 11039239fedSBob Moore [type]); 11139239fedSBob Moore } 11239239fedSBob Moore 11339239fedSBob Moore /* Point to the next resource structure */ 11439239fedSBob Moore 11539239fedSBob Moore resource_list = ACPI_NEXT_RESOURCE(resource_list); 11639239fedSBob Moore 11739239fedSBob Moore /* Exit when END_TAG descriptor is reached */ 11839239fedSBob Moore 11939239fedSBob Moore } while (type != ACPI_RESOURCE_TYPE_END_TAG); 12039239fedSBob Moore } 12139239fedSBob Moore 12239239fedSBob Moore /******************************************************************************* 12339239fedSBob Moore * 12439239fedSBob Moore * FUNCTION: acpi_rs_dump_irq_list 12539239fedSBob Moore * 12639239fedSBob Moore * PARAMETERS: route_table - Pointer to the routing table to dump. 12739239fedSBob Moore * 12839239fedSBob Moore * RETURN: None 12939239fedSBob Moore * 13039239fedSBob Moore * DESCRIPTION: Print IRQ routing table 13139239fedSBob Moore * 13239239fedSBob Moore ******************************************************************************/ 13339239fedSBob Moore 13439239fedSBob Moore void acpi_rs_dump_irq_list(u8 *route_table) 13539239fedSBob Moore { 13639239fedSBob Moore struct acpi_pci_routing_table *prt_element; 13739239fedSBob Moore u8 count; 13839239fedSBob Moore 13939239fedSBob Moore ACPI_FUNCTION_ENTRY(); 14039239fedSBob Moore 14139239fedSBob Moore /* Check if debug output enabled */ 14239239fedSBob Moore 14339239fedSBob Moore if (!ACPI_IS_DEBUG_ENABLED(ACPI_LV_RESOURCES, _COMPONENT)) { 14439239fedSBob Moore return; 14539239fedSBob Moore } 14639239fedSBob Moore 14739239fedSBob Moore prt_element = ACPI_CAST_PTR(struct acpi_pci_routing_table, route_table); 14839239fedSBob Moore 14939239fedSBob Moore /* Dump all table elements, Exit on zero length element */ 15039239fedSBob Moore 15139239fedSBob Moore for (count = 0; prt_element->length; count++) { 15239239fedSBob Moore acpi_os_printf("\n[%02X] PCI IRQ Routing Table Package\n", 15339239fedSBob Moore count); 15439239fedSBob Moore acpi_rs_dump_descriptor(prt_element, acpi_rs_dump_prt); 15539239fedSBob Moore 15639239fedSBob Moore prt_element = ACPI_ADD_PTR(struct acpi_pci_routing_table, 15739239fedSBob Moore prt_element, prt_element->length); 15839239fedSBob Moore } 15939239fedSBob Moore } 16039239fedSBob Moore 16139239fedSBob Moore /******************************************************************************* 16239239fedSBob Moore * 16395b482a8SLen Brown * FUNCTION: acpi_rs_dump_descriptor 16495b482a8SLen Brown * 16542f8fb75SBob Moore * PARAMETERS: resource - Buffer containing the resource 16642f8fb75SBob Moore * table - Table entry to decode the resource 16795b482a8SLen Brown * 16895b482a8SLen Brown * RETURN: None 16995b482a8SLen Brown * 17042f8fb75SBob Moore * DESCRIPTION: Dump a resource descriptor based on a dump table entry. 17195b482a8SLen Brown * 17295b482a8SLen Brown ******************************************************************************/ 17395b482a8SLen Brown 17495b482a8SLen Brown static void 17595b482a8SLen Brown acpi_rs_dump_descriptor(void *resource, struct acpi_rsdump_info *table) 17695b482a8SLen Brown { 17795b482a8SLen Brown u8 *target = NULL; 17895b482a8SLen Brown u8 *previous_target; 1790dfaaa3dSBob Moore const char *name; 18095b482a8SLen Brown u8 count; 18195b482a8SLen Brown 18295b482a8SLen Brown /* First table entry must contain the table length (# of table entries) */ 18395b482a8SLen Brown 18495b482a8SLen Brown count = table->offset; 18595b482a8SLen Brown 18695b482a8SLen Brown while (count) { 18795b482a8SLen Brown previous_target = target; 18895b482a8SLen Brown target = ACPI_ADD_PTR(u8, resource, table->offset); 18995b482a8SLen Brown name = table->name; 19095b482a8SLen Brown 19195b482a8SLen Brown switch (table->opcode) { 19295b482a8SLen Brown case ACPI_RSD_TITLE: 19395b482a8SLen Brown /* 19495b482a8SLen Brown * Optional resource title 19595b482a8SLen Brown */ 19695b482a8SLen Brown if (table->name) { 19795b482a8SLen Brown acpi_os_printf("%s Resource\n", name); 19895b482a8SLen Brown } 19995b482a8SLen Brown break; 20095b482a8SLen Brown 20195b482a8SLen Brown /* Strings */ 20295b482a8SLen Brown 20395b482a8SLen Brown case ACPI_RSD_LITERAL: 2041d1ea1b7SChao Guan 20595b482a8SLen Brown acpi_rs_out_string(name, 20695b482a8SLen Brown ACPI_CAST_PTR(char, table->pointer)); 20795b482a8SLen Brown break; 20895b482a8SLen Brown 20995b482a8SLen Brown case ACPI_RSD_STRING: 2101d1ea1b7SChao Guan 21195b482a8SLen Brown acpi_rs_out_string(name, ACPI_CAST_PTR(char, target)); 21295b482a8SLen Brown break; 21395b482a8SLen Brown 21495b482a8SLen Brown /* Data items, 8/16/32/64 bit */ 21595b482a8SLen Brown 21695b482a8SLen Brown case ACPI_RSD_UINT8: 2171d1ea1b7SChao Guan 218e0fe0a8dSLin Ming if (table->pointer) { 2190dfaaa3dSBob Moore acpi_rs_out_string(name, 2200dfaaa3dSBob Moore table->pointer[*target]); 221e0fe0a8dSLin Ming } else { 22295b482a8SLen Brown acpi_rs_out_integer8(name, ACPI_GET8(target)); 223e0fe0a8dSLin Ming } 22495b482a8SLen Brown break; 22595b482a8SLen Brown 22695b482a8SLen Brown case ACPI_RSD_UINT16: 2271d1ea1b7SChao Guan 22895b482a8SLen Brown acpi_rs_out_integer16(name, ACPI_GET16(target)); 22995b482a8SLen Brown break; 23095b482a8SLen Brown 23195b482a8SLen Brown case ACPI_RSD_UINT32: 2321d1ea1b7SChao Guan 23395b482a8SLen Brown acpi_rs_out_integer32(name, ACPI_GET32(target)); 23495b482a8SLen Brown break; 23595b482a8SLen Brown 23695b482a8SLen Brown case ACPI_RSD_UINT64: 2371d1ea1b7SChao Guan 23895b482a8SLen Brown acpi_rs_out_integer64(name, ACPI_GET64(target)); 23995b482a8SLen Brown break; 24095b482a8SLen Brown 24195b482a8SLen Brown /* Flags: 1-bit and 2-bit flags supported */ 24295b482a8SLen Brown 24395b482a8SLen Brown case ACPI_RSD_1BITFLAG: 2441d1ea1b7SChao Guan 2450dfaaa3dSBob Moore acpi_rs_out_string(name, 2460dfaaa3dSBob Moore table->pointer[*target & 0x01]); 24795b482a8SLen Brown break; 24895b482a8SLen Brown 24995b482a8SLen Brown case ACPI_RSD_2BITFLAG: 2501d1ea1b7SChao Guan 2510dfaaa3dSBob Moore acpi_rs_out_string(name, 2520dfaaa3dSBob Moore table->pointer[*target & 0x03]); 25395b482a8SLen Brown break; 25495b482a8SLen Brown 255e0fe0a8dSLin Ming case ACPI_RSD_3BITFLAG: 2561d1ea1b7SChao Guan 2570dfaaa3dSBob Moore acpi_rs_out_string(name, 2580dfaaa3dSBob Moore table->pointer[*target & 0x07]); 259e0fe0a8dSLin Ming break; 260e0fe0a8dSLin Ming 26195b482a8SLen Brown case ACPI_RSD_SHORTLIST: 26295b482a8SLen Brown /* 26395b482a8SLen Brown * Short byte list (single line output) for DMA and IRQ resources 26495b482a8SLen Brown * Note: The list length is obtained from the previous table entry 26595b482a8SLen Brown */ 26695b482a8SLen Brown if (previous_target) { 26795b482a8SLen Brown acpi_rs_out_title(name); 26895b482a8SLen Brown acpi_rs_dump_short_byte_list(*previous_target, 26995b482a8SLen Brown target); 27095b482a8SLen Brown } 27195b482a8SLen Brown break; 27295b482a8SLen Brown 273e0fe0a8dSLin Ming case ACPI_RSD_SHORTLISTX: 274e0fe0a8dSLin Ming /* 275e0fe0a8dSLin Ming * Short byte list (single line output) for GPIO vendor data 276e0fe0a8dSLin Ming * Note: The list length is obtained from the previous table entry 277e0fe0a8dSLin Ming */ 278e0fe0a8dSLin Ming if (previous_target) { 279e0fe0a8dSLin Ming acpi_rs_out_title(name); 280e0fe0a8dSLin Ming acpi_rs_dump_short_byte_list(*previous_target, 281e0fe0a8dSLin Ming * 282e0fe0a8dSLin Ming (ACPI_CAST_INDIRECT_PTR 283e0fe0a8dSLin Ming (u8, target))); 284e0fe0a8dSLin Ming } 285e0fe0a8dSLin Ming break; 286e0fe0a8dSLin Ming 28795b482a8SLen Brown case ACPI_RSD_LONGLIST: 28895b482a8SLen Brown /* 28995b482a8SLen Brown * Long byte list for Vendor resource data 29095b482a8SLen Brown * Note: The list length is obtained from the previous table entry 29195b482a8SLen Brown */ 29295b482a8SLen Brown if (previous_target) { 29395b482a8SLen Brown acpi_rs_dump_byte_list(ACPI_GET16 29495b482a8SLen Brown (previous_target), 29595b482a8SLen Brown target); 29695b482a8SLen Brown } 29795b482a8SLen Brown break; 29895b482a8SLen Brown 29995b482a8SLen Brown case ACPI_RSD_DWORDLIST: 30095b482a8SLen Brown /* 30195b482a8SLen Brown * Dword list for Extended Interrupt resources 30295b482a8SLen Brown * Note: The list length is obtained from the previous table entry 30395b482a8SLen Brown */ 30495b482a8SLen Brown if (previous_target) { 30595b482a8SLen Brown acpi_rs_dump_dword_list(*previous_target, 30695b482a8SLen Brown ACPI_CAST_PTR(u32, 30795b482a8SLen Brown target)); 30895b482a8SLen Brown } 30995b482a8SLen Brown break; 31095b482a8SLen Brown 311e0fe0a8dSLin Ming case ACPI_RSD_WORDLIST: 312e0fe0a8dSLin Ming /* 313e0fe0a8dSLin Ming * Word list for GPIO Pin Table 314e0fe0a8dSLin Ming * Note: The list length is obtained from the previous table entry 315e0fe0a8dSLin Ming */ 316e0fe0a8dSLin Ming if (previous_target) { 317e0fe0a8dSLin Ming acpi_rs_dump_word_list(*previous_target, 318e0fe0a8dSLin Ming *(ACPI_CAST_INDIRECT_PTR 319e0fe0a8dSLin Ming (u16, target))); 320e0fe0a8dSLin Ming } 321e0fe0a8dSLin Ming break; 322e0fe0a8dSLin Ming 32395b482a8SLen Brown case ACPI_RSD_ADDRESS: 32495b482a8SLen Brown /* 32595b482a8SLen Brown * Common flags for all Address resources 32695b482a8SLen Brown */ 32795b482a8SLen Brown acpi_rs_dump_address_common(ACPI_CAST_PTR 32895b482a8SLen Brown (union acpi_resource_data, 32995b482a8SLen Brown target)); 33095b482a8SLen Brown break; 33195b482a8SLen Brown 33295b482a8SLen Brown case ACPI_RSD_SOURCE: 33395b482a8SLen Brown /* 33495b482a8SLen Brown * Optional resource_source for Address resources 33595b482a8SLen Brown */ 3363e8214e5SLv Zheng acpi_rs_dump_resource_source(ACPI_CAST_PTR 3373e8214e5SLv Zheng (struct 33895b482a8SLen Brown acpi_resource_source, 33995b482a8SLen Brown target)); 34095b482a8SLen Brown break; 34195b482a8SLen Brown 342fdaa0980SMika Westerberg case ACPI_RSD_LABEL: 343fdaa0980SMika Westerberg /* 344fdaa0980SMika Westerberg * resource_label 345fdaa0980SMika Westerberg */ 346fdaa0980SMika Westerberg acpi_rs_dump_resource_label("Resource Label", 347fdaa0980SMika Westerberg ACPI_CAST_PTR(struct 348fdaa0980SMika Westerberg acpi_resource_label, 349fdaa0980SMika Westerberg target)); 350fdaa0980SMika Westerberg break; 351fdaa0980SMika Westerberg 352f8a6c866SMika Westerberg case ACPI_RSD_SOURCE_LABEL: 353f8a6c866SMika Westerberg /* 354f8a6c866SMika Westerberg * resource_source_label 355f8a6c866SMika Westerberg */ 356f8a6c866SMika Westerberg acpi_rs_dump_resource_label("Resource Source Label", 357f8a6c866SMika Westerberg ACPI_CAST_PTR(struct 358f8a6c866SMika Westerberg acpi_resource_label, 359f8a6c866SMika Westerberg target)); 360f8a6c866SMika Westerberg break; 361f8a6c866SMika Westerberg 36295b482a8SLen Brown default: 3631d1ea1b7SChao Guan 36495b482a8SLen Brown acpi_os_printf("**** Invalid table opcode [%X] ****\n", 36595b482a8SLen Brown table->opcode); 36695b482a8SLen Brown return; 36795b482a8SLen Brown } 36895b482a8SLen Brown 36995b482a8SLen Brown table++; 37095b482a8SLen Brown count--; 37195b482a8SLen Brown } 37295b482a8SLen Brown } 37395b482a8SLen Brown 37495b482a8SLen Brown /******************************************************************************* 37595b482a8SLen Brown * 37695b482a8SLen Brown * FUNCTION: acpi_rs_dump_resource_source 37795b482a8SLen Brown * 37895b482a8SLen Brown * PARAMETERS: resource_source - Pointer to a Resource Source struct 37995b482a8SLen Brown * 38095b482a8SLen Brown * RETURN: None 38195b482a8SLen Brown * 38295b482a8SLen Brown * DESCRIPTION: Common routine for dumping the optional resource_source and the 38395b482a8SLen Brown * corresponding resource_source_index. 38495b482a8SLen Brown * 38595b482a8SLen Brown ******************************************************************************/ 38695b482a8SLen Brown 38795b482a8SLen Brown static void 38895b482a8SLen Brown acpi_rs_dump_resource_source(struct acpi_resource_source *resource_source) 38995b482a8SLen Brown { 39095b482a8SLen Brown ACPI_FUNCTION_ENTRY(); 39195b482a8SLen Brown 39295b482a8SLen Brown if (resource_source->index == 0xFF) { 39395b482a8SLen Brown return; 39495b482a8SLen Brown } 39595b482a8SLen Brown 39695b482a8SLen Brown acpi_rs_out_integer8("Resource Source Index", resource_source->index); 39795b482a8SLen Brown 39895b482a8SLen Brown acpi_rs_out_string("Resource Source", 39995b482a8SLen Brown resource_source->string_ptr ? 40095b482a8SLen Brown resource_source->string_ptr : "[Not Specified]"); 40195b482a8SLen Brown } 40295b482a8SLen Brown 40395b482a8SLen Brown /******************************************************************************* 40495b482a8SLen Brown * 405fdaa0980SMika Westerberg * FUNCTION: acpi_rs_dump_resource_label 406fdaa0980SMika Westerberg * 407fdaa0980SMika Westerberg * PARAMETERS: title - Title of the dumped resource field 408fdaa0980SMika Westerberg * resource_label - Pointer to a Resource Label struct 409fdaa0980SMika Westerberg * 410fdaa0980SMika Westerberg * RETURN: None 411fdaa0980SMika Westerberg * 412fdaa0980SMika Westerberg * DESCRIPTION: Common routine for dumping the resource_label 413fdaa0980SMika Westerberg * 414fdaa0980SMika Westerberg ******************************************************************************/ 415fdaa0980SMika Westerberg 416fdaa0980SMika Westerberg static void 417fdaa0980SMika Westerberg acpi_rs_dump_resource_label(char *title, 418fdaa0980SMika Westerberg struct acpi_resource_label *resource_label) 419fdaa0980SMika Westerberg { 420fdaa0980SMika Westerberg ACPI_FUNCTION_ENTRY(); 421fdaa0980SMika Westerberg 422fdaa0980SMika Westerberg acpi_rs_out_string(title, 423fdaa0980SMika Westerberg resource_label->string_ptr ? 424fdaa0980SMika Westerberg resource_label->string_ptr : "[Not Specified]"); 425fdaa0980SMika Westerberg } 426fdaa0980SMika Westerberg 427fdaa0980SMika Westerberg /******************************************************************************* 428fdaa0980SMika Westerberg * 42995b482a8SLen Brown * FUNCTION: acpi_rs_dump_address_common 43095b482a8SLen Brown * 431ba494beeSBob Moore * PARAMETERS: resource - Pointer to an internal resource descriptor 43295b482a8SLen Brown * 43395b482a8SLen Brown * RETURN: None 43495b482a8SLen Brown * 43595b482a8SLen Brown * DESCRIPTION: Dump the fields that are common to all Address resource 43695b482a8SLen Brown * descriptors 43795b482a8SLen Brown * 43895b482a8SLen Brown ******************************************************************************/ 43995b482a8SLen Brown 44095b482a8SLen Brown static void acpi_rs_dump_address_common(union acpi_resource_data *resource) 44195b482a8SLen Brown { 44295b482a8SLen Brown ACPI_FUNCTION_ENTRY(); 44395b482a8SLen Brown 44495b482a8SLen Brown /* Decode the type-specific flags */ 44595b482a8SLen Brown 44695b482a8SLen Brown switch (resource->address.resource_type) { 44795b482a8SLen Brown case ACPI_MEMORY_RANGE: 44895b482a8SLen Brown 44995b482a8SLen Brown acpi_rs_dump_descriptor(resource, acpi_rs_dump_memory_flags); 45095b482a8SLen Brown break; 45195b482a8SLen Brown 45295b482a8SLen Brown case ACPI_IO_RANGE: 45395b482a8SLen Brown 45495b482a8SLen Brown acpi_rs_dump_descriptor(resource, acpi_rs_dump_io_flags); 45595b482a8SLen Brown break; 45695b482a8SLen Brown 45795b482a8SLen Brown case ACPI_BUS_NUMBER_RANGE: 45895b482a8SLen Brown 45995b482a8SLen Brown acpi_rs_out_string("Resource Type", "Bus Number Range"); 46095b482a8SLen Brown break; 46195b482a8SLen Brown 46295b482a8SLen Brown default: 46395b482a8SLen Brown 46495b482a8SLen Brown acpi_rs_out_integer8("Resource Type", 46595b482a8SLen Brown (u8) resource->address.resource_type); 46695b482a8SLen Brown break; 46795b482a8SLen Brown } 46895b482a8SLen Brown 46995b482a8SLen Brown /* Decode the general flags */ 47095b482a8SLen Brown 47195b482a8SLen Brown acpi_rs_dump_descriptor(resource, acpi_rs_dump_general_flags); 47295b482a8SLen Brown } 47395b482a8SLen Brown 47495b482a8SLen Brown /******************************************************************************* 47595b482a8SLen Brown * 47695b482a8SLen Brown * FUNCTION: acpi_rs_out* 47795b482a8SLen Brown * 478ba494beeSBob Moore * PARAMETERS: title - Name of the resource field 479ba494beeSBob Moore * value - Value of the resource field 48095b482a8SLen Brown * 48195b482a8SLen Brown * RETURN: None 48295b482a8SLen Brown * 48395b482a8SLen Brown * DESCRIPTION: Miscellaneous helper functions to consistently format the 48495b482a8SLen Brown * output of the resource dump routines 48595b482a8SLen Brown * 48695b482a8SLen Brown ******************************************************************************/ 48795b482a8SLen Brown 4880dfaaa3dSBob Moore static void acpi_rs_out_string(const char *title, const char *value) 48995b482a8SLen Brown { 4901fad8738SBob Moore 49195b482a8SLen Brown acpi_os_printf("%27s : %s", title, value); 49295b482a8SLen Brown if (!*value) { 49395b482a8SLen Brown acpi_os_printf("[NULL NAMESTRING]"); 49495b482a8SLen Brown } 49595b482a8SLen Brown acpi_os_printf("\n"); 49695b482a8SLen Brown } 49795b482a8SLen Brown 4980dfaaa3dSBob Moore static void acpi_rs_out_integer8(const char *title, u8 value) 49995b482a8SLen Brown { 50095b482a8SLen Brown acpi_os_printf("%27s : %2.2X\n", title, value); 50195b482a8SLen Brown } 50295b482a8SLen Brown 5030dfaaa3dSBob Moore static void acpi_rs_out_integer16(const char *title, u16 value) 50495b482a8SLen Brown { 5051fad8738SBob Moore 50695b482a8SLen Brown acpi_os_printf("%27s : %4.4X\n", title, value); 50795b482a8SLen Brown } 50895b482a8SLen Brown 5090dfaaa3dSBob Moore static void acpi_rs_out_integer32(const char *title, u32 value) 51095b482a8SLen Brown { 5111fad8738SBob Moore 51295b482a8SLen Brown acpi_os_printf("%27s : %8.8X\n", title, value); 51395b482a8SLen Brown } 51495b482a8SLen Brown 5150dfaaa3dSBob Moore static void acpi_rs_out_integer64(const char *title, u64 value) 51695b482a8SLen Brown { 5171fad8738SBob Moore 51895b482a8SLen Brown acpi_os_printf("%27s : %8.8X%8.8X\n", title, ACPI_FORMAT_UINT64(value)); 51995b482a8SLen Brown } 52095b482a8SLen Brown 5210dfaaa3dSBob Moore static void acpi_rs_out_title(const char *title) 52295b482a8SLen Brown { 5231fad8738SBob Moore 52495b482a8SLen Brown acpi_os_printf("%27s : ", title); 52595b482a8SLen Brown } 52695b482a8SLen Brown 52795b482a8SLen Brown /******************************************************************************* 52895b482a8SLen Brown * 52995b482a8SLen Brown * FUNCTION: acpi_rs_dump*List 53095b482a8SLen Brown * 531ba494beeSBob Moore * PARAMETERS: length - Number of elements in the list 532ba494beeSBob Moore * data - Start of the list 53395b482a8SLen Brown * 53495b482a8SLen Brown * RETURN: None 53595b482a8SLen Brown * 53695b482a8SLen Brown * DESCRIPTION: Miscellaneous functions to dump lists of raw data 53795b482a8SLen Brown * 53895b482a8SLen Brown ******************************************************************************/ 53995b482a8SLen Brown 54095b482a8SLen Brown static void acpi_rs_dump_byte_list(u16 length, u8 * data) 54195b482a8SLen Brown { 542*9df758d9SColin Ian King u16 i; 54395b482a8SLen Brown 54495b482a8SLen Brown for (i = 0; i < length; i++) { 54595b482a8SLen Brown acpi_os_printf("%25s%2.2X : %2.2X\n", "Byte", i, data[i]); 54695b482a8SLen Brown } 54795b482a8SLen Brown } 54895b482a8SLen Brown 54995b482a8SLen Brown static void acpi_rs_dump_short_byte_list(u8 length, u8 * data) 55095b482a8SLen Brown { 55195b482a8SLen Brown u8 i; 55295b482a8SLen Brown 55395b482a8SLen Brown for (i = 0; i < length; i++) { 55495b482a8SLen Brown acpi_os_printf("%X ", data[i]); 55595b482a8SLen Brown } 5561fad8738SBob Moore 55795b482a8SLen Brown acpi_os_printf("\n"); 55895b482a8SLen Brown } 55995b482a8SLen Brown 56095b482a8SLen Brown static void acpi_rs_dump_dword_list(u8 length, u32 * data) 56195b482a8SLen Brown { 56295b482a8SLen Brown u8 i; 56395b482a8SLen Brown 56495b482a8SLen Brown for (i = 0; i < length; i++) { 56595b482a8SLen Brown acpi_os_printf("%25s%2.2X : %8.8X\n", "Dword", i, data[i]); 56695b482a8SLen Brown } 56795b482a8SLen Brown } 56895b482a8SLen Brown 569e0fe0a8dSLin Ming static void acpi_rs_dump_word_list(u16 length, u16 *data) 570e0fe0a8dSLin Ming { 571e0fe0a8dSLin Ming u16 i; 572e0fe0a8dSLin Ming 573e0fe0a8dSLin Ming for (i = 0; i < length; i++) { 574e0fe0a8dSLin Ming acpi_os_printf("%25s%2.2X : %4.4X\n", "Word", i, data[i]); 575e0fe0a8dSLin Ming } 576e0fe0a8dSLin Ming } 577