diff options
author | Lin Ming <ming.m.lin@intel.com> | 2011-11-16 01:38:13 -0500 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2012-01-17 03:36:30 -0500 |
commit | e0fe0a8d4ed5474261d0ee1452f5d9ae77236958 (patch) | |
tree | cec332ccaab7fa0dd03cbc87ea1212f7182c2309 /drivers/acpi/acpica/rsdump.c | |
parent | 2da120b6847f85c406f9afa13853e2755684389e (diff) |
ACPI 5.0: Support for all new resource descriptors
FixedDMA, GPIO descriptors, SerialBus descriptors
Signed-off-by: Lin Ming <ming.m.lin@intel.com>
Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/acpi/acpica/rsdump.c')
-rw-r--r-- | drivers/acpi/acpica/rsdump.c | 194 |
1 files changed, 185 insertions, 9 deletions
diff --git a/drivers/acpi/acpica/rsdump.c b/drivers/acpi/acpica/rsdump.c index 33db7520c74b..9969985bf2b7 100644 --- a/drivers/acpi/acpica/rsdump.c +++ b/drivers/acpi/acpica/rsdump.c | |||
@@ -61,11 +61,13 @@ static void acpi_rs_out_integer64(char *title, u64 value); | |||
61 | 61 | ||
62 | static void acpi_rs_out_title(char *title); | 62 | static void acpi_rs_out_title(char *title); |
63 | 63 | ||
64 | static void acpi_rs_dump_byte_list(u16 length, u8 * data); | 64 | static void acpi_rs_dump_byte_list(u16 length, u8 *data); |
65 | 65 | ||
66 | static void acpi_rs_dump_dword_list(u8 length, u32 * data); | 66 | static void acpi_rs_dump_word_list(u16 length, u16 *data); |
67 | 67 | ||
68 | static void acpi_rs_dump_short_byte_list(u8 length, u8 * data); | 68 | static void acpi_rs_dump_dword_list(u8 length, u32 *data); |
69 | |||
70 | static void acpi_rs_dump_short_byte_list(u8 length, u8 *data); | ||
69 | 71 | ||
70 | static void | 72 | static void |
71 | acpi_rs_dump_resource_source(struct acpi_resource_source *resource_source); | 73 | acpi_rs_dump_resource_source(struct acpi_resource_source *resource_source); |
@@ -309,6 +311,125 @@ struct acpi_rsdump_info acpi_rs_dump_generic_reg[6] = { | |||
309 | {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(generic_reg.address), "Address", NULL} | 311 | {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(generic_reg.address), "Address", NULL} |
310 | }; | 312 | }; |
311 | 313 | ||
314 | struct acpi_rsdump_info acpi_rs_dump_gpio[16] = { | ||
315 | {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_gpio), "GPIO", NULL}, | ||
316 | {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(gpio.revision_id), "RevisionId", NULL}, | ||
317 | {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(gpio.connection_type), | ||
318 | "ConnectionType", acpi_gbl_ct_decode}, | ||
319 | {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(gpio.producer_consumer), | ||
320 | "ProducerConsumer", acpi_gbl_consume_decode}, | ||
321 | {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(gpio.pin_config), "PinConfig", | ||
322 | acpi_gbl_ppc_decode}, | ||
323 | {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(gpio.sharable), "Sharable", | ||
324 | acpi_gbl_shr_decode}, | ||
325 | {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(gpio.io_restriction), | ||
326 | "IoRestriction", acpi_gbl_ior_decode}, | ||
327 | {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(gpio.triggering), "Triggering", | ||
328 | acpi_gbl_he_decode}, | ||
329 | {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(gpio.polarity), "Polarity", | ||
330 | acpi_gbl_ll_decode}, | ||
331 | {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(gpio.drive_strength), "DriveStrength", | ||
332 | NULL}, | ||
333 | {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(gpio.debounce_timeout), | ||
334 | "DebounceTimeout", NULL}, | ||
335 | {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET(gpio.resource_source), | ||
336 | "ResourceSource", NULL}, | ||
337 | {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(gpio.pin_table_length), | ||
338 | "PinTableLength", NULL}, | ||
339 | {ACPI_RSD_WORDLIST, ACPI_RSD_OFFSET(gpio.pin_table), "PinTable", NULL}, | ||
340 | {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(gpio.vendor_length), "VendorLength", | ||
341 | NULL}, | ||
342 | {ACPI_RSD_SHORTLISTX, ACPI_RSD_OFFSET(gpio.vendor_data), "VendorData", | ||
343 | NULL}, | ||
344 | }; | ||
345 | |||
346 | struct acpi_rsdump_info acpi_rs_dump_fixed_dma[4] = { | ||
347 | {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_fixed_dma), | ||
348 | "FixedDma", NULL}, | ||
349 | {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(fixed_dma.request_lines), | ||
350 | "RequestLines", NULL}, | ||
351 | {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(fixed_dma.channels), "Channels", | ||
352 | NULL}, | ||
353 | {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(fixed_dma.width), "TransferWidth", | ||
354 | acpi_gbl_dts_decode}, | ||
355 | }; | ||
356 | |||
357 | #define ACPI_RS_DUMP_COMMON_SERIAL_BUS \ | ||
358 | {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (common_serial_bus.revision_id), "RevisionId", NULL}, \ | ||
359 | {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (common_serial_bus.type), "Type", acpi_gbl_sbt_decode}, \ | ||
360 | {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (common_serial_bus.producer_consumer), "ProducerConsumer", acpi_gbl_consume_decode}, \ | ||
361 | {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (common_serial_bus.slave_mode), "SlaveMode", acpi_gbl_sm_decode}, \ | ||
362 | {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (common_serial_bus.type_revision_id), "TypeRevisionId", NULL}, \ | ||
363 | {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (common_serial_bus.type_data_length), "TypeDataLength", NULL}, \ | ||
364 | {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET (common_serial_bus.resource_source), "ResourceSource", NULL}, \ | ||
365 | {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (common_serial_bus.vendor_length), "VendorLength", NULL}, \ | ||
366 | {ACPI_RSD_SHORTLISTX,ACPI_RSD_OFFSET (common_serial_bus.vendor_data), "VendorData", NULL}, | ||
367 | |||
368 | struct acpi_rsdump_info acpi_rs_dump_common_serial_bus[10] = { | ||
369 | {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_common_serial_bus), | ||
370 | "Common Serial Bus", NULL}, | ||
371 | ACPI_RS_DUMP_COMMON_SERIAL_BUS | ||
372 | }; | ||
373 | |||
374 | struct acpi_rsdump_info acpi_rs_dump_i2c_serial_bus[13] = { | ||
375 | {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_i2c_serial_bus), | ||
376 | "I2C Serial Bus", NULL}, | ||
377 | ACPI_RS_DUMP_COMMON_SERIAL_BUS {ACPI_RSD_1BITFLAG, | ||
378 | ACPI_RSD_OFFSET(i2c_serial_bus. | ||
379 | access_mode), | ||
380 | "AccessMode", acpi_gbl_am_decode}, | ||
381 | {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(i2c_serial_bus.connection_speed), | ||
382 | "ConnectionSpeed", NULL}, | ||
383 | {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(i2c_serial_bus.slave_address), | ||
384 | "SlaveAddress", NULL}, | ||
385 | }; | ||
386 | |||
387 | struct acpi_rsdump_info acpi_rs_dump_spi_serial_bus[17] = { | ||
388 | {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_spi_serial_bus), | ||
389 | "Spi Serial Bus", NULL}, | ||
390 | ACPI_RS_DUMP_COMMON_SERIAL_BUS {ACPI_RSD_1BITFLAG, | ||
391 | ACPI_RSD_OFFSET(spi_serial_bus. | ||
392 | wire_mode), "WireMode", | ||
393 | acpi_gbl_wm_decode}, | ||
394 | {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(spi_serial_bus.device_polarity), | ||
395 | "DevicePolarity", acpi_gbl_dp_decode}, | ||
396 | {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(spi_serial_bus.data_bit_length), | ||
397 | "DataBitLength", NULL}, | ||
398 | {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(spi_serial_bus.clock_phase), | ||
399 | "ClockPhase", acpi_gbl_cph_decode}, | ||
400 | {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(spi_serial_bus.clock_polarity), | ||
401 | "ClockPolarity", acpi_gbl_cpo_decode}, | ||
402 | {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(spi_serial_bus.device_selection), | ||
403 | "DeviceSelection", NULL}, | ||
404 | {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(spi_serial_bus.connection_speed), | ||
405 | "ConnectionSpeed", NULL}, | ||
406 | }; | ||
407 | |||
408 | struct acpi_rsdump_info acpi_rs_dump_uart_serial_bus[19] = { | ||
409 | {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_uart_serial_bus), | ||
410 | "Uart Serial Bus", NULL}, | ||
411 | ACPI_RS_DUMP_COMMON_SERIAL_BUS {ACPI_RSD_2BITFLAG, | ||
412 | ACPI_RSD_OFFSET(uart_serial_bus. | ||
413 | flow_control), | ||
414 | "FlowControl", acpi_gbl_fc_decode}, | ||
415 | {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(uart_serial_bus.stop_bits), | ||
416 | "StopBits", acpi_gbl_sb_decode}, | ||
417 | {ACPI_RSD_3BITFLAG, ACPI_RSD_OFFSET(uart_serial_bus.data_bits), | ||
418 | "DataBits", acpi_gbl_bpb_decode}, | ||
419 | {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(uart_serial_bus.endian), "Endian", | ||
420 | acpi_gbl_ed_decode}, | ||
421 | {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(uart_serial_bus.parity), "Parity", | ||
422 | acpi_gbl_pt_decode}, | ||
423 | {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(uart_serial_bus.lines_enabled), | ||
424 | "LinesEnabled", NULL}, | ||
425 | {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(uart_serial_bus.rx_fifo_size), | ||
426 | "RxFifoSize", NULL}, | ||
427 | {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(uart_serial_bus.tx_fifo_size), | ||
428 | "TxFifoSize", NULL}, | ||
429 | {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(uart_serial_bus.default_baud_rate), | ||
430 | "ConnectionSpeed", NULL}, | ||
431 | }; | ||
432 | |||
312 | /* | 433 | /* |
313 | * Tables used for common address descriptor flag fields | 434 | * Tables used for common address descriptor flag fields |
314 | */ | 435 | */ |
@@ -413,7 +534,14 @@ acpi_rs_dump_descriptor(void *resource, struct acpi_rsdump_info *table) | |||
413 | /* Data items, 8/16/32/64 bit */ | 534 | /* Data items, 8/16/32/64 bit */ |
414 | 535 | ||
415 | case ACPI_RSD_UINT8: | 536 | case ACPI_RSD_UINT8: |
416 | acpi_rs_out_integer8(name, ACPI_GET8(target)); | 537 | if (table->pointer) { |
538 | acpi_rs_out_string(name, ACPI_CAST_PTR(char, | ||
539 | table-> | ||
540 | pointer | ||
541 | [*target])); | ||
542 | } else { | ||
543 | acpi_rs_out_integer8(name, ACPI_GET8(target)); | ||
544 | } | ||
417 | break; | 545 | break; |
418 | 546 | ||
419 | case ACPI_RSD_UINT16: | 547 | case ACPI_RSD_UINT16: |
@@ -444,6 +572,13 @@ acpi_rs_dump_descriptor(void *resource, struct acpi_rsdump_info *table) | |||
444 | 0x03])); | 572 | 0x03])); |
445 | break; | 573 | break; |
446 | 574 | ||
575 | case ACPI_RSD_3BITFLAG: | ||
576 | acpi_rs_out_string(name, ACPI_CAST_PTR(char, | ||
577 | table-> | ||
578 | pointer[*target & | ||
579 | 0x07])); | ||
580 | break; | ||
581 | |||
447 | case ACPI_RSD_SHORTLIST: | 582 | case ACPI_RSD_SHORTLIST: |
448 | /* | 583 | /* |
449 | * Short byte list (single line output) for DMA and IRQ resources | 584 | * Short byte list (single line output) for DMA and IRQ resources |
@@ -456,6 +591,20 @@ acpi_rs_dump_descriptor(void *resource, struct acpi_rsdump_info *table) | |||
456 | } | 591 | } |
457 | break; | 592 | break; |
458 | 593 | ||
594 | case ACPI_RSD_SHORTLISTX: | ||
595 | /* | ||
596 | * Short byte list (single line output) for GPIO vendor data | ||
597 | * Note: The list length is obtained from the previous table entry | ||
598 | */ | ||
599 | if (previous_target) { | ||
600 | acpi_rs_out_title(name); | ||
601 | acpi_rs_dump_short_byte_list(*previous_target, | ||
602 | * | ||
603 | (ACPI_CAST_INDIRECT_PTR | ||
604 | (u8, target))); | ||
605 | } | ||
606 | break; | ||
607 | |||
459 | case ACPI_RSD_LONGLIST: | 608 | case ACPI_RSD_LONGLIST: |
460 | /* | 609 | /* |
461 | * Long byte list for Vendor resource data | 610 | * Long byte list for Vendor resource data |
@@ -480,6 +629,18 @@ acpi_rs_dump_descriptor(void *resource, struct acpi_rsdump_info *table) | |||
480 | } | 629 | } |
481 | break; | 630 | break; |
482 | 631 | ||
632 | case ACPI_RSD_WORDLIST: | ||
633 | /* | ||
634 | * Word list for GPIO Pin Table | ||
635 | * Note: The list length is obtained from the previous table entry | ||
636 | */ | ||
637 | if (previous_target) { | ||
638 | acpi_rs_dump_word_list(*previous_target, | ||
639 | *(ACPI_CAST_INDIRECT_PTR | ||
640 | (u16, target))); | ||
641 | } | ||
642 | break; | ||
643 | |||
483 | case ACPI_RSD_ADDRESS: | 644 | case ACPI_RSD_ADDRESS: |
484 | /* | 645 | /* |
485 | * Common flags for all Address resources | 646 | * Common flags for all Address resources |
@@ -627,14 +788,20 @@ void acpi_rs_dump_resource_list(struct acpi_resource *resource_list) | |||
627 | 788 | ||
628 | /* Dump the resource descriptor */ | 789 | /* Dump the resource descriptor */ |
629 | 790 | ||
630 | acpi_rs_dump_descriptor(&resource_list->data, | 791 | if (type == ACPI_RESOURCE_TYPE_SERIAL_BUS) { |
631 | acpi_gbl_dump_resource_dispatch[type]); | 792 | acpi_rs_dump_descriptor(&resource_list->data, |
793 | acpi_gbl_dump_serial_bus_dispatch | ||
794 | [resource_list->data. | ||
795 | common_serial_bus.type]); | ||
796 | } else { | ||
797 | acpi_rs_dump_descriptor(&resource_list->data, | ||
798 | acpi_gbl_dump_resource_dispatch | ||
799 | [type]); | ||
800 | } | ||
632 | 801 | ||
633 | /* Point to the next resource structure */ | 802 | /* Point to the next resource structure */ |
634 | 803 | ||
635 | resource_list = | 804 | resource_list = ACPI_NEXT_RESOURCE(resource_list); |
636 | ACPI_ADD_PTR(struct acpi_resource, resource_list, | ||
637 | resource_list->length); | ||
638 | 805 | ||
639 | /* Exit when END_TAG descriptor is reached */ | 806 | /* Exit when END_TAG descriptor is reached */ |
640 | 807 | ||
@@ -768,4 +935,13 @@ static void acpi_rs_dump_dword_list(u8 length, u32 * data) | |||
768 | } | 935 | } |
769 | } | 936 | } |
770 | 937 | ||
938 | static void acpi_rs_dump_word_list(u16 length, u16 *data) | ||
939 | { | ||
940 | u16 i; | ||
941 | |||
942 | for (i = 0; i < length; i++) { | ||
943 | acpi_os_printf("%25s%2.2X : %4.4X\n", "Word", i, data[i]); | ||
944 | } | ||
945 | } | ||
946 | |||
771 | #endif | 947 | #endif |