Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 4418 → Rev 4438

/branches/dd/uspace/srv/pci/pci.c
26,16 → 26,18
bool multi;
uint8_t header_type;
printf("PCI: scanning bus number %d\n", bus->num);
for (dnum = 0; dnum < 256; dnum++) {
for (dnum = 0; dnum < 32; dnum++) {
multi = true;
for (fnum = 0; multi && fnum < 8; fnum++) {
pci_init_dev(dev, bus, dnum, fnum);
dev->vendor_id = pci_conf_read_16(dev, PCI_VENDOR_ID);
dev->device_id = pci_conf_read_16(dev, PCI_DEVICE_ID);
if (dev->vendor_id == 0xFFFF) {
continue; // device is not present, go on scanning the bus
if (dev->vendor_id == 0xFFFF) { // device is not present, go on scanning the bus
if (fnum == 0) {
break;
} else {
continue;
}
}
header_type = pci_conf_read_8(dev, PCI_HEADER_TYPE);
if (fnum == 0) {
43,14 → 45,14
}
header_type = header_type & 0x7F; // clear the multifunction bit
printf("PCI: adding new device %d : %d", dnum, fnum);
printf(" - vendor = 0x%x, device = 0x%x.\n", dev->vendor_id, dev->device_id);
pci_device_register(dev);
dev = pci_alloc_dev(); // alloc new aux. dev. structure
printf("PCI: adding new device %d : %d : %d", dev->bus->num, dnum, fnum);
printf(" - vendor = 0x%04X, device = 0x%04X.\n", dev->vendor_id, dev->device_id);
pci_device_register(dev);
if (header_type == PCI_HEADER_TYPE_BRIDGE || header_type == PCI_HEADER_TYPE_CARDBUS ) {
bus_num = pci_conf_read_8(dev, PCI_BRIDGE_SEC_BUS_NUM);
if(bus_num != bus->num) {
printf("PCI: device is pci-to-pci bridge, secondary bus number = %d.\n", bus_num);
if(bus_num > bus->num) {
child_bus = pci_alloc_bus();
pci_init_bus(child_bus, bus, bus_num);
pci_bus_register(child_bus);
57,6 → 59,8
pci_bus_scan(child_bus);
}
}
dev = pci_alloc_dev(); // alloc new aux. dev. structure
}
}