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 - 2012, 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},
101
	{ACPI_RSD_2BITFLAG, 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},
290
	{ACPI_RSD_2BITFLAG, 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
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},
323
	{ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(gpio.sharable), "Sharing",
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
	 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
			 */
657 658
			acpi_rs_dump_resource_source(ACPI_CAST_PTR
						     (struct
L
Len Brown 已提交
659 660
								   acpi_resource_source,
								   target));
B
Bob Moore 已提交
661 662 663 664 665 666 667 668 669 670 671
			break;

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

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

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

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

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

B
Bob Moore 已提交
696
	acpi_rs_out_integer8("Resource Source Index", resource_source->index);
R
Robert Moore 已提交
697 698 699 700 701 702 703 704 705 706

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

/*******************************************************************************
 *
 * FUNCTION:    acpi_rs_dump_address_common
 *
707
 * PARAMETERS:  resource        - Pointer to an internal resource descriptor
R
Robert Moore 已提交
708 709 710 711 712 713 714 715 716 717
 *
 * 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 已提交
718
	ACPI_FUNCTION_ENTRY();
L
Linus Torvalds 已提交
719

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

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

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

	case ACPI_IO_RANGE:

B
Bob Moore 已提交
730
		acpi_rs_dump_descriptor(resource, acpi_rs_dump_io_flags);
R
Robert Moore 已提交
731 732 733 734 735 736 737 738 739 740 741 742
		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 已提交
743 744
	}

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

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

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

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

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

769 770 771
	/* Check if debug output enabled */

	if (!ACPI_IS_DEBUG_ENABLED(ACPI_LV_RESOURCES, _COMPONENT)) {
R
Robert Moore 已提交
772 773 774
		return;
	}

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

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

		/* Validate Type before dispatch */

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

		/* Dump the resource descriptor */

793 794 795 796 797 798 799 800 801 802
		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 已提交
803

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

806
		resource_list = ACPI_NEXT_RESOURCE(resource_list);
R
Robert Moore 已提交
807

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

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

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

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

L
Len Brown 已提交
830
	ACPI_FUNCTION_ENTRY();
L
Linus Torvalds 已提交
831

832 833 834
	/* Check if debug output enabled */

	if (!ACPI_IS_DEBUG_ENABLED(ACPI_LV_RESOURCES, _COMPONENT)) {
B
Bob Moore 已提交
835
		return;
L
Linus Torvalds 已提交
836 837
	}

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

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

B
Bob Moore 已提交
842 843 844 845
	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 已提交
846

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

941 942 943 944 945 946 947 948 949
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 已提交
950
#endif