Rev 1633 | Rev 2187 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1633 | Rev 1867 | ||
---|---|---|---|
Line 5... | Line 5... | ||
5 | #include |
5 | #include |
6 | 6 | ||
Line 7... | Line 7... | ||
7 | #include "acpi.h" |
7 | #include "acpi.h" |
8 | #include "acpi_bus.h" |
8 | #include "acpi_bus.h" |
- | 9 | #include "dmdev.h" |
|
Line 9... | Line 10... | ||
9 | 10 | ||
Line 10... | Line 11... | ||
10 | #define PREFIX "ACPI: " |
11 | #define PREFIX "ACPI: " |
11 | 12 | ||
12 | #define ACPI_BUS_CLASS "system_bus" |
13 | #define ACPI_BUS_CLASS "system_bus" |
Line 13... | Line 14... | ||
13 | #define ACPI_BUS_HID "KLBSYBUS" |
14 | #define ACPI_BUS_HID "KLBSYBUS" |
Line 14... | Line 15... | ||
14 | #define ACPI_BUS_DEVICE_NAME "System Bus" |
15 | #define ACPI_BUS_DEVICE_NAME "System Bus" |
15 | 16 | ||
- | 17 | ||
Line 16... | Line 18... | ||
16 | 18 | #define ACPI_IS_ROOT_DEVICE(device) (!(device)->parent) |
|
17 | #define ACPI_IS_ROOT_DEVICE(device) (!(device)->parent) |
19 | |
18 | 20 | LIST_HEAD(acpi_device_list); |
|
Line 63... | Line 65... | ||
63 | // (addr_t)((addr_t)(addr) + OS_BASE) |
65 | // (addr_t)((addr_t)(addr) + OS_BASE) |
64 | 66 | ||
Line 65... | Line 67... | ||
65 | #define acpi_remap( addr ) MapIoMem((void*)(addr),4096, 0x01) |
67 | #define acpi_remap( addr ) MapIoMem((void*)(addr),4096, 0x01) |
Line -... | Line 68... | ||
- | 68 | ||
- | 69 | char* strdup(const char *str); |
|
66 | 70 | ||
Line 67... | Line 71... | ||
67 | void print_pci_irqs(); |
71 | void print_pci_irqs(); |
Line 77... | Line 81... | ||
77 | IO_PIC = 0, |
81 | IO_PIC = 0, |
78 | IO_APIC |
82 | IO_APIC |
79 | }; |
83 | }; |
80 | 84 | ||
Line -... | Line 85... | ||
- | 85 | static ACPI_STATUS |
|
- | 86 | resource_to_addr(ACPI_RESOURCE *resource, ACPI_RESOURCE_ADDRESS64 *addr); |
|
- | 87 | ||
- | 88 | static void create_dm_list(); |
|
- | 89 | ||
- | 90 | static void print_dm_list(); |
|
- | 91 | ||
- | 92 | ||
81 | static void set_pic_mode(enum pic_mode mode) |
93 | static void set_pic_mode(enum pic_mode mode) |
82 | { |
94 | { |
83 | ACPI_OBJECT arg1; |
95 | ACPI_OBJECT arg1; |
84 | ACPI_OBJECT_LIST args; |
96 | ACPI_OBJECT_LIST args; |
85 | ACPI_STATUS as; |
97 | ACPI_STATUS as; |
Line 97... | Line 109... | ||
97 | if (ACPI_SUCCESS(as)) |
109 | if (ACPI_SUCCESS(as)) |
98 | dbgprintf(PREFIX "machine set to %s mode\n", mode ? "APIC" : "PIC"); |
110 | dbgprintf(PREFIX "machine set to %s mode\n", mode ? "APIC" : "PIC"); |
99 | } |
111 | } |
100 | 112 | ||
Line 101... | Line -... | ||
101 | void print_device_tree(struct acpi_device *device) |
- | |
102 | { |
- | |
103 | struct acpi_device *child; |
- | |
Line 104... | Line -... | ||
104 | - | ||
Line 105... | Line -... | ||
105 | dbgprintf("%s\n", device->pnp.bus_id); |
- | |
106 | - | ||
107 | list_for_each_entry(child, &device->children, node) |
- | |
108 | { |
- | |
109 | print_device_tree(child); |
- | |
Line 110... | Line 113... | ||
110 | }; |
113 | |
Line 647... | Line 650... | ||
647 | set_pic_mode(IO_APIC); |
650 | set_pic_mode(IO_APIC); |
Line 648... | Line 651... | ||
648 | 651 | ||
Line 649... | Line -... | ||
649 | acpi_scan(); |
- | |
650 | - | ||
651 | // print_device_tree(acpi_root); |
652 | acpi_scan(); |
Line 652... | Line 653... | ||
652 | 653 | ||
Line 653... | Line -... | ||
653 | acpi_init_pci(acpi_root); |
- | |
654 | - | ||
655 | print_pci_irqs(); |
- | |
656 | - | ||
657 | /* |
- | |
658 | ACPI_HANDLE bus_handle; |
- | |
659 | ACPI_HANDLE pci_root; |
- | |
660 | - | ||
661 | status = AcpiGetHandle(0, "\\_SB_", &bus_handle); |
- | |
662 | dbgprintf("system bus handle %x\n", bus_handle); |
- | |
663 | - | ||
664 | status = AcpiGetHandle(bus_handle, "PCI0", &pci_root); |
654 | acpi_init_pci(acpi_root); |
665 | if (status != AE_OK) { |
- | |
666 | dbgprintf("AcpiGetHandle failed (%s)\n", |
- | |
667 | AcpiFormatException(status)); |
- | |
668 | goto err; |
- | |
669 | } |
- | |
Line 670... | Line -... | ||
670 | - | ||
671 | AcpiWalkNamespace(ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, 100, |
- | |
672 | get_device_by_hid_callback, NULL, NULL, NULL); |
- | |
673 | */ |
655 | |
Line 674... | Line 656... | ||
674 | 656 | print_pci_irqs(); |
|
675 | #if 0 |
- | |
676 | - | ||
Line 677... | Line -... | ||
677 | AcpiWalkNamespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, 4, |
- | |
678 | get_device_by_hid_callback, NULL, NULL, NULL); |
657 | |
Line 679... | Line -... | ||
679 | - | ||
- | 658 | create_dm_list(); |
|
Line 680... | Line 659... | ||
680 | ACPI_OBJECT obj; |
659 | |
- | 660 | print_dm_list(); |
|
681 | ACPI_HANDLE bus_handle; |
661 | |
682 | ACPI_HANDLE pci_root; |
662 | err: |
683 | 663 | ||
- | 664 | return 0; |
|
- | 665 | ||
684 | status = AcpiGetHandle(0, "\\_SB_", &bus_handle); |
666 | }; |
685 | dbgprintf("system bus handle %x\n", bus_handle); |
- | |
686 | - | ||
687 | status = AcpiGetHandle(bus_handle, "PCI0", &pci_root); |
- | |
688 | - | ||
689 | if (status != AE_OK) { |
- | |
690 | dbgprintf("AcpiGetHandle failed (%s)\n", |
- | |
691 | AcpiFormatException(status)); |
- | |
692 | goto err; |
- | |
693 | } |
- | |
694 | - | ||
695 | dbgprintf("pci root handle %x\n\n", pci_root); |
- | |
696 | - | ||
697 | ACPI_BUFFER prt_buffer; |
- | |
698 | 667 | ||
699 | prt_buffer.Length = ACPI_ALLOCATE_BUFFER; |
668 | char* strdup(const char *str) |
Line 700... | Line -... | ||
700 | prt_buffer.Pointer = NULL; |
- | |
Line -... | Line 669... | ||
- | 669 | { |
|
- | 670 | size_t len = strlen (str) + 1; |
|
- | 671 | char *copy = malloc(len); |
|
- | 672 | if (copy) |
|
- | 673 | { |
|
Line 701... | Line -... | ||
701 | - | ||
702 | status = AcpiGetIrqRoutingTable(pci_root, &prt_buffer); |
- | |
703 | - | ||
704 | if (status != AE_OK) { |
674 | memcpy (copy, str, len); |
Line -... | Line 675... | ||
- | 675 | } |
|
- | 676 | return copy; |
|
- | 677 | } |
|
- | 678 | ||
705 | dbgprintf("AcpiGetIrqRoutingTable failed (%s)\n", |
679 | |
Line -... | Line 680... | ||
- | 680 | static void dm_add_pci_bus(struct pci_bus *bus) |
|
- | 681 | { |
|
706 | AcpiFormatException(status)); |
682 | struct pci_bus *tbus; |
Line 707... | Line 683... | ||
707 | goto err; |
683 | struct pci_dev *dev; |
708 | } |
684 | dmdev_t *dmdev; |
709 | 685 | ||
710 | prt_walk_table(&prt_buffer); |
686 | dmdev = (dmdev_t*)kzalloc(sizeof(dmdev_t),GFP_KERNEL); |
- | 687 | ||
711 | 688 | // INIT_LIST_HEAD(&dmdev->list); |
|
Line -... | Line 689... | ||
- | 689 | // dmdev->type = 1; |
|
- | 690 | // dmdev->acpi_dev = bus->self->acpi_dev; |
|
- | 691 | // dmdev->pci_dev = bus->self; |
|
- | 692 | // list_add_tail(&dmdev->list, &dmdev_tree); |
|
Line 712... | Line -... | ||
712 | - | ||
- | 693 | ||
Line 713... | Line 694... | ||
713 | ACPI_OBJECT arg = { ACPI_TYPE_INTEGER }; |
694 | list_for_each_entry(dev, &bus->devices, bus_list) |
714 | ACPI_OBJECT_LIST arg_list = { 1, &arg }; |
695 | { |
- | 696 | dmdev = (dmdev_t*)kzalloc(sizeof(dmdev_t),GFP_KERNEL); |
|
715 | 697 | ||
716 | arg.Integer.Value = ACPI_IRQ_MODEL_IOAPIC; |
698 | INIT_LIST_HEAD(&dmdev->list); |
717 | 699 | dmdev->type = 1; |
|
Line 718... | Line -... | ||
718 | dbgprintf("\nset ioapic mode\n\n"); |
- | |
719 | - | ||
720 | status = AcpiEvaluateObject(NULL, "\\_PIC", &arg_list, NULL); |
- | |
721 | - | ||
722 | if (ACPI_FAILURE(status)) { |
- | |
723 | dbgprintf("AcpiEvaluateObject failed (%s)\n", |
- | |
724 | AcpiFormatException(status)); |
- | |
725 | // goto err; |
- | |
726 | } |
- | |
727 | - | ||
728 | - | ||
729 | status = AcpiGetIrqRoutingTable(pci_root, &prt_buffer); |
- | |
730 | - | ||
731 | if (status != AE_OK) { |
- | |
732 | dbgprintf("AcpiGetIrqRoutingTable failed (%s)\n", |
- | |
733 | AcpiFormatException(status)); |
- | |
734 | goto err; |
- | |
735 | } |
- | |
736 | - | ||
737 | prt_walk_table(&prt_buffer); |
- | |
738 | - | ||
739 | u8_t pin = PciRead8 (0, (31<<3) | 1, 0x3D); |
- | |
740 | dbgprintf("bus 0 device 31 function 1 pin %d\n", pin-1); |
- | |
741 | - | ||
742 | pin = PciRead8 (0, (31<<3) | 2, 0x3D); |
- | |
743 | dbgprintf("bus 0 device 31 function 2 pin %d\n", pin-1); |
- | |
744 | - | ||
745 | pin = PciRead8 (0, (31<<3) | 3, 0x3D); |
- | |
746 | dbgprintf("bus 0 device 31 function 3 pin %d\n", pin-1); |
- | |
Line 747... | Line -... | ||
747 | - | ||
748 | pin = PciRead8 (0, (31<<3) | 4, 0x3D); |
- | |
749 | dbgprintf("bus 0 device 31 function 4 pin %d\n", pin-1); |
- | |
750 | 700 | dmdev->acpi_dev = dev->acpi_dev; |
|
751 | pin = PciRead8 (0, (31<<3) | 5, 0x3D); |
- | |
752 | dbgprintf("bus 0 device 31 function 5 pin %d\n", pin-1); |
701 | dmdev->pci_dev = dev; |
753 | 702 | list_add_tail(&dmdev->list, &dmdev_tree); |
|
754 | pin = PciRead8 (0, (31<<3) | 6, 0x3D); |
703 | }; |
755 | dbgprintf("bus 0 device 31 function 6 pin %d\n", pin-1); |
- | |
756 | 704 | ||
Line 757... | Line 705... | ||
757 | pin = PciRead8 (0, (31<<3) | 7, 0x3D); |
705 | list_for_each_entry(tbus, &bus->children, node) |
758 | dbgprintf("bus 0 device 31 function 7 pin %d\n", pin-1); |
- | |
759 | #endif |
706 | { |
760 | - | ||
761 | err: |
- | |
Line 762... | Line -... | ||
762 | - | ||
763 | return 0; |
- | |
764 | - | ||
765 | }; |
707 | dm_add_pci_bus(tbus); |
766 | - | ||
767 | #if 0 |
- | |
768 | - | ||
Line -... | Line 708... | ||
- | 708 | }; |
|
- | 709 | ||
- | 710 | }; |
|
- | 711 | ||
769 | ACPI_STATUS |
712 | static ACPI_STATUS |
- | 713 | count_dev_resources(ACPI_RESOURCE *acpi_res, void *data) |
|
- | 714 | { |
|
- | 715 | (*(int*)data)++; |
|
Line 770... | Line 716... | ||
770 | get_device_by_hid_callback(ACPI_HANDLE obj, u32_t depth, void* context, |
716 | return AE_OK; |
Line -... | Line 717... | ||
- | 717 | } |
|
- | 718 | ||
- | 719 | ||
771 | void** retval) |
720 | static void dm_add_acpi(struct acpi_device *device) |
Line 772... | Line 721... | ||
772 | { |
721 | { |
773 | static u32_t counter = 0; |
722 | struct acpi_device *child; |
774 | static char buff[256]; |
- | |
775 | 723 | ACPI_DEVICE_INFO *info = NULL; |
|
Line -... | Line 724... | ||
- | 724 | ACPI_STATUS status; |
|
- | 725 | ||
- | 726 | dmdev_t *dmdev; |
|
- | 727 | uint32_t res_num = 0; |
|
- | 728 | ||
- | 729 | status = AcpiGetObjectInfo(device->handle, &info); |
|
- | 730 | ||
- | 731 | if ( (status == AE_OK) && (info->Valid & ACPI_VALID_HID)) |
|
- | 732 | { |
|
- | 733 | if( strcmp(info->HardwareId.String,"PNP0C0F") == 0) |
|
- | 734 | { |
|
776 | ACPI_STATUS status; |
735 | kfree(info); |
Line 777... | Line -... | ||
777 | - | ||
778 | ACPI_BUFFER buffer; |
- | |
779 | - | ||
780 | ACPI_DEVICE_INFO *info; |
- | |
781 | - | ||
782 | // *retval = NULL; |
- | |
783 | 736 | return; |
|
784 | buffer.Length = 255; |
737 | }; |
785 | buffer.Pointer = buff; |
738 | }; |
786 | - | ||
Line 787... | Line -... | ||
787 | status = AcpiGetName(obj, ACPI_FULL_PATHNAME, &buffer); |
- | |
788 | if (status != AE_OK) { |
- | |
789 | return AE_CTRL_TERMINATE; |
- | |
Line 790... | Line 739... | ||
790 | } |
739 | |
791 | - | ||
792 | buff[buffer.Length] = '\0'; |
- | |
793 | - | ||
794 | dbgprintf("device %d %s ", counter, buff); |
740 | kfree(info); |
- | 741 | ||
- | 742 | if(device->pci_dev == NULL) |
|
Line 795... | Line -... | ||
795 | - | ||
796 | status = AcpiGetObjectInfo(obj, &info); |
- | |
797 | - | ||
798 | if (ACPI_SUCCESS (status)) |
743 | { |
799 | { |
- | |
800 | if (info->Valid & ACPI_VALID_HID) |
- | |
Line 801... | Line 744... | ||
801 | dbgprintf (" HID: %s", info->HardwareId.String); |
744 | AcpiWalkResources(device->handle, METHOD_NAME__CRS, |
802 | - | ||
803 | }; |
- | |
804 | 745 | count_dev_resources, &res_num); |
|
805 | dbgprintf("\n"); |
- | |
Line -... | Line 746... | ||
- | 746 | ||
- | 747 | if(res_num != 0) |
|
Line 806... | Line 748... | ||
806 | counter++; |
748 | { |
807 | 749 | dmdev = (dmdev_t*)kzalloc(sizeof(dmdev_t),GFP_KERNEL); |
|
808 | return AE_OK; |
- | |
809 | } |
- | |
810 | 750 | ||
811 | prt_walk_table(ACPI_BUFFER *prt) |
- | |
812 | { |
- | |
813 | ACPI_PCI_ROUTING_TABLE *entry; |
- | |
814 | char *prtptr; |
751 | INIT_LIST_HEAD(&dmdev->list); |
- | 752 | dmdev->type = 0; |
|
- | 753 | dmdev->acpi_dev = device; |
|
- | 754 | dmdev->pci_dev = NULL; |
|
- | 755 | list_add_tail(&dmdev->list, &dmdev_tree); |
|
815 | 756 | }; |
|
- | 757 | }; |
|
- | 758 | list_for_each_entry(child, &device->children, node) |
|
Line -... | Line 759... | ||
- | 759 | { |
|
816 | /* First check to see if there is a table to walk. */ |
760 | dm_add_acpi(child); |
817 | if (prt == NULL || prt->Pointer == NULL) |
761 | }; |
818 | return; |
762 | }; |
- | 763 | ||
- | 764 | static void create_dm_list() |
|
Line 819... | Line 765... | ||
819 | 765 | { |
|
820 | /* Walk the table executing the handler function for each entry. */ |
- | |
821 | prtptr = prt->Pointer; |
- | |
822 | entry = (ACPI_PCI_ROUTING_TABLE *)prtptr; |
- | |
823 | while (entry->Length != 0) |
766 | struct acpi_pci_root *root; |
824 | { |
767 | |
825 | - | ||
826 | dbgprintf("adress: %x %x ", (u32_t)(entry->Address>>32), |
- | |
827 | (u32_t)entry->Address); |
- | |
828 | dbgprintf("pin: %d index: %d source: %s\n", |
- | |
829 | entry->Pin, |
- | |
830 | entry->SourceIndex, |
- | |
831 | entry->Source); |
- | |
832 | - | ||
833 | // handler(entry, arg); |
- | |
834 | prtptr += entry->Length; |
- | |
835 | entry = (ACPI_PCI_ROUTING_TABLE *)prtptr; |
- | |
836 | } |
768 | |
- | 769 | list_for_each_entry(root, &acpi_pci_roots, node) |
|
837 | } |
770 | { |
838 | 771 | struct pci_bus *pbus, *tbus; |
|
839 | 772 | struct pci_dev *dev; |
|
Line 840... | Line 773... | ||
840 | static void add_irq(unsigned dev, unsigned pin, u8_t irq) |
773 | |
- | 774 | pbus = root->bus; |
|
- | 775 | ||
- | 776 | dm_add_pci_bus(pbus); |
|
- | 777 | }; |
|
841 | { |
778 | |
Line 842... | Line 779... | ||
842 | // assert(dev < PCI_MAX_DEVICES && pin < PCI_MAX_PINS); |
779 | dm_add_acpi(acpi_root); |
- | 780 | }; |
|
- | 781 | ||
843 | 782 | static void print_pci_resource(struct resource *res) |
|
844 | irqtable[dev * PCI_MAX_PINS + pin] = irq; |
783 | { |
- | 784 | if(res->flags !=0 ) |
|
- | 785 | { |
|
- | 786 | if(res->flags & IORESOURCE_IO) |
|
- | 787 | dbgprintf(" IO range "); |
|
- | 788 | else if(res->flags & IORESOURCE_MEM) |
|
845 | } |
789 | dbgprintf(" MMIO range "); |
- | 790 | dbgprintf("%x - %x\n", res->start, res->end); |
|
- | 791 | }; |
|
Line 846... | Line -... | ||
846 | - | ||
847 | static ACPI_STATUS get_irq_resource(ACPI_RESOURCE *res, void *context) |
792 | }; |
848 | { |
- | |
849 | ACPI_PCI_ROUTING_TABLE *tbl = (ACPI_PCI_ROUTING_TABLE *) context; |
793 | |
850 | 794 | static ACPI_STATUS |
|
Line 851... | Line 795... | ||
851 | if (res->Type == ACPI_RESOURCE_TYPE_IRQ) |
795 | print_acpi_resource(ACPI_RESOURCE *acpi_res, void *data) |
852 | { |
796 | { |
853 | ACPI_RESOURCE_IRQ *irq; |
- | |
854 | 797 | ACPI_RESOURCE_ADDRESS64 addr; |
|
- | 798 | ACPI_STATUS status; |
|
Line 855... | Line -... | ||
855 | irq = &res->Data.Irq; |
- | |
856 | add_irq(tbl->Address >> 16, tbl->Pin, |
799 | int i; |
857 | irq->Interrupts[tbl->SourceIndex]); |
- | |
858 | } else if (res->Type == ACPI_RESOURCE_TYPE_EXTENDED_IRQ) |
- | |
859 | { |
800 | |
860 | ACPI_RESOURCE_EXTENDED_IRQ *irq; |
801 | switch (acpi_res->Type) |
861 | 802 | { |
|
862 | add_irq(tbl->Address >> 16, tbl->Pin, |
- | |
863 | irq->Interrupts[tbl->SourceIndex]); |
803 | case ACPI_RESOURCE_TYPE_IRQ: |
864 | } |
- | |
865 | 804 | { |
|
866 | return AE_OK; |
805 | ACPI_RESOURCE_IRQ *irq_data = (ACPI_RESOURCE_IRQ*)&acpi_res->Data; |
Line -... | Line 806... | ||
- | 806 | dbgprintf(" IRQ %d\n", irq_data->Interrupts[0]); |
|
- | 807 | }; |
|
- | 808 | break; |
|
867 | } |
809 | |
- | 810 | case ACPI_RESOURCE_TYPE_EXTENDED_IRQ: |
|
- | 811 | { |
|
- | 812 | ACPI_RESOURCE_EXTENDED_IRQ *irq_data = (ACPI_RESOURCE_EXTENDED_IRQ*)&acpi_res->Data; |
|
- | 813 | dbgprintf(" IRQ %d\n", irq_data->Interrupts[0]); |
|
868 | 814 | }; |
|
- | 815 | break; |
|
Line 869... | Line -... | ||
869 | char buff[4096]; |
- | |
870 | 816 | ||
871 | static ACPI_STATUS get_pci_irq_routing(ACPI_HANDLE handle) |
817 | case ACPI_RESOURCE_TYPE_DMA: |
872 | { |
818 | { |
873 | ACPI_STATUS status; |
819 | ACPI_RESOURCE_DMA *dma_data = (ACPI_RESOURCE_DMA*) &acpi_res->Data; |
874 | ACPI_BUFFER abuff; |
820 | for(i=0; i < dma_data->ChannelCount; i++) |
875 | ACPI_PCI_ROUTING_TABLE *tbl; |
821 | { |
Line -... | Line 822... | ||
- | 822 | dbgprintf(" DMA %s channel %d\n", |
|
- | 823 | dma_data->Type == ACPI_TYPE_A ? "Type A": |
|
876 | 824 | dma_data->Type == ACPI_TYPE_B ? "Type B" : |
|
877 | abuff.Length = sizeof(buff); |
825 | dma_data->Type == ACPI_TYPE_F ? "Type F" : "", |
878 | abuff.Pointer = buff; |
826 | dma_data->Channels[i]); |
879 | 827 | } |
|
- | 828 | }; |
|
- | 829 | break; |
|
- | 830 | ||
Line 880... | Line -... | ||
880 | status = AcpiGetIrqRoutingTable(handle, &abuff); |
- | |
881 | if (ACPI_FAILURE(status)) { |
831 | case ACPI_RESOURCE_TYPE_IO: |
- | 832 | { |
|
Line 882... | Line -... | ||
882 | return AE_OK; |
- | |
883 | } |
- | |
Line 884... | Line -... | ||
884 | - | ||
885 | for (tbl = (ACPI_PCI_ROUTING_TABLE *)abuff.Pointer; tbl->Length; |
- | |
886 | tbl = (ACPI_PCI_ROUTING_TABLE *) |
- | |
887 | ((char *)tbl + tbl->Length)) |
833 | ACPI_RESOURCE_IO *io_data = (ACPI_RESOURCE_IO*) &acpi_res->Data; |
888 | { |
834 | |
889 | ACPI_HANDLE src_handle; |
835 | dbgprintf(" IO range 0%x-0%x\n",io_data->Minimum, |
890 | 836 | io_data->Minimum+io_data->AddressLength-1); |
|
891 | if (*(char*)tbl->Source == '\0') { |
837 | } |
- | 838 | break; |
|
Line 892... | Line 839... | ||
892 | add_irq(tbl->Address >> 16, tbl->Pin, tbl->SourceIndex); |
839 | |
893 | continue; |
- | |
Line 894... | Line 840... | ||
894 | } |
840 | case ACPI_RESOURCE_TYPE_FIXED_IO: |
895 | 841 | { |
|
896 | status = AcpiGetHandle(handle, tbl->Source, &src_handle); |
842 | ACPI_RESOURCE_FIXED_IO *io_data = (ACPI_RESOURCE_FIXED_IO*) &acpi_res->Data; |
897 | if (ACPI_FAILURE(status)) { |
843 | dbgprintf(" Fixed IO range 0%x-0%x\n",io_data->Address, |
898 | printf("Failed AcpiGetHandle\n"); |
844 | io_data->Address+io_data->AddressLength-1); |
899 | continue; |
845 | }; |
900 | } |
846 | break; |
901 | status = AcpiWalkResources(src_handle, METHOD_NAME__CRS, |
847 | |
902 | get_irq_resource, tbl); |
848 | case ACPI_RESOURCE_TYPE_MEMORY24: |
- | 849 | case ACPI_RESOURCE_TYPE_MEMORY32: |
|
- | 850 | case ACPI_RESOURCE_TYPE_FIXED_MEMORY32: |
|
903 | if (ACPI_FAILURE(status)) { |
851 | { |
904 | printf("Failed IRQ resource\n"); |
852 | ACPI_RESOURCE_ADDRESS64 addr64; |
Line -... | Line 853... | ||
- | 853 | resource_to_addr(acpi_res, &addr64); |
|
905 | continue; |
854 | dbgprintf(" Memory range 0%x-0%x\n", |
- | 855 | (uint32_t)addr64.Minimum, (uint32_t)addr64.Maximum); |
|
- | 856 | } |
|
- | 857 | break; |
|
- | 858 | ||
- | 859 | case ACPI_RESOURCE_TYPE_ADDRESS16: |
|
Line 906... | Line 860... | ||
906 | } |
860 | case ACPI_RESOURCE_TYPE_ADDRESS32: |
907 | } |
861 | case ACPI_RESOURCE_TYPE_ADDRESS64: |
908 | - | ||
909 | return AE_OK; |
- | |
Line -... | Line 862... | ||
- | 862 | { |
|
- | 863 | ACPI_RESOURCE_ADDRESS64 addr64; |
|
- | 864 | ACPI_STATUS status; |
|
- | 865 | ||
- | 866 | status = AcpiResourceToAddress64(acpi_res, &addr64); |
|
910 | } |
867 | if (ACPI_SUCCESS(status)) |
- | 868 | { |
|
Line 911... | Line -... | ||
911 | - | ||
912 | static ACPI_STATUS add_pci_root_dev(ACPI_HANDLE handle, |
- | |
913 | UINT32 level, |
- | |
914 | void *context, |
- | |
915 | void **retval) |
- | |
916 | { |
- | |
917 | int i; |
- | |
918 | static unsigned called; |
- | |
919 | - | ||
920 | if (++called > 1) { |
- |