195b482a8SLen Brown /******************************************************************************* 295b482a8SLen Brown * 395b482a8SLen Brown * Module Name: rsdump - Functions to display the resource structures. 495b482a8SLen Brown * 595b482a8SLen Brown ******************************************************************************/ 695b482a8SLen Brown 795b482a8SLen Brown /* 895b482a8SLen Brown * Copyright (C) 2000 - 2008, Intel Corp. 995b482a8SLen Brown * All rights reserved. 1095b482a8SLen Brown * 1195b482a8SLen Brown * Redistribution and use in source and binary forms, with or without 1295b482a8SLen Brown * modification, are permitted provided that the following conditions 1395b482a8SLen Brown * are met: 1495b482a8SLen Brown * 1. Redistributions of source code must retain the above copyright 1595b482a8SLen Brown * notice, this list of conditions, and the following disclaimer, 1695b482a8SLen Brown * without modification. 1795b482a8SLen Brown * 2. Redistributions in binary form must reproduce at minimum a disclaimer 1895b482a8SLen Brown * substantially similar to the "NO WARRANTY" disclaimer below 1995b482a8SLen Brown * ("Disclaimer") and any redistribution must be conditioned upon 2095b482a8SLen Brown * including a substantially similar Disclaimer requirement for further 2195b482a8SLen Brown * binary redistribution. 2295b482a8SLen Brown * 3. Neither the names of the above-listed copyright holders nor the names 2395b482a8SLen Brown * of any contributors may be used to endorse or promote products derived 2495b482a8SLen Brown * from this software without specific prior written permission. 2595b482a8SLen Brown * 2695b482a8SLen Brown * Alternatively, this software may be distributed under the terms of the 2795b482a8SLen Brown * GNU General Public License ("GPL") version 2 as published by the Free 2895b482a8SLen Brown * Software Foundation. 2995b482a8SLen Brown * 3095b482a8SLen Brown * NO WARRANTY 3195b482a8SLen Brown * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 3295b482a8SLen Brown * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 3395b482a8SLen Brown * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 3495b482a8SLen Brown * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 3595b482a8SLen Brown * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 3695b482a8SLen Brown * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 3795b482a8SLen Brown * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 3895b482a8SLen Brown * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 3995b482a8SLen Brown * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 4095b482a8SLen Brown * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 4195b482a8SLen Brown * POSSIBILITY OF SUCH DAMAGES. 4295b482a8SLen Brown */ 4395b482a8SLen Brown 4495b482a8SLen Brown #include <acpi/acpi.h> 45*e2f7a777SLen Brown #include "accommon.h" 46*e2f7a777SLen Brown #include "acresrc.h" 4795b482a8SLen Brown 4895b482a8SLen Brown #define _COMPONENT ACPI_RESOURCES 4995b482a8SLen Brown ACPI_MODULE_NAME("rsdump") 5095b482a8SLen Brown #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) 5195b482a8SLen Brown /* Local prototypes */ 5295b482a8SLen Brown static void acpi_rs_out_string(char *title, char *value); 5395b482a8SLen Brown 5495b482a8SLen Brown static void acpi_rs_out_integer8(char *title, u8 value); 5595b482a8SLen Brown 5695b482a8SLen Brown static void acpi_rs_out_integer16(char *title, u16 value); 5795b482a8SLen Brown 5895b482a8SLen Brown static void acpi_rs_out_integer32(char *title, u32 value); 5995b482a8SLen Brown 6095b482a8SLen Brown static void acpi_rs_out_integer64(char *title, u64 value); 6195b482a8SLen Brown 6295b482a8SLen Brown static void acpi_rs_out_title(char *title); 6395b482a8SLen Brown 6495b482a8SLen Brown static void acpi_rs_dump_byte_list(u16 length, u8 * data); 6595b482a8SLen Brown 6695b482a8SLen Brown static void acpi_rs_dump_dword_list(u8 length, u32 * data); 6795b482a8SLen Brown 6895b482a8SLen Brown static void acpi_rs_dump_short_byte_list(u8 length, u8 * data); 6995b482a8SLen Brown 7095b482a8SLen Brown static void 7195b482a8SLen Brown acpi_rs_dump_resource_source(struct acpi_resource_source *resource_source); 7295b482a8SLen Brown 7395b482a8SLen Brown static void acpi_rs_dump_address_common(union acpi_resource_data *resource); 7495b482a8SLen Brown 7595b482a8SLen Brown static void 7695b482a8SLen Brown acpi_rs_dump_descriptor(void *resource, struct acpi_rsdump_info *table); 7795b482a8SLen Brown 7895b482a8SLen Brown #define ACPI_RSD_OFFSET(f) (u8) ACPI_OFFSET (union acpi_resource_data,f) 7995b482a8SLen Brown #define ACPI_PRT_OFFSET(f) (u8) ACPI_OFFSET (struct acpi_pci_routing_table,f) 8095b482a8SLen Brown #define ACPI_RSD_TABLE_SIZE(name) (sizeof(name) / sizeof (struct acpi_rsdump_info)) 8195b482a8SLen Brown 8295b482a8SLen Brown /******************************************************************************* 8395b482a8SLen Brown * 8495b482a8SLen Brown * Resource Descriptor info tables 8595b482a8SLen Brown * 8695b482a8SLen Brown * Note: The first table entry must be a Title or Literal and must contain 8795b482a8SLen Brown * the table length (number of table entries) 8895b482a8SLen Brown * 8995b482a8SLen Brown ******************************************************************************/ 9095b482a8SLen Brown 9195b482a8SLen Brown struct acpi_rsdump_info acpi_rs_dump_irq[7] = { 9295b482a8SLen Brown {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_irq), "IRQ", NULL}, 9395b482a8SLen Brown {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(irq.descriptor_length), 9495b482a8SLen Brown "Descriptor Length", NULL}, 9595b482a8SLen Brown {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(irq.triggering), "Triggering", 9695b482a8SLen Brown acpi_gbl_he_decode}, 9795b482a8SLen Brown {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(irq.polarity), "Polarity", 9895b482a8SLen Brown acpi_gbl_ll_decode}, 9995b482a8SLen Brown {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(irq.sharable), "Sharing", 10095b482a8SLen Brown acpi_gbl_shr_decode}, 10195b482a8SLen Brown {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(irq.interrupt_count), 10295b482a8SLen Brown "Interrupt Count", NULL}, 10395b482a8SLen Brown {ACPI_RSD_SHORTLIST, ACPI_RSD_OFFSET(irq.interrupts[0]), 10495b482a8SLen Brown "Interrupt List", NULL} 10595b482a8SLen Brown }; 10695b482a8SLen Brown 10795b482a8SLen Brown struct acpi_rsdump_info acpi_rs_dump_dma[6] = { 10895b482a8SLen Brown {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_dma), "DMA", NULL}, 10995b482a8SLen Brown {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(dma.type), "Speed", 11095b482a8SLen Brown acpi_gbl_typ_decode}, 11195b482a8SLen Brown {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(dma.bus_master), "Mastering", 11295b482a8SLen Brown acpi_gbl_bm_decode}, 11395b482a8SLen Brown {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(dma.transfer), "Transfer Type", 11495b482a8SLen Brown acpi_gbl_siz_decode}, 11595b482a8SLen Brown {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(dma.channel_count), "Channel Count", 11695b482a8SLen Brown NULL}, 11795b482a8SLen Brown {ACPI_RSD_SHORTLIST, ACPI_RSD_OFFSET(dma.channels[0]), "Channel List", 11895b482a8SLen Brown NULL} 11995b482a8SLen Brown }; 12095b482a8SLen Brown 12195b482a8SLen Brown struct acpi_rsdump_info acpi_rs_dump_start_dpf[4] = { 12295b482a8SLen Brown {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_start_dpf), 12395b482a8SLen Brown "Start-Dependent-Functions", NULL}, 12495b482a8SLen Brown {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(start_dpf.descriptor_length), 12595b482a8SLen Brown "Descriptor Length", NULL}, 12695b482a8SLen Brown {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(start_dpf.compatibility_priority), 12795b482a8SLen Brown "Compatibility Priority", acpi_gbl_config_decode}, 12895b482a8SLen Brown {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(start_dpf.performance_robustness), 12995b482a8SLen Brown "Performance/Robustness", acpi_gbl_config_decode} 13095b482a8SLen Brown }; 13195b482a8SLen Brown 13295b482a8SLen Brown struct acpi_rsdump_info acpi_rs_dump_end_dpf[1] = { 13395b482a8SLen Brown {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_end_dpf), 13495b482a8SLen Brown "End-Dependent-Functions", NULL} 13595b482a8SLen Brown }; 13695b482a8SLen Brown 13795b482a8SLen Brown struct acpi_rsdump_info acpi_rs_dump_io[6] = { 13895b482a8SLen Brown {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_io), "I/O", NULL}, 13995b482a8SLen Brown {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(io.io_decode), "Address Decoding", 14095b482a8SLen Brown acpi_gbl_io_decode}, 14195b482a8SLen Brown {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(io.minimum), "Address Minimum", NULL}, 14295b482a8SLen Brown {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(io.maximum), "Address Maximum", NULL}, 14395b482a8SLen Brown {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(io.alignment), "Alignment", NULL}, 14495b482a8SLen Brown {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(io.address_length), "Address Length", 14595b482a8SLen Brown NULL} 14695b482a8SLen Brown }; 14795b482a8SLen Brown 14895b482a8SLen Brown struct acpi_rsdump_info acpi_rs_dump_fixed_io[3] = { 14995b482a8SLen Brown {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_fixed_io), 15095b482a8SLen Brown "Fixed I/O", NULL}, 15195b482a8SLen Brown {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(fixed_io.address), "Address", NULL}, 15295b482a8SLen Brown {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(fixed_io.address_length), 15395b482a8SLen Brown "Address Length", NULL} 15495b482a8SLen Brown }; 15595b482a8SLen Brown 15695b482a8SLen Brown struct acpi_rsdump_info acpi_rs_dump_vendor[3] = { 15795b482a8SLen Brown {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_vendor), 15895b482a8SLen Brown "Vendor Specific", NULL}, 15995b482a8SLen Brown {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(vendor.byte_length), "Length", NULL}, 16095b482a8SLen Brown {ACPI_RSD_LONGLIST, ACPI_RSD_OFFSET(vendor.byte_data[0]), "Vendor Data", 16195b482a8SLen Brown NULL} 16295b482a8SLen Brown }; 16395b482a8SLen Brown 16495b482a8SLen Brown struct acpi_rsdump_info acpi_rs_dump_end_tag[1] = { 16595b482a8SLen Brown {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_end_tag), "EndTag", 16695b482a8SLen Brown NULL} 16795b482a8SLen Brown }; 16895b482a8SLen Brown 16995b482a8SLen Brown struct acpi_rsdump_info acpi_rs_dump_memory24[6] = { 17095b482a8SLen Brown {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_memory24), 17195b482a8SLen Brown "24-Bit Memory Range", NULL}, 17295b482a8SLen Brown {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(memory24.write_protect), 17395b482a8SLen Brown "Write Protect", acpi_gbl_rw_decode}, 17495b482a8SLen Brown {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(memory24.minimum), "Address Minimum", 17595b482a8SLen Brown NULL}, 17695b482a8SLen Brown {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(memory24.maximum), "Address Maximum", 17795b482a8SLen Brown NULL}, 17895b482a8SLen Brown {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(memory24.alignment), "Alignment", 17995b482a8SLen Brown NULL}, 18095b482a8SLen Brown {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(memory24.address_length), 18195b482a8SLen Brown "Address Length", NULL} 18295b482a8SLen Brown }; 18395b482a8SLen Brown 18495b482a8SLen Brown struct acpi_rsdump_info acpi_rs_dump_memory32[6] = { 18595b482a8SLen Brown {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_memory32), 18695b482a8SLen Brown "32-Bit Memory Range", NULL}, 18795b482a8SLen Brown {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(memory32.write_protect), 18895b482a8SLen Brown "Write Protect", acpi_gbl_rw_decode}, 18995b482a8SLen Brown {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(memory32.minimum), "Address Minimum", 19095b482a8SLen Brown NULL}, 19195b482a8SLen Brown {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(memory32.maximum), "Address Maximum", 19295b482a8SLen Brown NULL}, 19395b482a8SLen Brown {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(memory32.alignment), "Alignment", 19495b482a8SLen Brown NULL}, 19595b482a8SLen Brown {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(memory32.address_length), 19695b482a8SLen Brown "Address Length", NULL} 19795b482a8SLen Brown }; 19895b482a8SLen Brown 19995b482a8SLen Brown struct acpi_rsdump_info acpi_rs_dump_fixed_memory32[4] = { 20095b482a8SLen Brown {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_fixed_memory32), 20195b482a8SLen Brown "32-Bit Fixed Memory Range", NULL}, 20295b482a8SLen Brown {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(fixed_memory32.write_protect), 20395b482a8SLen Brown "Write Protect", acpi_gbl_rw_decode}, 20495b482a8SLen Brown {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(fixed_memory32.address), "Address", 20595b482a8SLen Brown NULL}, 20695b482a8SLen Brown {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(fixed_memory32.address_length), 20795b482a8SLen Brown "Address Length", NULL} 20895b482a8SLen Brown }; 20995b482a8SLen Brown 21095b482a8SLen Brown struct acpi_rsdump_info acpi_rs_dump_address16[8] = { 21195b482a8SLen Brown {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_address16), 21295b482a8SLen Brown "16-Bit WORD Address Space", NULL}, 21395b482a8SLen Brown {ACPI_RSD_ADDRESS, 0, NULL, NULL}, 21495b482a8SLen Brown {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(address16.granularity), "Granularity", 21595b482a8SLen Brown NULL}, 21695b482a8SLen Brown {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(address16.minimum), "Address Minimum", 21795b482a8SLen Brown NULL}, 21895b482a8SLen Brown {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(address16.maximum), "Address Maximum", 21995b482a8SLen Brown NULL}, 22095b482a8SLen Brown {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(address16.translation_offset), 22195b482a8SLen Brown "Translation Offset", NULL}, 22295b482a8SLen Brown {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(address16.address_length), 22395b482a8SLen Brown "Address Length", NULL}, 22495b482a8SLen Brown {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET(address16.resource_source), NULL, NULL} 22595b482a8SLen Brown }; 22695b482a8SLen Brown 22795b482a8SLen Brown struct acpi_rsdump_info acpi_rs_dump_address32[8] = { 22895b482a8SLen Brown {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_address32), 22995b482a8SLen Brown "32-Bit DWORD Address Space", NULL}, 23095b482a8SLen Brown {ACPI_RSD_ADDRESS, 0, NULL, NULL}, 23195b482a8SLen Brown {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(address32.granularity), "Granularity", 23295b482a8SLen Brown NULL}, 23395b482a8SLen Brown {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(address32.minimum), "Address Minimum", 23495b482a8SLen Brown NULL}, 23595b482a8SLen Brown {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(address32.maximum), "Address Maximum", 23695b482a8SLen Brown NULL}, 23795b482a8SLen Brown {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(address32.translation_offset), 23895b482a8SLen Brown "Translation Offset", NULL}, 23995b482a8SLen Brown {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(address32.address_length), 24095b482a8SLen Brown "Address Length", NULL}, 24195b482a8SLen Brown {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET(address32.resource_source), NULL, NULL} 24295b482a8SLen Brown }; 24395b482a8SLen Brown 24495b482a8SLen Brown struct acpi_rsdump_info acpi_rs_dump_address64[8] = { 24595b482a8SLen Brown {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_address64), 24695b482a8SLen Brown "64-Bit QWORD Address Space", NULL}, 24795b482a8SLen Brown {ACPI_RSD_ADDRESS, 0, NULL, NULL}, 24895b482a8SLen Brown {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(address64.granularity), "Granularity", 24995b482a8SLen Brown NULL}, 25095b482a8SLen Brown {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(address64.minimum), "Address Minimum", 25195b482a8SLen Brown NULL}, 25295b482a8SLen Brown {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(address64.maximum), "Address Maximum", 25395b482a8SLen Brown NULL}, 25495b482a8SLen Brown {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(address64.translation_offset), 25595b482a8SLen Brown "Translation Offset", NULL}, 25695b482a8SLen Brown {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(address64.address_length), 25795b482a8SLen Brown "Address Length", NULL}, 25895b482a8SLen Brown {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET(address64.resource_source), NULL, NULL} 25995b482a8SLen Brown }; 26095b482a8SLen Brown 26195b482a8SLen Brown struct acpi_rsdump_info acpi_rs_dump_ext_address64[8] = { 26295b482a8SLen Brown {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_ext_address64), 26395b482a8SLen Brown "64-Bit Extended Address Space", NULL}, 26495b482a8SLen Brown {ACPI_RSD_ADDRESS, 0, NULL, NULL}, 26595b482a8SLen Brown {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(ext_address64.granularity), 26695b482a8SLen Brown "Granularity", NULL}, 26795b482a8SLen Brown {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(ext_address64.minimum), 26895b482a8SLen Brown "Address Minimum", NULL}, 26995b482a8SLen Brown {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(ext_address64.maximum), 27095b482a8SLen Brown "Address Maximum", NULL}, 27195b482a8SLen Brown {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(ext_address64.translation_offset), 27295b482a8SLen Brown "Translation Offset", NULL}, 27395b482a8SLen Brown {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(ext_address64.address_length), 27495b482a8SLen Brown "Address Length", NULL}, 27595b482a8SLen Brown {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(ext_address64.type_specific), 27695b482a8SLen Brown "Type-Specific Attribute", NULL} 27795b482a8SLen Brown }; 27895b482a8SLen Brown 27995b482a8SLen Brown struct acpi_rsdump_info acpi_rs_dump_ext_irq[8] = { 28095b482a8SLen Brown {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_ext_irq), 28195b482a8SLen Brown "Extended IRQ", NULL}, 28295b482a8SLen Brown {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(extended_irq.producer_consumer), 28395b482a8SLen Brown "Type", acpi_gbl_consume_decode}, 28495b482a8SLen Brown {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(extended_irq.triggering), 28595b482a8SLen Brown "Triggering", acpi_gbl_he_decode}, 28695b482a8SLen Brown {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(extended_irq.polarity), "Polarity", 28795b482a8SLen Brown acpi_gbl_ll_decode}, 28895b482a8SLen Brown {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(extended_irq.sharable), "Sharing", 28995b482a8SLen Brown acpi_gbl_shr_decode}, 29095b482a8SLen Brown {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET(extended_irq.resource_source), NULL, 29195b482a8SLen Brown NULL}, 29295b482a8SLen Brown {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(extended_irq.interrupt_count), 29395b482a8SLen Brown "Interrupt Count", NULL}, 29495b482a8SLen Brown {ACPI_RSD_DWORDLIST, ACPI_RSD_OFFSET(extended_irq.interrupts[0]), 29595b482a8SLen Brown "Interrupt List", NULL} 29695b482a8SLen Brown }; 29795b482a8SLen Brown 29895b482a8SLen Brown struct acpi_rsdump_info acpi_rs_dump_generic_reg[6] = { 29995b482a8SLen Brown {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_generic_reg), 30095b482a8SLen Brown "Generic Register", NULL}, 30195b482a8SLen Brown {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(generic_reg.space_id), "Space ID", 30295b482a8SLen Brown NULL}, 30395b482a8SLen Brown {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(generic_reg.bit_width), "Bit Width", 30495b482a8SLen Brown NULL}, 30595b482a8SLen Brown {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(generic_reg.bit_offset), "Bit Offset", 30695b482a8SLen Brown NULL}, 30795b482a8SLen Brown {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(generic_reg.access_size), 30895b482a8SLen Brown "Access Size", NULL}, 30995b482a8SLen Brown {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(generic_reg.address), "Address", NULL} 31095b482a8SLen Brown }; 31195b482a8SLen Brown 31295b482a8SLen Brown /* 31395b482a8SLen Brown * Tables used for common address descriptor flag fields 31495b482a8SLen Brown */ 31595b482a8SLen Brown static struct acpi_rsdump_info acpi_rs_dump_general_flags[5] = { 31695b482a8SLen Brown {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_general_flags), NULL, 31795b482a8SLen Brown NULL}, 31895b482a8SLen Brown {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.producer_consumer), 31995b482a8SLen Brown "Consumer/Producer", acpi_gbl_consume_decode}, 32095b482a8SLen Brown {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.decode), "Address Decode", 32195b482a8SLen Brown acpi_gbl_dec_decode}, 32295b482a8SLen Brown {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.min_address_fixed), 32395b482a8SLen Brown "Min Relocatability", acpi_gbl_min_decode}, 32495b482a8SLen Brown {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.max_address_fixed), 32595b482a8SLen Brown "Max Relocatability", acpi_gbl_max_decode} 32695b482a8SLen Brown }; 32795b482a8SLen Brown 32895b482a8SLen Brown static struct acpi_rsdump_info acpi_rs_dump_memory_flags[5] = { 32995b482a8SLen Brown {ACPI_RSD_LITERAL, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_memory_flags), 33095b482a8SLen Brown "Resource Type", (void *)"Memory Range"}, 33195b482a8SLen Brown {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.info.mem.write_protect), 33295b482a8SLen Brown "Write Protect", acpi_gbl_rw_decode}, 33395b482a8SLen Brown {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(address.info.mem.caching), 33495b482a8SLen Brown "Caching", acpi_gbl_mem_decode}, 33595b482a8SLen Brown {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(address.info.mem.range_type), 33695b482a8SLen Brown "Range Type", acpi_gbl_mtp_decode}, 33795b482a8SLen Brown {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.info.mem.translation), 33895b482a8SLen Brown "Translation", acpi_gbl_ttp_decode} 33995b482a8SLen Brown }; 34095b482a8SLen Brown 34195b482a8SLen Brown static struct acpi_rsdump_info acpi_rs_dump_io_flags[4] = { 34295b482a8SLen Brown {ACPI_RSD_LITERAL, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_io_flags), 34395b482a8SLen Brown "Resource Type", (void *)"I/O Range"}, 34495b482a8SLen Brown {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(address.info.io.range_type), 34595b482a8SLen Brown "Range Type", acpi_gbl_rng_decode}, 34695b482a8SLen Brown {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.info.io.translation), 34795b482a8SLen Brown "Translation", acpi_gbl_ttp_decode}, 34895b482a8SLen Brown {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.info.io.translation_type), 34995b482a8SLen Brown "Translation Type", acpi_gbl_trs_decode} 35095b482a8SLen Brown }; 35195b482a8SLen Brown 35295b482a8SLen Brown /* 35395b482a8SLen Brown * Table used to dump _PRT contents 35495b482a8SLen Brown */ 35595b482a8SLen Brown static struct acpi_rsdump_info acpi_rs_dump_prt[5] = { 35695b482a8SLen Brown {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_prt), NULL, NULL}, 35795b482a8SLen Brown {ACPI_RSD_UINT64, ACPI_PRT_OFFSET(address), "Address", NULL}, 35895b482a8SLen Brown {ACPI_RSD_UINT32, ACPI_PRT_OFFSET(pin), "Pin", NULL}, 35995b482a8SLen Brown {ACPI_RSD_STRING, ACPI_PRT_OFFSET(source[0]), "Source", NULL}, 36095b482a8SLen Brown {ACPI_RSD_UINT32, ACPI_PRT_OFFSET(source_index), "Source Index", NULL} 36195b482a8SLen Brown }; 36295b482a8SLen Brown 36395b482a8SLen Brown /******************************************************************************* 36495b482a8SLen Brown * 36595b482a8SLen Brown * FUNCTION: acpi_rs_dump_descriptor 36695b482a8SLen Brown * 36795b482a8SLen Brown * PARAMETERS: Resource 36895b482a8SLen Brown * 36995b482a8SLen Brown * RETURN: None 37095b482a8SLen Brown * 37195b482a8SLen Brown * DESCRIPTION: 37295b482a8SLen Brown * 37395b482a8SLen Brown ******************************************************************************/ 37495b482a8SLen Brown 37595b482a8SLen Brown static void 37695b482a8SLen Brown acpi_rs_dump_descriptor(void *resource, struct acpi_rsdump_info *table) 37795b482a8SLen Brown { 37895b482a8SLen Brown u8 *target = NULL; 37995b482a8SLen Brown u8 *previous_target; 38095b482a8SLen Brown char *name; 38195b482a8SLen Brown u8 count; 38295b482a8SLen Brown 38395b482a8SLen Brown /* First table entry must contain the table length (# of table entries) */ 38495b482a8SLen Brown 38595b482a8SLen Brown count = table->offset; 38695b482a8SLen Brown 38795b482a8SLen Brown while (count) { 38895b482a8SLen Brown previous_target = target; 38995b482a8SLen Brown target = ACPI_ADD_PTR(u8, resource, table->offset); 39095b482a8SLen Brown name = table->name; 39195b482a8SLen Brown 39295b482a8SLen Brown switch (table->opcode) { 39395b482a8SLen Brown case ACPI_RSD_TITLE: 39495b482a8SLen Brown /* 39595b482a8SLen Brown * Optional resource title 39695b482a8SLen Brown */ 39795b482a8SLen Brown if (table->name) { 39895b482a8SLen Brown acpi_os_printf("%s Resource\n", name); 39995b482a8SLen Brown } 40095b482a8SLen Brown break; 40195b482a8SLen Brown 40295b482a8SLen Brown /* Strings */ 40395b482a8SLen Brown 40495b482a8SLen Brown case ACPI_RSD_LITERAL: 40595b482a8SLen Brown acpi_rs_out_string(name, 40695b482a8SLen Brown ACPI_CAST_PTR(char, table->pointer)); 40795b482a8SLen Brown break; 40895b482a8SLen Brown 40995b482a8SLen Brown case ACPI_RSD_STRING: 41095b482a8SLen Brown acpi_rs_out_string(name, ACPI_CAST_PTR(char, target)); 41195b482a8SLen Brown break; 41295b482a8SLen Brown 41395b482a8SLen Brown /* Data items, 8/16/32/64 bit */ 41495b482a8SLen Brown 41595b482a8SLen Brown case ACPI_RSD_UINT8: 41695b482a8SLen Brown acpi_rs_out_integer8(name, ACPI_GET8(target)); 41795b482a8SLen Brown break; 41895b482a8SLen Brown 41995b482a8SLen Brown case ACPI_RSD_UINT16: 42095b482a8SLen Brown acpi_rs_out_integer16(name, ACPI_GET16(target)); 42195b482a8SLen Brown break; 42295b482a8SLen Brown 42395b482a8SLen Brown case ACPI_RSD_UINT32: 42495b482a8SLen Brown acpi_rs_out_integer32(name, ACPI_GET32(target)); 42595b482a8SLen Brown break; 42695b482a8SLen Brown 42795b482a8SLen Brown case ACPI_RSD_UINT64: 42895b482a8SLen Brown acpi_rs_out_integer64(name, ACPI_GET64(target)); 42995b482a8SLen Brown break; 43095b482a8SLen Brown 43195b482a8SLen Brown /* Flags: 1-bit and 2-bit flags supported */ 43295b482a8SLen Brown 43395b482a8SLen Brown case ACPI_RSD_1BITFLAG: 43495b482a8SLen Brown acpi_rs_out_string(name, ACPI_CAST_PTR(char, 43595b482a8SLen Brown table-> 43695b482a8SLen Brown pointer[*target & 43795b482a8SLen Brown 0x01])); 43895b482a8SLen Brown break; 43995b482a8SLen Brown 44095b482a8SLen Brown case ACPI_RSD_2BITFLAG: 44195b482a8SLen Brown acpi_rs_out_string(name, ACPI_CAST_PTR(char, 44295b482a8SLen Brown table-> 44395b482a8SLen Brown pointer[*target & 44495b482a8SLen Brown 0x03])); 44595b482a8SLen Brown break; 44695b482a8SLen Brown 44795b482a8SLen Brown case ACPI_RSD_SHORTLIST: 44895b482a8SLen Brown /* 44995b482a8SLen Brown * Short byte list (single line output) for DMA and IRQ resources 45095b482a8SLen Brown * Note: The list length is obtained from the previous table entry 45195b482a8SLen Brown */ 45295b482a8SLen Brown if (previous_target) { 45395b482a8SLen Brown acpi_rs_out_title(name); 45495b482a8SLen Brown acpi_rs_dump_short_byte_list(*previous_target, 45595b482a8SLen Brown target); 45695b482a8SLen Brown } 45795b482a8SLen Brown break; 45895b482a8SLen Brown 45995b482a8SLen Brown case ACPI_RSD_LONGLIST: 46095b482a8SLen Brown /* 46195b482a8SLen Brown * Long byte list for Vendor resource data 46295b482a8SLen Brown * Note: The list length is obtained from the previous table entry 46395b482a8SLen Brown */ 46495b482a8SLen Brown if (previous_target) { 46595b482a8SLen Brown acpi_rs_dump_byte_list(ACPI_GET16 46695b482a8SLen Brown (previous_target), 46795b482a8SLen Brown target); 46895b482a8SLen Brown } 46995b482a8SLen Brown break; 47095b482a8SLen Brown 47195b482a8SLen Brown case ACPI_RSD_DWORDLIST: 47295b482a8SLen Brown /* 47395b482a8SLen Brown * Dword list for Extended Interrupt resources 47495b482a8SLen Brown * Note: The list length is obtained from the previous table entry 47595b482a8SLen Brown */ 47695b482a8SLen Brown if (previous_target) { 47795b482a8SLen Brown acpi_rs_dump_dword_list(*previous_target, 47895b482a8SLen Brown ACPI_CAST_PTR(u32, 47995b482a8SLen Brown target)); 48095b482a8SLen Brown } 48195b482a8SLen Brown break; 48295b482a8SLen Brown 48395b482a8SLen Brown case ACPI_RSD_ADDRESS: 48495b482a8SLen Brown /* 48595b482a8SLen Brown * Common flags for all Address resources 48695b482a8SLen Brown */ 48795b482a8SLen Brown acpi_rs_dump_address_common(ACPI_CAST_PTR 48895b482a8SLen Brown (union acpi_resource_data, 48995b482a8SLen Brown target)); 49095b482a8SLen Brown break; 49195b482a8SLen Brown 49295b482a8SLen Brown case ACPI_RSD_SOURCE: 49395b482a8SLen Brown /* 49495b482a8SLen Brown * Optional resource_source for Address resources 49595b482a8SLen Brown */ 49695b482a8SLen Brown acpi_rs_dump_resource_source(ACPI_CAST_PTR(struct 49795b482a8SLen Brown acpi_resource_source, 49895b482a8SLen Brown target)); 49995b482a8SLen Brown break; 50095b482a8SLen Brown 50195b482a8SLen Brown default: 50295b482a8SLen Brown acpi_os_printf("**** Invalid table opcode [%X] ****\n", 50395b482a8SLen Brown table->opcode); 50495b482a8SLen Brown return; 50595b482a8SLen Brown } 50695b482a8SLen Brown 50795b482a8SLen Brown table++; 50895b482a8SLen Brown count--; 50995b482a8SLen Brown } 51095b482a8SLen Brown } 51195b482a8SLen Brown 51295b482a8SLen Brown /******************************************************************************* 51395b482a8SLen Brown * 51495b482a8SLen Brown * FUNCTION: acpi_rs_dump_resource_source 51595b482a8SLen Brown * 51695b482a8SLen Brown * PARAMETERS: resource_source - Pointer to a Resource Source struct 51795b482a8SLen Brown * 51895b482a8SLen Brown * RETURN: None 51995b482a8SLen Brown * 52095b482a8SLen Brown * DESCRIPTION: Common routine for dumping the optional resource_source and the 52195b482a8SLen Brown * corresponding resource_source_index. 52295b482a8SLen Brown * 52395b482a8SLen Brown ******************************************************************************/ 52495b482a8SLen Brown 52595b482a8SLen Brown static void 52695b482a8SLen Brown acpi_rs_dump_resource_source(struct acpi_resource_source *resource_source) 52795b482a8SLen Brown { 52895b482a8SLen Brown ACPI_FUNCTION_ENTRY(); 52995b482a8SLen Brown 53095b482a8SLen Brown if (resource_source->index == 0xFF) { 53195b482a8SLen Brown return; 53295b482a8SLen Brown } 53395b482a8SLen Brown 53495b482a8SLen Brown acpi_rs_out_integer8("Resource Source Index", resource_source->index); 53595b482a8SLen Brown 53695b482a8SLen Brown acpi_rs_out_string("Resource Source", 53795b482a8SLen Brown resource_source->string_ptr ? 53895b482a8SLen Brown resource_source->string_ptr : "[Not Specified]"); 53995b482a8SLen Brown } 54095b482a8SLen Brown 54195b482a8SLen Brown /******************************************************************************* 54295b482a8SLen Brown * 54395b482a8SLen Brown * FUNCTION: acpi_rs_dump_address_common 54495b482a8SLen Brown * 54595b482a8SLen Brown * PARAMETERS: Resource - Pointer to an internal resource descriptor 54695b482a8SLen Brown * 54795b482a8SLen Brown * RETURN: None 54895b482a8SLen Brown * 54995b482a8SLen Brown * DESCRIPTION: Dump the fields that are common to all Address resource 55095b482a8SLen Brown * descriptors 55195b482a8SLen Brown * 55295b482a8SLen Brown ******************************************************************************/ 55395b482a8SLen Brown 55495b482a8SLen Brown static void acpi_rs_dump_address_common(union acpi_resource_data *resource) 55595b482a8SLen Brown { 55695b482a8SLen Brown ACPI_FUNCTION_ENTRY(); 55795b482a8SLen Brown 55895b482a8SLen Brown /* Decode the type-specific flags */ 55995b482a8SLen Brown 56095b482a8SLen Brown switch (resource->address.resource_type) { 56195b482a8SLen Brown case ACPI_MEMORY_RANGE: 56295b482a8SLen Brown 56395b482a8SLen Brown acpi_rs_dump_descriptor(resource, acpi_rs_dump_memory_flags); 56495b482a8SLen Brown break; 56595b482a8SLen Brown 56695b482a8SLen Brown case ACPI_IO_RANGE: 56795b482a8SLen Brown 56895b482a8SLen Brown acpi_rs_dump_descriptor(resource, acpi_rs_dump_io_flags); 56995b482a8SLen Brown break; 57095b482a8SLen Brown 57195b482a8SLen Brown case ACPI_BUS_NUMBER_RANGE: 57295b482a8SLen Brown 57395b482a8SLen Brown acpi_rs_out_string("Resource Type", "Bus Number Range"); 57495b482a8SLen Brown break; 57595b482a8SLen Brown 57695b482a8SLen Brown default: 57795b482a8SLen Brown 57895b482a8SLen Brown acpi_rs_out_integer8("Resource Type", 57995b482a8SLen Brown (u8) resource->address.resource_type); 58095b482a8SLen Brown break; 58195b482a8SLen Brown } 58295b482a8SLen Brown 58395b482a8SLen Brown /* Decode the general flags */ 58495b482a8SLen Brown 58595b482a8SLen Brown acpi_rs_dump_descriptor(resource, acpi_rs_dump_general_flags); 58695b482a8SLen Brown } 58795b482a8SLen Brown 58895b482a8SLen Brown /******************************************************************************* 58995b482a8SLen Brown * 59095b482a8SLen Brown * FUNCTION: acpi_rs_dump_resource_list 59195b482a8SLen Brown * 59295b482a8SLen Brown * PARAMETERS: resource_list - Pointer to a resource descriptor list 59395b482a8SLen Brown * 59495b482a8SLen Brown * RETURN: None 59595b482a8SLen Brown * 59695b482a8SLen Brown * DESCRIPTION: Dispatches the structure to the correct dump routine. 59795b482a8SLen Brown * 59895b482a8SLen Brown ******************************************************************************/ 59995b482a8SLen Brown 60095b482a8SLen Brown void acpi_rs_dump_resource_list(struct acpi_resource *resource_list) 60195b482a8SLen Brown { 60295b482a8SLen Brown u32 count = 0; 60395b482a8SLen Brown u32 type; 60495b482a8SLen Brown 60595b482a8SLen Brown ACPI_FUNCTION_ENTRY(); 60695b482a8SLen Brown 60795b482a8SLen Brown if (!(acpi_dbg_level & ACPI_LV_RESOURCES) 60895b482a8SLen Brown || !(_COMPONENT & acpi_dbg_layer)) { 60995b482a8SLen Brown return; 61095b482a8SLen Brown } 61195b482a8SLen Brown 61295b482a8SLen Brown /* Walk list and dump all resource descriptors (END_TAG terminates) */ 61395b482a8SLen Brown 61495b482a8SLen Brown do { 61595b482a8SLen Brown acpi_os_printf("\n[%02X] ", count); 61695b482a8SLen Brown count++; 61795b482a8SLen Brown 61895b482a8SLen Brown /* Validate Type before dispatch */ 61995b482a8SLen Brown 62095b482a8SLen Brown type = resource_list->type; 62195b482a8SLen Brown if (type > ACPI_RESOURCE_TYPE_MAX) { 62295b482a8SLen Brown acpi_os_printf 62395b482a8SLen Brown ("Invalid descriptor type (%X) in resource list\n", 62495b482a8SLen Brown resource_list->type); 62595b482a8SLen Brown return; 62695b482a8SLen Brown } 62795b482a8SLen Brown 62895b482a8SLen Brown /* Dump the resource descriptor */ 62995b482a8SLen Brown 63095b482a8SLen Brown acpi_rs_dump_descriptor(&resource_list->data, 63195b482a8SLen Brown acpi_gbl_dump_resource_dispatch[type]); 63295b482a8SLen Brown 63395b482a8SLen Brown /* Point to the next resource structure */ 63495b482a8SLen Brown 63595b482a8SLen Brown resource_list = 63695b482a8SLen Brown ACPI_ADD_PTR(struct acpi_resource, resource_list, 63795b482a8SLen Brown resource_list->length); 63895b482a8SLen Brown 63995b482a8SLen Brown /* Exit when END_TAG descriptor is reached */ 64095b482a8SLen Brown 64195b482a8SLen Brown } while (type != ACPI_RESOURCE_TYPE_END_TAG); 64295b482a8SLen Brown } 64395b482a8SLen Brown 64495b482a8SLen Brown /******************************************************************************* 64595b482a8SLen Brown * 64695b482a8SLen Brown * FUNCTION: acpi_rs_dump_irq_list 64795b482a8SLen Brown * 64895b482a8SLen Brown * PARAMETERS: route_table - Pointer to the routing table to dump. 64995b482a8SLen Brown * 65095b482a8SLen Brown * RETURN: None 65195b482a8SLen Brown * 65295b482a8SLen Brown * DESCRIPTION: Print IRQ routing table 65395b482a8SLen Brown * 65495b482a8SLen Brown ******************************************************************************/ 65595b482a8SLen Brown 65695b482a8SLen Brown void acpi_rs_dump_irq_list(u8 * route_table) 65795b482a8SLen Brown { 65895b482a8SLen Brown struct acpi_pci_routing_table *prt_element; 65995b482a8SLen Brown u8 count; 66095b482a8SLen Brown 66195b482a8SLen Brown ACPI_FUNCTION_ENTRY(); 66295b482a8SLen Brown 66395b482a8SLen Brown if (!(acpi_dbg_level & ACPI_LV_RESOURCES) 66495b482a8SLen Brown || !(_COMPONENT & acpi_dbg_layer)) { 66595b482a8SLen Brown return; 66695b482a8SLen Brown } 66795b482a8SLen Brown 66895b482a8SLen Brown prt_element = ACPI_CAST_PTR(struct acpi_pci_routing_table, route_table); 66995b482a8SLen Brown 67095b482a8SLen Brown /* Dump all table elements, Exit on zero length element */ 67195b482a8SLen Brown 67295b482a8SLen Brown for (count = 0; prt_element->length; count++) { 67395b482a8SLen Brown acpi_os_printf("\n[%02X] PCI IRQ Routing Table Package\n", 67495b482a8SLen Brown count); 67595b482a8SLen Brown acpi_rs_dump_descriptor(prt_element, acpi_rs_dump_prt); 67695b482a8SLen Brown 67795b482a8SLen Brown prt_element = ACPI_ADD_PTR(struct acpi_pci_routing_table, 67895b482a8SLen Brown prt_element, prt_element->length); 67995b482a8SLen Brown } 68095b482a8SLen Brown } 68195b482a8SLen Brown 68295b482a8SLen Brown /******************************************************************************* 68395b482a8SLen Brown * 68495b482a8SLen Brown * FUNCTION: acpi_rs_out* 68595b482a8SLen Brown * 68695b482a8SLen Brown * PARAMETERS: Title - Name of the resource field 68795b482a8SLen Brown * Value - Value of the resource field 68895b482a8SLen Brown * 68995b482a8SLen Brown * RETURN: None 69095b482a8SLen Brown * 69195b482a8SLen Brown * DESCRIPTION: Miscellaneous helper functions to consistently format the 69295b482a8SLen Brown * output of the resource dump routines 69395b482a8SLen Brown * 69495b482a8SLen Brown ******************************************************************************/ 69595b482a8SLen Brown 69695b482a8SLen Brown static void acpi_rs_out_string(char *title, char *value) 69795b482a8SLen Brown { 69895b482a8SLen Brown acpi_os_printf("%27s : %s", title, value); 69995b482a8SLen Brown if (!*value) { 70095b482a8SLen Brown acpi_os_printf("[NULL NAMESTRING]"); 70195b482a8SLen Brown } 70295b482a8SLen Brown acpi_os_printf("\n"); 70395b482a8SLen Brown } 70495b482a8SLen Brown 70595b482a8SLen Brown static void acpi_rs_out_integer8(char *title, u8 value) 70695b482a8SLen Brown { 70795b482a8SLen Brown acpi_os_printf("%27s : %2.2X\n", title, value); 70895b482a8SLen Brown } 70995b482a8SLen Brown 71095b482a8SLen Brown static void acpi_rs_out_integer16(char *title, u16 value) 71195b482a8SLen Brown { 71295b482a8SLen Brown acpi_os_printf("%27s : %4.4X\n", title, value); 71395b482a8SLen Brown } 71495b482a8SLen Brown 71595b482a8SLen Brown static void acpi_rs_out_integer32(char *title, u32 value) 71695b482a8SLen Brown { 71795b482a8SLen Brown acpi_os_printf("%27s : %8.8X\n", title, value); 71895b482a8SLen Brown } 71995b482a8SLen Brown 72095b482a8SLen Brown static void acpi_rs_out_integer64(char *title, u64 value) 72195b482a8SLen Brown { 72295b482a8SLen Brown acpi_os_printf("%27s : %8.8X%8.8X\n", title, ACPI_FORMAT_UINT64(value)); 72395b482a8SLen Brown } 72495b482a8SLen Brown 72595b482a8SLen Brown static void acpi_rs_out_title(char *title) 72695b482a8SLen Brown { 72795b482a8SLen Brown acpi_os_printf("%27s : ", title); 72895b482a8SLen Brown } 72995b482a8SLen Brown 73095b482a8SLen Brown /******************************************************************************* 73195b482a8SLen Brown * 73295b482a8SLen Brown * FUNCTION: acpi_rs_dump*List 73395b482a8SLen Brown * 73495b482a8SLen Brown * PARAMETERS: Length - Number of elements in the list 73595b482a8SLen Brown * Data - Start of the list 73695b482a8SLen Brown * 73795b482a8SLen Brown * RETURN: None 73895b482a8SLen Brown * 73995b482a8SLen Brown * DESCRIPTION: Miscellaneous functions to dump lists of raw data 74095b482a8SLen Brown * 74195b482a8SLen Brown ******************************************************************************/ 74295b482a8SLen Brown 74395b482a8SLen Brown static void acpi_rs_dump_byte_list(u16 length, u8 * data) 74495b482a8SLen Brown { 74595b482a8SLen Brown u8 i; 74695b482a8SLen Brown 74795b482a8SLen Brown for (i = 0; i < length; i++) { 74895b482a8SLen Brown acpi_os_printf("%25s%2.2X : %2.2X\n", "Byte", i, data[i]); 74995b482a8SLen Brown } 75095b482a8SLen Brown } 75195b482a8SLen Brown 75295b482a8SLen Brown static void acpi_rs_dump_short_byte_list(u8 length, u8 * data) 75395b482a8SLen Brown { 75495b482a8SLen Brown u8 i; 75595b482a8SLen Brown 75695b482a8SLen Brown for (i = 0; i < length; i++) { 75795b482a8SLen Brown acpi_os_printf("%X ", data[i]); 75895b482a8SLen Brown } 75995b482a8SLen Brown acpi_os_printf("\n"); 76095b482a8SLen Brown } 76195b482a8SLen Brown 76295b482a8SLen Brown static void acpi_rs_dump_dword_list(u8 length, u32 * data) 76395b482a8SLen Brown { 76495b482a8SLen Brown u8 i; 76595b482a8SLen Brown 76695b482a8SLen Brown for (i = 0; i < length; i++) { 76795b482a8SLen Brown acpi_os_printf("%25s%2.2X : %8.8X\n", "Dword", i, data[i]); 76895b482a8SLen Brown } 76995b482a8SLen Brown } 77095b482a8SLen Brown 77195b482a8SLen Brown #endif 772