rsdump.c 30.8 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3 4 5 6 7
/*******************************************************************************
 *
 * Module Name: rsdump - Functions to display the resource structures.
 *
 ******************************************************************************/

/*
8
 * Copyright (C) 2000 - 2011, Intel Corp.
L
Linus Torvalds 已提交
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions, and the following disclaimer,
 *    without modification.
 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
 *    substantially similar to the "NO WARRANTY" disclaimer below
 *    ("Disclaimer") and any redistribution must be conditioned upon
 *    including a substantially similar Disclaimer requirement for further
 *    binary redistribution.
 * 3. Neither the names of the above-listed copyright holders nor the names
 *    of any contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 * Alternatively, this software may be distributed under the terms of the
 * GNU General Public License ("GPL") version 2 as published by the Free
 * Software Foundation.
 *
 * NO WARRANTY
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGES.
 */

#include <acpi/acpi.h>
L
Len Brown 已提交
45 46
#include "accommon.h"
#include "acresrc.h"
L
Linus Torvalds 已提交
47 48

#define _COMPONENT          ACPI_RESOURCES
L
Len Brown 已提交
49
ACPI_MODULE_NAME("rsdump")
50
#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
R
Robert Moore 已提交
51
/* Local prototypes */
R
Robert Moore 已提交
52 53 54 55 56 57 58 59 60 61 62 63
static void acpi_rs_out_string(char *title, char *value);

static void acpi_rs_out_integer8(char *title, u8 value);

static void acpi_rs_out_integer16(char *title, u16 value);

static void acpi_rs_out_integer32(char *title, u32 value);

static void acpi_rs_out_integer64(char *title, u64 value);

static void acpi_rs_out_title(char *title);

64
static void acpi_rs_dump_byte_list(u16 length, u8 *data);
R
Robert Moore 已提交
65

66
static void acpi_rs_dump_word_list(u16 length, u16 *data);
R
Robert Moore 已提交
67

68 69 70
static void acpi_rs_dump_dword_list(u8 length, u32 *data);

static void acpi_rs_dump_short_byte_list(u8 length, u8 *data);
R
Robert Moore 已提交
71 72 73 74 75 76

static void
acpi_rs_dump_resource_source(struct acpi_resource_source *resource_source);

static void acpi_rs_dump_address_common(union acpi_resource_data *resource);

B
Bob Moore 已提交
77 78 79 80 81 82 83
static void
acpi_rs_dump_descriptor(void *resource, struct acpi_rsdump_info *table);

#define ACPI_RSD_OFFSET(f)          (u8) ACPI_OFFSET (union acpi_resource_data,f)
#define ACPI_PRT_OFFSET(f)          (u8) ACPI_OFFSET (struct acpi_pci_routing_table,f)
#define ACPI_RSD_TABLE_SIZE(name)   (sizeof(name) / sizeof (struct acpi_rsdump_info))

L
Linus Torvalds 已提交
84 85
/*******************************************************************************
 *
B
Bob Moore 已提交
86
 * Resource Descriptor info tables
R
Robert Moore 已提交
87
 *
B
Bob Moore 已提交
88 89
 * Note: The first table entry must be a Title or Literal and must contain
 * the table length (number of table entries)
R
Robert Moore 已提交
90 91 92
 *
 ******************************************************************************/

93
struct acpi_rsdump_info acpi_rs_dump_irq[7] = {
B
Bob Moore 已提交
94
	{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_irq), "IRQ", NULL},
95 96
	{ACPI_RSD_UINT8, ACPI_RSD_OFFSET(irq.descriptor_length),
	 "Descriptor Length", NULL},
B
Bob Moore 已提交
97
	{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(irq.triggering), "Triggering",
B
Bob Moore 已提交
98
	 acpi_gbl_he_decode},
B
Bob Moore 已提交
99
	{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(irq.polarity), "Polarity",
B
Bob Moore 已提交
100
	 acpi_gbl_ll_decode},
B
Bob Moore 已提交
101
	{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(irq.sharable), "Sharing",
B
Bob Moore 已提交
102
	 acpi_gbl_shr_decode},
B
Bob Moore 已提交
103 104 105 106 107 108 109 110 111
	{ACPI_RSD_UINT8, ACPI_RSD_OFFSET(irq.interrupt_count),
	 "Interrupt Count", NULL},
	{ACPI_RSD_SHORTLIST, ACPI_RSD_OFFSET(irq.interrupts[0]),
	 "Interrupt List", NULL}
};

struct acpi_rsdump_info acpi_rs_dump_dma[6] = {
	{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_dma), "DMA", NULL},
	{ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(dma.type), "Speed",
B
Bob Moore 已提交
112
	 acpi_gbl_typ_decode},
B
Bob Moore 已提交
113
	{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(dma.bus_master), "Mastering",
B
Bob Moore 已提交
114
	 acpi_gbl_bm_decode},
B
Bob Moore 已提交
115
	{ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(dma.transfer), "Transfer Type",
B
Bob Moore 已提交
116
	 acpi_gbl_siz_decode},
B
Bob Moore 已提交
117 118 119 120 121 122
	{ACPI_RSD_UINT8, ACPI_RSD_OFFSET(dma.channel_count), "Channel Count",
	 NULL},
	{ACPI_RSD_SHORTLIST, ACPI_RSD_OFFSET(dma.channels[0]), "Channel List",
	 NULL}
};

123
struct acpi_rsdump_info acpi_rs_dump_start_dpf[4] = {
B
Bob Moore 已提交
124 125
	{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_start_dpf),
	 "Start-Dependent-Functions", NULL},
126 127
	{ACPI_RSD_UINT8, ACPI_RSD_OFFSET(start_dpf.descriptor_length),
	 "Descriptor Length", NULL},
B
Bob Moore 已提交
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
	{ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(start_dpf.compatibility_priority),
	 "Compatibility Priority", acpi_gbl_config_decode},
	{ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(start_dpf.performance_robustness),
	 "Performance/Robustness", acpi_gbl_config_decode}
};

struct acpi_rsdump_info acpi_rs_dump_end_dpf[1] = {
	{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_end_dpf),
	 "End-Dependent-Functions", NULL}
};

struct acpi_rsdump_info acpi_rs_dump_io[6] = {
	{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_io), "I/O", NULL},
	{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(io.io_decode), "Address Decoding",
	 acpi_gbl_io_decode},
	{ACPI_RSD_UINT16, ACPI_RSD_OFFSET(io.minimum), "Address Minimum", NULL},
	{ACPI_RSD_UINT16, ACPI_RSD_OFFSET(io.maximum), "Address Maximum", NULL},
	{ACPI_RSD_UINT8, ACPI_RSD_OFFSET(io.alignment), "Alignment", NULL},
	{ACPI_RSD_UINT8, ACPI_RSD_OFFSET(io.address_length), "Address Length",
	 NULL}
};

struct acpi_rsdump_info acpi_rs_dump_fixed_io[3] = {
	{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_fixed_io),
	 "Fixed I/O", NULL},
	{ACPI_RSD_UINT16, ACPI_RSD_OFFSET(fixed_io.address), "Address", NULL},
	{ACPI_RSD_UINT8, ACPI_RSD_OFFSET(fixed_io.address_length),
	 "Address Length", NULL}
};

struct acpi_rsdump_info acpi_rs_dump_vendor[3] = {
	{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_vendor),
	 "Vendor Specific", NULL},
	{ACPI_RSD_UINT16, ACPI_RSD_OFFSET(vendor.byte_length), "Length", NULL},
	{ACPI_RSD_LONGLIST, ACPI_RSD_OFFSET(vendor.byte_data[0]), "Vendor Data",
	 NULL}
};

struct acpi_rsdump_info acpi_rs_dump_end_tag[1] = {
B
Bob Moore 已提交
167
	{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_end_tag), "EndTag",
B
Bob Moore 已提交
168 169 170 171 172 173 174
	 NULL}
};

struct acpi_rsdump_info acpi_rs_dump_memory24[6] = {
	{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_memory24),
	 "24-Bit Memory Range", NULL},
	{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(memory24.write_protect),
B
Bob Moore 已提交
175
	 "Write Protect", acpi_gbl_rw_decode},
B
Bob Moore 已提交
176 177 178 179 180 181 182 183 184 185 186 187 188 189
	{ACPI_RSD_UINT16, ACPI_RSD_OFFSET(memory24.minimum), "Address Minimum",
	 NULL},
	{ACPI_RSD_UINT16, ACPI_RSD_OFFSET(memory24.maximum), "Address Maximum",
	 NULL},
	{ACPI_RSD_UINT16, ACPI_RSD_OFFSET(memory24.alignment), "Alignment",
	 NULL},
	{ACPI_RSD_UINT16, ACPI_RSD_OFFSET(memory24.address_length),
	 "Address Length", NULL}
};

struct acpi_rsdump_info acpi_rs_dump_memory32[6] = {
	{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_memory32),
	 "32-Bit Memory Range", NULL},
	{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(memory32.write_protect),
B
Bob Moore 已提交
190
	 "Write Protect", acpi_gbl_rw_decode},
B
Bob Moore 已提交
191 192 193 194 195 196 197 198 199 200 201 202 203 204
	{ACPI_RSD_UINT32, ACPI_RSD_OFFSET(memory32.minimum), "Address Minimum",
	 NULL},
	{ACPI_RSD_UINT32, ACPI_RSD_OFFSET(memory32.maximum), "Address Maximum",
	 NULL},
	{ACPI_RSD_UINT32, ACPI_RSD_OFFSET(memory32.alignment), "Alignment",
	 NULL},
	{ACPI_RSD_UINT32, ACPI_RSD_OFFSET(memory32.address_length),
	 "Address Length", NULL}
};

struct acpi_rsdump_info acpi_rs_dump_fixed_memory32[4] = {
	{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_fixed_memory32),
	 "32-Bit Fixed Memory Range", NULL},
	{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(fixed_memory32.write_protect),
B
Bob Moore 已提交
205
	 "Write Protect", acpi_gbl_rw_decode},
B
Bob Moore 已提交
206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286
	{ACPI_RSD_UINT32, ACPI_RSD_OFFSET(fixed_memory32.address), "Address",
	 NULL},
	{ACPI_RSD_UINT32, ACPI_RSD_OFFSET(fixed_memory32.address_length),
	 "Address Length", NULL}
};

struct acpi_rsdump_info acpi_rs_dump_address16[8] = {
	{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_address16),
	 "16-Bit WORD Address Space", NULL},
	{ACPI_RSD_ADDRESS, 0, NULL, NULL},
	{ACPI_RSD_UINT16, ACPI_RSD_OFFSET(address16.granularity), "Granularity",
	 NULL},
	{ACPI_RSD_UINT16, ACPI_RSD_OFFSET(address16.minimum), "Address Minimum",
	 NULL},
	{ACPI_RSD_UINT16, ACPI_RSD_OFFSET(address16.maximum), "Address Maximum",
	 NULL},
	{ACPI_RSD_UINT16, ACPI_RSD_OFFSET(address16.translation_offset),
	 "Translation Offset", NULL},
	{ACPI_RSD_UINT16, ACPI_RSD_OFFSET(address16.address_length),
	 "Address Length", NULL},
	{ACPI_RSD_SOURCE, ACPI_RSD_OFFSET(address16.resource_source), NULL, NULL}
};

struct acpi_rsdump_info acpi_rs_dump_address32[8] = {
	{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_address32),
	 "32-Bit DWORD Address Space", NULL},
	{ACPI_RSD_ADDRESS, 0, NULL, NULL},
	{ACPI_RSD_UINT32, ACPI_RSD_OFFSET(address32.granularity), "Granularity",
	 NULL},
	{ACPI_RSD_UINT32, ACPI_RSD_OFFSET(address32.minimum), "Address Minimum",
	 NULL},
	{ACPI_RSD_UINT32, ACPI_RSD_OFFSET(address32.maximum), "Address Maximum",
	 NULL},
	{ACPI_RSD_UINT32, ACPI_RSD_OFFSET(address32.translation_offset),
	 "Translation Offset", NULL},
	{ACPI_RSD_UINT32, ACPI_RSD_OFFSET(address32.address_length),
	 "Address Length", NULL},
	{ACPI_RSD_SOURCE, ACPI_RSD_OFFSET(address32.resource_source), NULL, NULL}
};

struct acpi_rsdump_info acpi_rs_dump_address64[8] = {
	{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_address64),
	 "64-Bit QWORD Address Space", NULL},
	{ACPI_RSD_ADDRESS, 0, NULL, NULL},
	{ACPI_RSD_UINT64, ACPI_RSD_OFFSET(address64.granularity), "Granularity",
	 NULL},
	{ACPI_RSD_UINT64, ACPI_RSD_OFFSET(address64.minimum), "Address Minimum",
	 NULL},
	{ACPI_RSD_UINT64, ACPI_RSD_OFFSET(address64.maximum), "Address Maximum",
	 NULL},
	{ACPI_RSD_UINT64, ACPI_RSD_OFFSET(address64.translation_offset),
	 "Translation Offset", NULL},
	{ACPI_RSD_UINT64, ACPI_RSD_OFFSET(address64.address_length),
	 "Address Length", NULL},
	{ACPI_RSD_SOURCE, ACPI_RSD_OFFSET(address64.resource_source), NULL, NULL}
};

struct acpi_rsdump_info acpi_rs_dump_ext_address64[8] = {
	{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_ext_address64),
	 "64-Bit Extended Address Space", NULL},
	{ACPI_RSD_ADDRESS, 0, NULL, NULL},
	{ACPI_RSD_UINT64, ACPI_RSD_OFFSET(ext_address64.granularity),
	 "Granularity", NULL},
	{ACPI_RSD_UINT64, ACPI_RSD_OFFSET(ext_address64.minimum),
	 "Address Minimum", NULL},
	{ACPI_RSD_UINT64, ACPI_RSD_OFFSET(ext_address64.maximum),
	 "Address Maximum", NULL},
	{ACPI_RSD_UINT64, ACPI_RSD_OFFSET(ext_address64.translation_offset),
	 "Translation Offset", NULL},
	{ACPI_RSD_UINT64, ACPI_RSD_OFFSET(ext_address64.address_length),
	 "Address Length", NULL},
	{ACPI_RSD_UINT64, ACPI_RSD_OFFSET(ext_address64.type_specific),
	 "Type-Specific Attribute", NULL}
};

struct acpi_rsdump_info acpi_rs_dump_ext_irq[8] = {
	{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_ext_irq),
	 "Extended IRQ", NULL},
	{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(extended_irq.producer_consumer),
	 "Type", acpi_gbl_consume_decode},
	{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(extended_irq.triggering),
B
Bob Moore 已提交
287
	 "Triggering", acpi_gbl_he_decode},
B
Bob Moore 已提交
288
	{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(extended_irq.polarity), "Polarity",
B
Bob Moore 已提交
289
	 acpi_gbl_ll_decode},
B
Bob Moore 已提交
290
	{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(extended_irq.sharable), "Sharing",
B
Bob Moore 已提交
291
	 acpi_gbl_shr_decode},
B
Bob Moore 已提交
292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312
	{ACPI_RSD_SOURCE, ACPI_RSD_OFFSET(extended_irq.resource_source), NULL,
	 NULL},
	{ACPI_RSD_UINT8, ACPI_RSD_OFFSET(extended_irq.interrupt_count),
	 "Interrupt Count", NULL},
	{ACPI_RSD_DWORDLIST, ACPI_RSD_OFFSET(extended_irq.interrupts[0]),
	 "Interrupt List", NULL}
};

struct acpi_rsdump_info acpi_rs_dump_generic_reg[6] = {
	{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_generic_reg),
	 "Generic Register", NULL},
	{ACPI_RSD_UINT8, ACPI_RSD_OFFSET(generic_reg.space_id), "Space ID",
	 NULL},
	{ACPI_RSD_UINT8, ACPI_RSD_OFFSET(generic_reg.bit_width), "Bit Width",
	 NULL},
	{ACPI_RSD_UINT8, ACPI_RSD_OFFSET(generic_reg.bit_offset), "Bit Offset",
	 NULL},
	{ACPI_RSD_UINT8, ACPI_RSD_OFFSET(generic_reg.access_size),
	 "Access Size", NULL},
	{ACPI_RSD_UINT64, ACPI_RSD_OFFSET(generic_reg.address), "Address", NULL}
};
R
Robert Moore 已提交
313

314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432
struct acpi_rsdump_info acpi_rs_dump_gpio[16] = {
	{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_gpio), "GPIO", NULL},
	{ACPI_RSD_UINT8, ACPI_RSD_OFFSET(gpio.revision_id), "RevisionId", NULL},
	{ACPI_RSD_UINT8, ACPI_RSD_OFFSET(gpio.connection_type),
	 "ConnectionType", acpi_gbl_ct_decode},
	{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(gpio.producer_consumer),
	 "ProducerConsumer", acpi_gbl_consume_decode},
	{ACPI_RSD_UINT8, ACPI_RSD_OFFSET(gpio.pin_config), "PinConfig",
	 acpi_gbl_ppc_decode},
	{ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(gpio.sharable), "Sharable",
	 acpi_gbl_shr_decode},
	{ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(gpio.io_restriction),
	 "IoRestriction", acpi_gbl_ior_decode},
	{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(gpio.triggering), "Triggering",
	 acpi_gbl_he_decode},
	{ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(gpio.polarity), "Polarity",
	 acpi_gbl_ll_decode},
	{ACPI_RSD_UINT16, ACPI_RSD_OFFSET(gpio.drive_strength), "DriveStrength",
	 NULL},
	{ACPI_RSD_UINT16, ACPI_RSD_OFFSET(gpio.debounce_timeout),
	 "DebounceTimeout", NULL},
	{ACPI_RSD_SOURCE, ACPI_RSD_OFFSET(gpio.resource_source),
	 "ResourceSource", NULL},
	{ACPI_RSD_UINT16, ACPI_RSD_OFFSET(gpio.pin_table_length),
	 "PinTableLength", NULL},
	{ACPI_RSD_WORDLIST, ACPI_RSD_OFFSET(gpio.pin_table), "PinTable", NULL},
	{ACPI_RSD_UINT16, ACPI_RSD_OFFSET(gpio.vendor_length), "VendorLength",
	 NULL},
	{ACPI_RSD_SHORTLISTX, ACPI_RSD_OFFSET(gpio.vendor_data), "VendorData",
	 NULL},
};

struct acpi_rsdump_info acpi_rs_dump_fixed_dma[4] = {
	{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_fixed_dma),
	 "FixedDma", NULL},
	{ACPI_RSD_UINT16, ACPI_RSD_OFFSET(fixed_dma.request_lines),
	 "RequestLines", NULL},
	{ACPI_RSD_UINT16, ACPI_RSD_OFFSET(fixed_dma.channels), "Channels",
	 NULL},
	{ACPI_RSD_UINT8, ACPI_RSD_OFFSET(fixed_dma.width), "TransferWidth",
	 acpi_gbl_dts_decode},
};

#define ACPI_RS_DUMP_COMMON_SERIAL_BUS \
	{ACPI_RSD_UINT8,    ACPI_RSD_OFFSET (common_serial_bus.revision_id),    "RevisionId",               NULL}, \
	{ACPI_RSD_UINT8,    ACPI_RSD_OFFSET (common_serial_bus.type),           "Type",                     acpi_gbl_sbt_decode}, \
	{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (common_serial_bus.producer_consumer), "ProducerConsumer",      acpi_gbl_consume_decode}, \
	{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (common_serial_bus.slave_mode),     "SlaveMode",                acpi_gbl_sm_decode}, \
	{ACPI_RSD_UINT8,    ACPI_RSD_OFFSET (common_serial_bus.type_revision_id), "TypeRevisionId",         NULL}, \
	{ACPI_RSD_UINT16,   ACPI_RSD_OFFSET (common_serial_bus.type_data_length), "TypeDataLength",         NULL}, \
	{ACPI_RSD_SOURCE,   ACPI_RSD_OFFSET (common_serial_bus.resource_source), "ResourceSource",          NULL}, \
	{ACPI_RSD_UINT16,   ACPI_RSD_OFFSET (common_serial_bus.vendor_length),  "VendorLength",             NULL}, \
	{ACPI_RSD_SHORTLISTX,ACPI_RSD_OFFSET (common_serial_bus.vendor_data),   "VendorData",               NULL},

struct acpi_rsdump_info acpi_rs_dump_common_serial_bus[10] = {
	{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_common_serial_bus),
	 "Common Serial Bus", NULL},
	ACPI_RS_DUMP_COMMON_SERIAL_BUS
};

struct acpi_rsdump_info acpi_rs_dump_i2c_serial_bus[13] = {
	{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_i2c_serial_bus),
	 "I2C Serial Bus", NULL},
	ACPI_RS_DUMP_COMMON_SERIAL_BUS {ACPI_RSD_1BITFLAG,
					ACPI_RSD_OFFSET(i2c_serial_bus.
							access_mode),
					"AccessMode", acpi_gbl_am_decode},
	{ACPI_RSD_UINT32, ACPI_RSD_OFFSET(i2c_serial_bus.connection_speed),
	 "ConnectionSpeed", NULL},
	{ACPI_RSD_UINT16, ACPI_RSD_OFFSET(i2c_serial_bus.slave_address),
	 "SlaveAddress", NULL},
};

struct acpi_rsdump_info acpi_rs_dump_spi_serial_bus[17] = {
	{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_spi_serial_bus),
	 "Spi Serial Bus", NULL},
	ACPI_RS_DUMP_COMMON_SERIAL_BUS {ACPI_RSD_1BITFLAG,
					ACPI_RSD_OFFSET(spi_serial_bus.
							wire_mode), "WireMode",
					acpi_gbl_wm_decode},
	{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(spi_serial_bus.device_polarity),
	 "DevicePolarity", acpi_gbl_dp_decode},
	{ACPI_RSD_UINT8, ACPI_RSD_OFFSET(spi_serial_bus.data_bit_length),
	 "DataBitLength", NULL},
	{ACPI_RSD_UINT8, ACPI_RSD_OFFSET(spi_serial_bus.clock_phase),
	 "ClockPhase", acpi_gbl_cph_decode},
	{ACPI_RSD_UINT8, ACPI_RSD_OFFSET(spi_serial_bus.clock_polarity),
	 "ClockPolarity", acpi_gbl_cpo_decode},
	{ACPI_RSD_UINT16, ACPI_RSD_OFFSET(spi_serial_bus.device_selection),
	 "DeviceSelection", NULL},
	{ACPI_RSD_UINT32, ACPI_RSD_OFFSET(spi_serial_bus.connection_speed),
	 "ConnectionSpeed", NULL},
};

struct acpi_rsdump_info acpi_rs_dump_uart_serial_bus[19] = {
	{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_uart_serial_bus),
	 "Uart Serial Bus", NULL},
	ACPI_RS_DUMP_COMMON_SERIAL_BUS {ACPI_RSD_2BITFLAG,
					ACPI_RSD_OFFSET(uart_serial_bus.
							flow_control),
					"FlowControl", acpi_gbl_fc_decode},
	{ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(uart_serial_bus.stop_bits),
	 "StopBits", acpi_gbl_sb_decode},
	{ACPI_RSD_3BITFLAG, ACPI_RSD_OFFSET(uart_serial_bus.data_bits),
	 "DataBits", acpi_gbl_bpb_decode},
	{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(uart_serial_bus.endian), "Endian",
	 acpi_gbl_ed_decode},
	{ACPI_RSD_UINT8, ACPI_RSD_OFFSET(uart_serial_bus.parity), "Parity",
	 acpi_gbl_pt_decode},
	{ACPI_RSD_UINT8, ACPI_RSD_OFFSET(uart_serial_bus.lines_enabled),
	 "LinesEnabled", NULL},
	{ACPI_RSD_UINT16, ACPI_RSD_OFFSET(uart_serial_bus.rx_fifo_size),
	 "RxFifoSize", NULL},
	{ACPI_RSD_UINT16, ACPI_RSD_OFFSET(uart_serial_bus.tx_fifo_size),
	 "TxFifoSize", NULL},
	{ACPI_RSD_UINT32, ACPI_RSD_OFFSET(uart_serial_bus.default_baud_rate),
	 "ConnectionSpeed", NULL},
};

B
Bob Moore 已提交
433 434 435 436 437 438 439 440 441
/*
 * Tables used for common address descriptor flag fields
 */
static struct acpi_rsdump_info acpi_rs_dump_general_flags[5] = {
	{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_general_flags), NULL,
	 NULL},
	{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.producer_consumer),
	 "Consumer/Producer", acpi_gbl_consume_decode},
	{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.decode), "Address Decode",
B
Bob Moore 已提交
442
	 acpi_gbl_dec_decode},
B
Bob Moore 已提交
443 444 445 446 447 448 449 450
	{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.min_address_fixed),
	 "Min Relocatability", acpi_gbl_min_decode},
	{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.max_address_fixed),
	 "Max Relocatability", acpi_gbl_max_decode}
};

static struct acpi_rsdump_info acpi_rs_dump_memory_flags[5] = {
	{ACPI_RSD_LITERAL, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_memory_flags),
B
Bob Moore 已提交
451
	 "Resource Type", (void *)"Memory Range"},
B
Bob Moore 已提交
452
	{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.info.mem.write_protect),
B
Bob Moore 已提交
453
	 "Write Protect", acpi_gbl_rw_decode},
B
Bob Moore 已提交
454
	{ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(address.info.mem.caching),
B
Bob Moore 已提交
455
	 "Caching", acpi_gbl_mem_decode},
B
Bob Moore 已提交
456
	{ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(address.info.mem.range_type),
B
Bob Moore 已提交
457
	 "Range Type", acpi_gbl_mtp_decode},
B
Bob Moore 已提交
458
	{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.info.mem.translation),
B
Bob Moore 已提交
459
	 "Translation", acpi_gbl_ttp_decode}
B
Bob Moore 已提交
460 461 462 463
};

static struct acpi_rsdump_info acpi_rs_dump_io_flags[4] = {
	{ACPI_RSD_LITERAL, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_io_flags),
B
Bob Moore 已提交
464
	 "Resource Type", (void *)"I/O Range"},
B
Bob Moore 已提交
465
	{ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(address.info.io.range_type),
B
Bob Moore 已提交
466
	 "Range Type", acpi_gbl_rng_decode},
B
Bob Moore 已提交
467
	{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.info.io.translation),
B
Bob Moore 已提交
468
	 "Translation", acpi_gbl_ttp_decode},
B
Bob Moore 已提交
469
	{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.info.io.translation_type),
B
Bob Moore 已提交
470
	 "Translation Type", acpi_gbl_trs_decode}
B
Bob Moore 已提交
471
};
R
Robert Moore 已提交
472

B
Bob Moore 已提交
473 474 475 476 477 478 479 480 481 482
/*
 * Table used to dump _PRT contents
 */
static struct acpi_rsdump_info acpi_rs_dump_prt[5] = {
	{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_prt), NULL, NULL},
	{ACPI_RSD_UINT64, ACPI_PRT_OFFSET(address), "Address", NULL},
	{ACPI_RSD_UINT32, ACPI_PRT_OFFSET(pin), "Pin", NULL},
	{ACPI_RSD_STRING, ACPI_PRT_OFFSET(source[0]), "Source", NULL},
	{ACPI_RSD_UINT32, ACPI_PRT_OFFSET(source_index), "Source Index", NULL}
};
R
Robert Moore 已提交
483 484 485

/*******************************************************************************
 *
B
Bob Moore 已提交
486
 * FUNCTION:    acpi_rs_dump_descriptor
R
Robert Moore 已提交
487
 *
B
Bob Moore 已提交
488
 * PARAMETERS:  Resource
R
Robert Moore 已提交
489 490 491
 *
 * RETURN:      None
 *
B
Bob Moore 已提交
492
 * DESCRIPTION:
R
Robert Moore 已提交
493 494 495
 *
 ******************************************************************************/

B
Bob Moore 已提交
496 497
static void
acpi_rs_dump_descriptor(void *resource, struct acpi_rsdump_info *table)
R
Robert Moore 已提交
498
{
B
Bob Moore 已提交
499 500
	u8 *target = NULL;
	u8 *previous_target;
B
Bob Moore 已提交
501 502 503 504 505 506 507 508 509
	char *name;
	u8 count;

	/* First table entry must contain the table length (# of table entries) */

	count = table->offset;

	while (count) {
		previous_target = target;
B
Bob Moore 已提交
510
		target = ACPI_ADD_PTR(u8, resource, table->offset);
B
Bob Moore 已提交
511 512 513 514 515 516 517 518 519 520 521
		name = table->name;

		switch (table->opcode) {
		case ACPI_RSD_TITLE:
			/*
			 * Optional resource title
			 */
			if (table->name) {
				acpi_os_printf("%s Resource\n", name);
			}
			break;
R
Robert Moore 已提交
522

B
Bob Moore 已提交
523
			/* Strings */
R
Robert Moore 已提交
524

B
Bob Moore 已提交
525
		case ACPI_RSD_LITERAL:
B
Bob Moore 已提交
526 527
			acpi_rs_out_string(name,
					   ACPI_CAST_PTR(char, table->pointer));
B
Bob Moore 已提交
528
			break;
R
Robert Moore 已提交
529

B
Bob Moore 已提交
530
		case ACPI_RSD_STRING:
B
Bob Moore 已提交
531
			acpi_rs_out_string(name, ACPI_CAST_PTR(char, target));
B
Bob Moore 已提交
532
			break;
R
Robert Moore 已提交
533

B
Bob Moore 已提交
534
			/* Data items, 8/16/32/64 bit */
R
Robert Moore 已提交
535

B
Bob Moore 已提交
536
		case ACPI_RSD_UINT8:
537 538 539 540 541 542 543 544
			if (table->pointer) {
				acpi_rs_out_string(name, ACPI_CAST_PTR(char,
								       table->
								       pointer
								       [*target]));
			} else {
				acpi_rs_out_integer8(name, ACPI_GET8(target));
			}
B
Bob Moore 已提交
545
			break;
R
Robert Moore 已提交
546

B
Bob Moore 已提交
547
		case ACPI_RSD_UINT16:
B
Bob Moore 已提交
548
			acpi_rs_out_integer16(name, ACPI_GET16(target));
B
Bob Moore 已提交
549 550 551
			break;

		case ACPI_RSD_UINT32:
B
Bob Moore 已提交
552
			acpi_rs_out_integer32(name, ACPI_GET32(target));
B
Bob Moore 已提交
553
			break;
B
Bob Moore 已提交
554

B
Bob Moore 已提交
555
		case ACPI_RSD_UINT64:
B
Bob Moore 已提交
556
			acpi_rs_out_integer64(name, ACPI_GET64(target));
B
Bob Moore 已提交
557 558 559 560 561
			break;

			/* Flags: 1-bit and 2-bit flags supported */

		case ACPI_RSD_1BITFLAG:
B
Bob Moore 已提交
562 563 564 565
			acpi_rs_out_string(name, ACPI_CAST_PTR(char,
							       table->
							       pointer[*target &
								       0x01]));
B
Bob Moore 已提交
566 567 568
			break;

		case ACPI_RSD_2BITFLAG:
B
Bob Moore 已提交
569 570 571 572
			acpi_rs_out_string(name, ACPI_CAST_PTR(char,
							       table->
							       pointer[*target &
								       0x03]));
B
Bob Moore 已提交
573 574
			break;

575 576 577 578 579 580 581
		case ACPI_RSD_3BITFLAG:
			acpi_rs_out_string(name, ACPI_CAST_PTR(char,
							       table->
							       pointer[*target &
								       0x07]));
			break;

B
Bob Moore 已提交
582 583 584 585 586 587 588
		case ACPI_RSD_SHORTLIST:
			/*
			 * Short byte list (single line output) for DMA and IRQ resources
			 * Note: The list length is obtained from the previous table entry
			 */
			if (previous_target) {
				acpi_rs_out_title(name);
B
Bob Moore 已提交
589 590
				acpi_rs_dump_short_byte_list(*previous_target,
							     target);
B
Bob Moore 已提交
591 592 593
			}
			break;

594 595 596 597 598 599 600 601 602 603 604 605 606 607
		case ACPI_RSD_SHORTLISTX:
			/*
			 * Short byte list (single line output) for GPIO vendor data
			 * Note: The list length is obtained from the previous table entry
			 */
			if (previous_target) {
				acpi_rs_out_title(name);
				acpi_rs_dump_short_byte_list(*previous_target,
							     *
							     (ACPI_CAST_INDIRECT_PTR
							      (u8, target)));
			}
			break;

B
Bob Moore 已提交
608 609 610 611 612 613
		case ACPI_RSD_LONGLIST:
			/*
			 * Long byte list for Vendor resource data
			 * Note: The list length is obtained from the previous table entry
			 */
			if (previous_target) {
B
Bob Moore 已提交
614 615
				acpi_rs_dump_byte_list(ACPI_GET16
						       (previous_target),
B
Bob Moore 已提交
616
						       target);
B
Bob Moore 已提交
617 618 619 620 621 622 623 624 625
			}
			break;

		case ACPI_RSD_DWORDLIST:
			/*
			 * Dword list for Extended Interrupt resources
			 * Note: The list length is obtained from the previous table entry
			 */
			if (previous_target) {
B
Bob Moore 已提交
626 627 628
				acpi_rs_dump_dword_list(*previous_target,
							ACPI_CAST_PTR(u32,
								      target));
B
Bob Moore 已提交
629 630 631
			}
			break;

632 633 634 635 636 637 638 639 640 641 642 643
		case ACPI_RSD_WORDLIST:
			/*
			 * Word list for GPIO Pin Table
			 * Note: The list length is obtained from the previous table entry
			 */
			if (previous_target) {
				acpi_rs_dump_word_list(*previous_target,
						       *(ACPI_CAST_INDIRECT_PTR
							 (u16, target)));
			}
			break;

B
Bob Moore 已提交
644 645 646 647
		case ACPI_RSD_ADDRESS:
			/*
			 * Common flags for all Address resources
			 */
B
Bob Moore 已提交
648 649 650
			acpi_rs_dump_address_common(ACPI_CAST_PTR
						    (union acpi_resource_data,
						     target));
B
Bob Moore 已提交
651 652 653 654 655 656
			break;

		case ACPI_RSD_SOURCE:
			/*
			 * Optional resource_source for Address resources
			 */
L
Len Brown 已提交
657 658 659
			acpi_rs_dump_resource_source(ACPI_CAST_PTR(struct
								   acpi_resource_source,
								   target));
B
Bob Moore 已提交
660 661 662 663 664 665 666 667 668 669 670
			break;

		default:
			acpi_os_printf("**** Invalid table opcode [%X] ****\n",
				       table->opcode);
			return;
		}

		table++;
		count--;
	}
B
Bob Moore 已提交
671 672
}

R
Robert Moore 已提交
673 674 675
/*******************************************************************************
 *
 * FUNCTION:    acpi_rs_dump_resource_source
L
Linus Torvalds 已提交
676
 *
R
Robert Moore 已提交
677
 * PARAMETERS:  resource_source     - Pointer to a Resource Source struct
L
Linus Torvalds 已提交
678 679 680
 *
 * RETURN:      None
 *
R
Robert Moore 已提交
681 682
 * DESCRIPTION: Common routine for dumping the optional resource_source and the
 *              corresponding resource_source_index.
L
Linus Torvalds 已提交
683 684 685
 *
 ******************************************************************************/

R
Robert Moore 已提交
686 687
static void
acpi_rs_dump_resource_source(struct acpi_resource_source *resource_source)
L
Linus Torvalds 已提交
688
{
B
Bob Moore 已提交
689
	ACPI_FUNCTION_ENTRY();
L
Linus Torvalds 已提交
690

R
Robert Moore 已提交
691 692 693 694
	if (resource_source->index == 0xFF) {
		return;
	}

B
Bob Moore 已提交
695
	acpi_rs_out_integer8("Resource Source Index", resource_source->index);
R
Robert Moore 已提交
696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716

	acpi_rs_out_string("Resource Source",
			   resource_source->string_ptr ?
			   resource_source->string_ptr : "[Not Specified]");
}

/*******************************************************************************
 *
 * FUNCTION:    acpi_rs_dump_address_common
 *
 * PARAMETERS:  Resource        - Pointer to an internal resource descriptor
 *
 * RETURN:      None
 *
 * DESCRIPTION: Dump the fields that are common to all Address resource
 *              descriptors
 *
 ******************************************************************************/

static void acpi_rs_dump_address_common(union acpi_resource_data *resource)
{
L
Len Brown 已提交
717
	ACPI_FUNCTION_ENTRY();
L
Linus Torvalds 已提交
718

R
Robert Moore 已提交
719 720 721 722
	/* Decode the type-specific flags */

	switch (resource->address.resource_type) {
	case ACPI_MEMORY_RANGE:
L
Linus Torvalds 已提交
723

B
Bob Moore 已提交
724
		acpi_rs_dump_descriptor(resource, acpi_rs_dump_memory_flags);
R
Robert Moore 已提交
725 726 727 728
		break;

	case ACPI_IO_RANGE:

B
Bob Moore 已提交
729
		acpi_rs_dump_descriptor(resource, acpi_rs_dump_io_flags);
R
Robert Moore 已提交
730 731 732 733 734 735 736 737 738 739 740 741
		break;

	case ACPI_BUS_NUMBER_RANGE:

		acpi_rs_out_string("Resource Type", "Bus Number Range");
		break;

	default:

		acpi_rs_out_integer8("Resource Type",
				     (u8) resource->address.resource_type);
		break;
L
Linus Torvalds 已提交
742 743
	}

R
Robert Moore 已提交
744 745
	/* Decode the general flags */

B
Bob Moore 已提交
746
	acpi_rs_dump_descriptor(resource, acpi_rs_dump_general_flags);
L
Linus Torvalds 已提交
747 748 749 750
}

/*******************************************************************************
 *
R
Robert Moore 已提交
751
 * FUNCTION:    acpi_rs_dump_resource_list
L
Linus Torvalds 已提交
752
 *
R
Robert Moore 已提交
753
 * PARAMETERS:  resource_list       - Pointer to a resource descriptor list
L
Linus Torvalds 已提交
754 755 756
 *
 * RETURN:      None
 *
R
Robert Moore 已提交
757
 * DESCRIPTION: Dispatches the structure to the correct dump routine.
L
Linus Torvalds 已提交
758 759 760
 *
 ******************************************************************************/

R
Robert Moore 已提交
761
void acpi_rs_dump_resource_list(struct acpi_resource *resource_list)
L
Linus Torvalds 已提交
762
{
R
Robert Moore 已提交
763
	u32 count = 0;
B
Bob Moore 已提交
764
	u32 type;
L
Linus Torvalds 已提交
765

L
Len Brown 已提交
766
	ACPI_FUNCTION_ENTRY();
L
Linus Torvalds 已提交
767

R
Robert Moore 已提交
768 769 770 771 772
	if (!(acpi_dbg_level & ACPI_LV_RESOURCES)
	    || !(_COMPONENT & acpi_dbg_layer)) {
		return;
	}

B
Bob Moore 已提交
773
	/* Walk list and dump all resource descriptors (END_TAG terminates) */
R
Robert Moore 已提交
774

B
Bob Moore 已提交
775
	do {
R
Robert Moore 已提交
776
		acpi_os_printf("\n[%02X] ", count);
B
Bob Moore 已提交
777
		count++;
R
Robert Moore 已提交
778 779 780

		/* Validate Type before dispatch */

B
Bob Moore 已提交
781 782
		type = resource_list->type;
		if (type > ACPI_RESOURCE_TYPE_MAX) {
R
Robert Moore 已提交
783 784 785 786 787 788 789 790
			acpi_os_printf
			    ("Invalid descriptor type (%X) in resource list\n",
			     resource_list->type);
			return;
		}

		/* Dump the resource descriptor */

791 792 793 794 795 796 797 798 799 800
		if (type == ACPI_RESOURCE_TYPE_SERIAL_BUS) {
			acpi_rs_dump_descriptor(&resource_list->data,
						acpi_gbl_dump_serial_bus_dispatch
						[resource_list->data.
						 common_serial_bus.type]);
		} else {
			acpi_rs_dump_descriptor(&resource_list->data,
						acpi_gbl_dump_resource_dispatch
						[type]);
		}
R
Robert Moore 已提交
801

B
Bob Moore 已提交
802
		/* Point to the next resource structure */
R
Robert Moore 已提交
803

804
		resource_list = ACPI_NEXT_RESOURCE(resource_list);
R
Robert Moore 已提交
805

B
Bob Moore 已提交
806
		/* Exit when END_TAG descriptor is reached */
R
Robert Moore 已提交
807

B
Bob Moore 已提交
808
	} while (type != ACPI_RESOURCE_TYPE_END_TAG);
R
Robert Moore 已提交
809 810 811 812
}

/*******************************************************************************
 *
B
Bob Moore 已提交
813
 * FUNCTION:    acpi_rs_dump_irq_list
R
Robert Moore 已提交
814
 *
B
Bob Moore 已提交
815
 * PARAMETERS:  route_table     - Pointer to the routing table to dump.
R
Robert Moore 已提交
816 817 818
 *
 * RETURN:      None
 *
B
Bob Moore 已提交
819
 * DESCRIPTION: Print IRQ routing table
R
Robert Moore 已提交
820 821 822
 *
 ******************************************************************************/

B
Bob Moore 已提交
823
void acpi_rs_dump_irq_list(u8 * route_table)
R
Robert Moore 已提交
824
{
B
Bob Moore 已提交
825 826
	struct acpi_pci_routing_table *prt_element;
	u8 count;
L
Linus Torvalds 已提交
827

L
Len Brown 已提交
828
	ACPI_FUNCTION_ENTRY();
L
Linus Torvalds 已提交
829

B
Bob Moore 已提交
830 831 832
	if (!(acpi_dbg_level & ACPI_LV_RESOURCES)
	    || !(_COMPONENT & acpi_dbg_layer)) {
		return;
L
Linus Torvalds 已提交
833 834
	}

B
Bob Moore 已提交
835
	prt_element = ACPI_CAST_PTR(struct acpi_pci_routing_table, route_table);
L
Linus Torvalds 已提交
836

B
Bob Moore 已提交
837
	/* Dump all table elements, Exit on zero length element */
L
Linus Torvalds 已提交
838

B
Bob Moore 已提交
839 840 841 842
	for (count = 0; prt_element->length; count++) {
		acpi_os_printf("\n[%02X] PCI IRQ Routing Table Package\n",
			       count);
		acpi_rs_dump_descriptor(prt_element, acpi_rs_dump_prt);
L
Linus Torvalds 已提交
843

B
Bob Moore 已提交
844 845
		prt_element = ACPI_ADD_PTR(struct acpi_pci_routing_table,
					   prt_element, prt_element->length);
L
Linus Torvalds 已提交
846 847 848 849 850
	}
}

/*******************************************************************************
 *
B
Bob Moore 已提交
851
 * FUNCTION:    acpi_rs_out*
L
Linus Torvalds 已提交
852
 *
B
Bob Moore 已提交
853 854
 * PARAMETERS:  Title       - Name of the resource field
 *              Value       - Value of the resource field
L
Linus Torvalds 已提交
855 856 857
 *
 * RETURN:      None
 *
B
Bob Moore 已提交
858 859
 * DESCRIPTION: Miscellaneous helper functions to consistently format the
 *              output of the resource dump routines
L
Linus Torvalds 已提交
860 861 862
 *
 ******************************************************************************/

B
Bob Moore 已提交
863
static void acpi_rs_out_string(char *title, char *value)
L
Linus Torvalds 已提交
864
{
B
Bob Moore 已提交
865 866 867 868 869
	acpi_os_printf("%27s : %s", title, value);
	if (!*value) {
		acpi_os_printf("[NULL NAMESTRING]");
	}
	acpi_os_printf("\n");
L
Linus Torvalds 已提交
870 871
}

B
Bob Moore 已提交
872
static void acpi_rs_out_integer8(char *title, u8 value)
L
Linus Torvalds 已提交
873
{
B
Bob Moore 已提交
874
	acpi_os_printf("%27s : %2.2X\n", title, value);
L
Linus Torvalds 已提交
875 876
}

B
Bob Moore 已提交
877
static void acpi_rs_out_integer16(char *title, u16 value)
L
Linus Torvalds 已提交
878
{
B
Bob Moore 已提交
879
	acpi_os_printf("%27s : %4.4X\n", title, value);
L
Linus Torvalds 已提交
880 881
}

B
Bob Moore 已提交
882
static void acpi_rs_out_integer32(char *title, u32 value)
B
Bob Moore 已提交
883
{
B
Bob Moore 已提交
884
	acpi_os_printf("%27s : %8.8X\n", title, value);
B
Bob Moore 已提交
885 886
}

B
Bob Moore 已提交
887
static void acpi_rs_out_integer64(char *title, u64 value)
L
Linus Torvalds 已提交
888
{
B
Bob Moore 已提交
889
	acpi_os_printf("%27s : %8.8X%8.8X\n", title, ACPI_FORMAT_UINT64(value));
L
Linus Torvalds 已提交
890 891
}

B
Bob Moore 已提交
892
static void acpi_rs_out_title(char *title)
L
Linus Torvalds 已提交
893
{
B
Bob Moore 已提交
894
	acpi_os_printf("%27s : ", title);
R
Robert Moore 已提交
895
}
L
Linus Torvalds 已提交
896

R
Robert Moore 已提交
897 898
/*******************************************************************************
 *
B
Bob Moore 已提交
899
 * FUNCTION:    acpi_rs_dump*List
R
Robert Moore 已提交
900
 *
B
Bob Moore 已提交
901 902
 * PARAMETERS:  Length      - Number of elements in the list
 *              Data        - Start of the list
R
Robert Moore 已提交
903 904 905
 *
 * RETURN:      None
 *
B
Bob Moore 已提交
906
 * DESCRIPTION: Miscellaneous functions to dump lists of raw data
R
Robert Moore 已提交
907 908
 *
 ******************************************************************************/
L
Linus Torvalds 已提交
909

B
Bob Moore 已提交
910
static void acpi_rs_dump_byte_list(u16 length, u8 * data)
R
Robert Moore 已提交
911
{
B
Bob Moore 已提交
912
	u8 i;
L
Linus Torvalds 已提交
913

B
Bob Moore 已提交
914 915 916
	for (i = 0; i < length; i++) {
		acpi_os_printf("%25s%2.2X : %2.2X\n", "Byte", i, data[i]);
	}
R
Robert Moore 已提交
917
}
L
Linus Torvalds 已提交
918

B
Bob Moore 已提交
919
static void acpi_rs_dump_short_byte_list(u8 length, u8 * data)
R
Robert Moore 已提交
920
{
B
Bob Moore 已提交
921
	u8 i;
L
Linus Torvalds 已提交
922

B
Bob Moore 已提交
923 924 925 926
	for (i = 0; i < length; i++) {
		acpi_os_printf("%X ", data[i]);
	}
	acpi_os_printf("\n");
L
Linus Torvalds 已提交
927 928
}

B
Bob Moore 已提交
929
static void acpi_rs_dump_dword_list(u8 length, u32 * data)
L
Linus Torvalds 已提交
930
{
B
Bob Moore 已提交
931
	u8 i;
L
Linus Torvalds 已提交
932

B
Bob Moore 已提交
933 934
	for (i = 0; i < length; i++) {
		acpi_os_printf("%25s%2.2X : %8.8X\n", "Dword", i, data[i]);
L
Linus Torvalds 已提交
935 936 937
	}
}

938 939 940 941 942 943 944 945 946
static void acpi_rs_dump_word_list(u16 length, u16 *data)
{
	u16 i;

	for (i = 0; i < length; i++) {
		acpi_os_printf("%25s%2.2X : %4.4X\n", "Word", i, data[i]);
	}
}

L
Linus Torvalds 已提交
947
#endif