fixed for little endian PCIBIOS routines. Fixed bus enumeration

This commit is contained in:
Markus Fröschle
2013-11-07 19:46:44 +00:00
parent a1ba2c76fd
commit 2e304dd9ff

View File

@@ -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),