From 2e304dd9ffcb640ddce5afa4b9f841848a95e14a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20Fr=C3=B6schle?= Date: Thu, 7 Nov 2013 19:46:44 +0000 Subject: [PATCH] fixed for little endian PCIBIOS routines. Fixed bus enumeration --- BaS_gcc/sources/pci.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/BaS_gcc/sources/pci.c b/BaS_gcc/sources/pci.c index 1237cad..cac7bec 100644 --- a/BaS_gcc/sources/pci.c +++ b/BaS_gcc/sources/pci.c @@ -204,9 +204,13 @@ int32_t pci_find_device(uint16_t device_id, uint16_t vendor_id, int index) uint8_t htr; handle = PCI_HANDLE(bus, device, 0); - value = swpl(pci_read_config_longword(handle, PCIIDR)); + value = pci_read_config_longword(handle, PCIIDR); if (value != 0xffffffff) /* we have a device at this position */ { +#ifdef _NOT_USED_ + xprintf("value=%08x, vendor_id = 0x%04x, device_id=0x%04x\r\n", + value, PCI_VENDOR_ID(value), PCI_DEVICE_ID(value)); +#endif /* _NOT_USED_ */ if (vendor_id == 0xffff || (PCI_VENDOR_ID(value) == vendor_id && PCI_DEVICE_ID(value) == device_id)) { @@ -214,6 +218,7 @@ int32_t pci_find_device(uint16_t device_id, uint16_t vendor_id, int index) { return handle; } + n++; } /* @@ -224,15 +229,13 @@ int32_t pci_find_device(uint16_t device_id, uint16_t vendor_id, int index) if ((htr = pci_read_config_byte(handle, PCIHTR)) & 0x80) { /* yes, this is a multi-function device, look for more functions */ - xprintf("bus = %02x, dev = %02x, func = %02x PCIHTR=%02x\r\n", bus, device, function, htr); - + for (function = 1; function < 8; function++) { handle = PCI_HANDLE(bus, device, function); - value = swpl(pci_read_config_longword(handle, PCIIDR)); + value = pci_read_config_longword(handle, PCIIDR); if (value != 0xFFFFFFFF) /* device found */ { - n++; if (vendor_id == 0xffff || (PCI_VENDOR_ID(value) == vendor_id && PCI_DEVICE_ID(value) == device_id)) { @@ -240,12 +243,11 @@ int32_t pci_find_device(uint16_t device_id, uint16_t vendor_id, int index) { return handle; } + n++; } } } } - else /* no, current device is not multi-function */ - n++; /* next one */ } } } @@ -408,7 +410,7 @@ void pci_scan(void) if (PCI_VENDOR_ID(value) != 0x1057 && PCI_DEVICE_ID(value) != 0x5806) /* do not configure bridge */ { /* save handle to index value so that we'll be able to later find our resources */ - handles[index++] = handle; + handles[index] = handle; /* configure memory and I/O for card */ pci_device_config(PCI_BUS_FROM_HANDLE(handle),