Lines Matching defs:bus

33 // #pragma mark bus manager exports
47 uint8 bus;
51 if (gPCI->ResolveVirtualBus(virtualBus, &domain, &bus) != B_OK)
54 if (gPCI->ReadConfig(domain, bus, device, function, offset, size,
66 uint8 bus;
68 if (gPCI->ResolveVirtualBus(virtualBus, &domain, &bus) != B_OK)
71 gPCI->WriteConfig(domain, bus, device, function, offset, size, value);
96 uint8 bus;
98 if (gPCI->ResolveVirtualBus(virtualBus, &domain, &bus) != B_OK)
101 return gPCI->FindCapability(domain, bus, device, function, capID, offset);
109 uint8 bus;
111 if (gPCI->ResolveVirtualBus(virtualBus, &domain, &bus) != B_OK)
114 return gPCI->FindExtendedCapability(domain, bus, device, function, capID,
124 uint8 bus;
135 if (gPCI->ResolveVirtualBus(virtualBus, &domain, &bus) != B_OK)
139 // domain, bus, device, function, driverName, nodeCookie));
145 // location on PCI bus
147 {B_PCI_DEVICE_BUS, B_UINT8_TYPE, {.ui8 = bus}},
210 uint8 bus;
215 if (gPCI->ResolveVirtualBus(virtualBus, &domain, &bus) != B_OK)
219 // domain, bus, device, function, driverName, nodeCookie));
225 // location on PCI bus
227 {B_PCI_DEVICE_BUS, B_UINT8_TYPE, {.ui8 = bus}},
293 uint8 bus;
295 if (gPCI->ResolveVirtualBus(virtualBus, &domain, &bus) != B_OK)
298 return gPCI->UpdateInterruptLine(domain, bus, device, function,
306 uint8 bus;
308 if (gPCI->ResolveVirtualBus(virtualBus, &domain, &bus) != B_OK)
311 return gPCI->GetPowerstate(domain, bus, device, function, state);
318 uint8 bus;
320 if (gPCI->ResolveVirtualBus(virtualBus, &domain, &bus) != B_OK)
323 return gPCI->SetPowerstate(domain, bus, device, function, newState);
329 __pci_resolve_virtual_bus(uint8 virtualBus, uint8 *domain, uint8 *bus)
331 if (gPCI->ResolveVirtualBus(virtualBus, domain, bus) < B_OK)
465 gPCI->ClearDeviceStatus(data->bus, true);
481 // #pragma mark bus manager init/uninit
551 PCI::InitBus(PCIBus *bus)
554 _EnumerateBus(bus->domain, 0);
558 _FixupDevices(bus->domain, 0);
561 _DiscoverBus(bus);
562 _ConfigureBridges(bus);
563 ClearDeviceStatus(bus, false);
564 _RefreshDeviceInfo(bus);
574 PCI::_CreateVirtualBus(uint8 domain, uint8 bus, uint8 *virtualBus)
581 *virtualBus = bus;
587 panic("PCI::CreateVirtualBus: virtual bus number space exhausted");
589 uint16 value = domain << 8 | bus;
595 FLOW("PCI::CreateVirtualBus: domain %d, bus %d already in map => "
596 "virtualBus %d\n", domain, bus, *virtualBus);
603 FLOW("PCI::CreateVirtualBus: domain %d, bus %d => virtualBus %d\n", domain,
604 bus, *virtualBus);
613 PCI::ResolveVirtualBus(uint8 virtualBus, uint8 *domain, uint8 *bus)
618 *bus = virtualBus;
629 *bus = value & 0xff;
650 data.bus = new(std::nothrow) PCIBus {.domain = domain};
651 if (data.bus == NULL)
660 InitBus(data.bus);
663 _RefreshDeviceInfo(data.bus);
750 PCI::_NumFunctions(uint8 domain, uint8 bus, uint8 device)
752 uint8 type = ReadConfig(domain, bus, device,
764 if (_GetNthInfo(fDomainData[domain].bus, &currentIndex, index, outInfo) >= B_OK)
773 PCI::_GetNthInfo(PCIBus *bus, long *currentIndex, long wantIndex,
777 PCIDev *dev = bus->child;
795 PCI::_EnumerateBus(uint8 domain, uint8 bus, uint8 *subordinateBus)
797 TRACE(("PCI: EnumerateBus: domain %u, bus %u\n", domain, bus));
801 // step 1: disable all bridges on this bus
803 uint16 vendor_id = ReadConfig(domain, bus, dev, 0, PCI_vendor_id, 2);
807 int numFunctions = _NumFunctions(domain, bus, dev);
809 uint16 device_id = ReadConfig(domain, bus, dev, function,
814 uint8 baseClass = ReadConfig(domain, bus, dev, function,
816 uint8 subClass = ReadConfig(domain, bus, dev, function,
822 uint8 headerType = ReadConfig(domain, bus, dev, function,
827 TRACE(("PCI: found PCI-PCI bridge: domain %u, bus %u, dev %u, func %u\n",
828 domain, bus, dev, function));
829 TRACE(("PCI: original settings: pcicmd %04" B_PRIx32 ", primary-bus "
830 "%" B_PRIu32 ", secondary-bus %" B_PRIu32 ", subordinate-bus "
832 ReadConfig(domain, bus, dev, function, PCI_command, 2),
833 ReadConfig(domain, bus, dev, function, PCI_primary_bus, 1),
834 ReadConfig(domain, bus, dev, function, PCI_secondary_bus, 1),
835 ReadConfig(domain, bus, dev, function, PCI_subordinate_bus, 1)));
839 pcicmd = ReadConfig(domain, bus, dev, function, PCI_command, 2);
842 WriteConfig(domain, bus, dev, function, PCI_command, 2, pcicmd);
845 WriteConfig(domain, bus, dev, function, PCI_primary_bus, 1, 0);
846 WriteConfig(domain, bus, dev, function, PCI_secondary_bus, 1, 0);
847 WriteConfig(domain, bus, dev, function, PCI_subordinate_bus, 1, 0);
849 TRACE(("PCI: disabled settings: pcicmd %04" B_PRIx32 ", primary-bus "
850 "%" B_PRIu32 ", secondary-bus %" B_PRIu32 ", subordinate-bus "
852 ReadConfig(domain, bus, dev, function, PCI_command, 2),
853 ReadConfig(domain, bus, dev, function, PCI_primary_bus, 1),
854 ReadConfig(domain, bus, dev, function, PCI_secondary_bus, 1),
855 ReadConfig(domain, bus, dev, function, PCI_subordinate_bus, 1)));
859 uint8 lastUsedBusNumber = bus;
863 uint16 vendor_id = ReadConfig(domain, bus, dev, 0, PCI_vendor_id, 2);
867 int numFunctions = _NumFunctions(domain, bus, dev);
869 uint16 deviceID = ReadConfig(domain, bus, dev, function,
874 uint8 baseClass = ReadConfig(domain, bus, dev, function,
876 uint8 subClass = ReadConfig(domain, bus, dev, function,
882 uint8 headerType = ReadConfig(domain, bus, dev, function,
887 TRACE(("PCI: configuring PCI-PCI bridge: domain %u, bus %u, dev %u, func %u\n",
888 domain, bus, dev, function));
890 // open Scheunentor for enumerating the bus behind the bridge
891 WriteConfig(domain, bus, dev, function, PCI_primary_bus, 1, bus);
892 WriteConfig(domain, bus, dev, function, PCI_secondary_bus, 1,
894 WriteConfig(domain, bus, dev, function, PCI_subordinate_bus, 1, 255);
898 pcicmd = ReadConfig(domain, bus, dev, function, PCI_command, 2);
900 WriteConfig(domain, bus, dev, function, PCI_command, 2, pcicmd);
902 TRACE(("PCI: probing settings: pcicmd %04" B_PRIx32 ", primary-bus "
903 "%" B_PRIu32 ", secondary-bus %" B_PRIu32 ", subordinate-bus "
905 ReadConfig(domain, bus, dev, function, PCI_command, 2),
906 ReadConfig(domain, bus, dev, function, PCI_primary_bus, 1),
907 ReadConfig(domain, bus, dev, function, PCI_secondary_bus, 1),
908 ReadConfig(domain, bus, dev, function, PCI_subordinate_bus, 1)));
910 // enumerate bus
914 WriteConfig(domain, bus, dev, function, PCI_subordinate_bus, 1, lastUsedBusNumber);
916 TRACE(("PCI: configured settings: pcicmd %04" B_PRIx32 ", primary-bus "
917 "%" B_PRIu32 ", secondary-bus %" B_PRIu32 ", subordinate-bus "
919 ReadConfig(domain, bus, dev, function, PCI_command, 2),
920 ReadConfig(domain, bus, dev, function, PCI_primary_bus, 1),
921 ReadConfig(domain, bus, dev, function, PCI_secondary_bus, 1),
922 ReadConfig(domain, bus, dev, function, PCI_subordinate_bus, 1)));
928 TRACE(("PCI: EnumerateBus done: domain %u, bus %u, last used bus number %u\n", domain, bus, lastUsedBusNumber));
933 PCI::_FixupDevices(uint8 domain, uint8 bus)
935 FLOW("PCI: FixupDevices domain %u, bus %u\n", domain, bus);
949 uint16 vendorId = ReadConfig(domain, bus, dev, 0, PCI_vendor_id, 2);
953 int numFunctions = _NumFunctions(domain, bus, dev);
955 uint16 deviceId = ReadConfig(domain, bus, dev, function,
960 pci_fixup_device(this, domain, bus, dev, function);
962 uint8 baseClass = ReadConfig(domain, bus, dev, function,
966 uint8 subClass = ReadConfig(domain, bus, dev, function,
973 uint8 headerType = ReadConfig(domain, bus, dev, function,
976 dprintf("PCI: dom %u, bus %u, dev %2u, func %u, PCI bridge"
978 domain, bus, dev, function, headerType);
983 int busBehindBridge = ReadConfig(domain, bus, dev, function,
986 TRACE(("PCI: FixupDevices: checking bus %d behind %04x:%04x\n",
996 PCI::_ConfigureBridges(PCIBus *bus)
998 for (PCIDev *dev = bus->child; dev; dev = dev->next) {
1003 uint16 bridgeControlOld = ReadConfig(dev->domain, dev->bus,
1016 WriteConfig(dev->domain, dev->bus, dev->device, dev->function,
1018 bridgeControlNew = ReadConfig(dev->domain, dev->bus, dev->device,
1020 dprintf("PCI: dom %u, bus %u, dev %2u, func %u, changed PCI bridge"
1021 " control from 0x%04x to 0x%04x\n", dev->domain, dev->bus,
1033 PCI::ClearDeviceStatus(PCIBus *bus, bool dumpStatus)
1035 for (PCIDev *dev = bus->child; dev; dev = dev->next) {
1037 uint16 status = ReadConfig(dev->domain, dev->bus, dev->device,
1039 WriteConfig(dev->domain, dev->bus, dev->device, dev->function,
1042 kprintf("domain %u, bus %u, dev %2u, func %u, PCI device status "
1043 "0x%04x\n", dev->domain, dev->bus, dev->device, dev->function,
1062 uint16 secondaryStatus = ReadConfig(dev->domain, dev->bus,
1064 WriteConfig(dev->domain, dev->bus, dev->device, dev->function,
1067 kprintf("domain %u, bus %u, dev %2u, func %u, PCI bridge "
1068 "secondary status 0x%04x\n", dev->domain, dev->bus,
1085 uint16 bridgeControl = ReadConfig(dev->domain, dev->bus,
1087 WriteConfig(dev->domain, dev->bus, dev->device, dev->function,
1090 kprintf("domain %u, bus %u, dev %2u, func %u, PCI bridge "
1091 "control 0x%04x\n", dev->domain, dev->bus, dev->device,
1106 PCI::_DiscoverBus(PCIBus *bus)
1108 FLOW("PCI: DiscoverBus, domain %u, bus %u\n", bus->domain, bus->bus);
1110 int maxBusDevices = _GetDomainData(bus->domain)->max_bus_devices;
1122 uint16 vendorID = ReadConfig(bus->domain, bus->bus, dev, 0,
1127 int numFunctions = _NumFunctions(bus->domain, bus->bus, dev);
1129 _DiscoverDevice(bus, dev, function);
1137 PCI::_DiscoverDevice(PCIBus *bus, uint8 dev, uint8 function)
1139 FLOW("PCI: DiscoverDevice, domain %u, bus %u, dev %u, func %u\n", bus->domain, bus->bus, dev, function);
1141 uint16 deviceID = ReadConfig(bus->domain, bus->bus, dev, function,
1146 PCIDev *newDev = _CreateDevice(bus, dev, function);
1148 uint8 baseClass = ReadConfig(bus->domain, bus->bus, dev, function,
1150 uint8 subClass = ReadConfig(bus->domain, bus->bus, dev, function,
1152 uint8 headerType = ReadConfig(bus->domain, bus->bus, dev, function,
1156 uint8 secondaryBus = ReadConfig(bus->domain, bus->bus, dev, function,
1158 PCIBus *newBus = _CreateBus(newDev, bus->domain, secondaryBus);
1165 PCI::_CreateBus(PCIDev *parent, uint8 domain, uint8 bus)
1174 newBus->bus = bus;
1186 FLOW("PCI: CreateDevice, domain %u, bus %u, dev %u, func %u:\n", parent->domain,
1187 parent->bus, device, function);
1197 newDev->bus = parent->bus;
1241 uint64 pciAddress = ReadConfig(dev->domain, dev->bus, dev->device,
1243 WriteConfig(dev->domain, dev->bus, dev->device, dev->function, offset, 4,
1245 uint64 size = ReadConfig(dev->domain, dev->bus, dev->device, dev->function,
1247 WriteConfig(dev->domain, dev->bus, dev->device, dev->function, offset, 4,
1258 uint64 highPCIAddress = ReadConfig(dev->domain, dev->bus,
1260 WriteConfig(dev->domain, dev->bus, dev->device, dev->function,
1262 uint64 highSize = ReadConfig(dev->domain, dev->bus, dev->device,
1264 WriteConfig(dev->domain, dev->bus, dev->device, dev->function,
1301 uint32 oldValue = ReadConfig(dev->domain, dev->bus, dev->device, dev->function,
1303 WriteConfig(dev->domain, dev->bus, dev->device, dev->function, offset, 4,
1305 uint32 newValue = ReadConfig(dev->domain, dev->bus, dev->device, dev->function,
1307 WriteConfig(dev->domain, dev->bus, dev->device, dev->function, offset, 4,
1323 if (_CreateVirtualBus(dev->domain, dev->bus, &virtualBus) != B_OK) {
1324 dprintf("PCI: CreateVirtualBus failed, domain %u, bus %u\n", dev->domain, dev->bus);
1328 dev->info.vendor_id = ReadConfig(dev->domain, dev->bus, dev->device,
1330 dev->info.device_id = ReadConfig(dev->domain, dev->bus, dev->device,
1332 dev->info.bus = virtualBus;
1335 dev->info.revision = ReadConfig(dev->domain, dev->bus, dev->device,
1337 dev->info.class_api = ReadConfig(dev->domain, dev->bus, dev->device,
1339 dev->info.class_sub = ReadConfig(dev->domain, dev->bus, dev->device,
1341 dev->info.class_base = ReadConfig(dev->domain, dev->bus, dev->device,
1343 dev->info.line_size = ReadConfig(dev->domain, dev->bus, dev->device,
1345 dev->info.latency = ReadConfig(dev->domain, dev->bus, dev->device,
1349 dev->info.header_type = ReadConfig(dev->domain, dev->bus, dev->device,
1351 dev->info.bist = ReadConfig(dev->domain, dev->bus, dev->device,
1365 uint16 pcicmd = ReadConfig(dev->domain, dev->bus, dev->device,
1367 WriteConfig(dev->domain, dev->bus, dev->device, dev->function,
1386 WriteConfig(dev->domain, dev->bus, dev->device, dev->function,
1392 dev->info.u.h0.cardbus_cis = ReadConfig(dev->domain, dev->bus,
1394 dev->info.u.h0.subsystem_id = ReadConfig(dev->domain, dev->bus,
1397 dev->bus, dev->device, dev->function, PCI_subsystem_vendor_id,
1399 dev->info.u.h0.interrupt_line = ReadConfig(dev->domain, dev->bus,
1401 dev->info.u.h0.interrupt_pin = ReadConfig(dev->domain, dev->bus,
1403 dev->info.u.h0.min_grant = ReadConfig(dev->domain, dev->bus,
1405 dev->info.u.h0.max_latency = ReadConfig(dev->domain, dev->bus,
1414 uint16 pcicmd = ReadConfig(dev->domain, dev->bus, dev->device,
1416 WriteConfig(dev->domain, dev->bus, dev->device, dev->function,
1434 WriteConfig(dev->domain, dev->bus, dev->device, dev->function,
1440 dev->info.u.h1.primary_bus = ReadConfig(dev->domain, dev->bus,
1442 dev->info.u.h1.secondary_bus = ReadConfig(dev->domain, dev->bus,
1445 dev->bus, dev->device, dev->function, PCI_subordinate_bus, 1);
1447 dev->bus, dev->device, dev->function, PCI_secondary_latency, 1);
1448 dev->info.u.h1.io_base = ReadConfig(dev->domain, dev->bus,
1450 dev->info.u.h1.io_limit = ReadConfig(dev->domain, dev->bus,
1453 dev->bus, dev->device, dev->function, PCI_secondary_status, 2);
1454 dev->info.u.h1.memory_base = ReadConfig(dev->domain, dev->bus,
1456 dev->info.u.h1.memory_limit = ReadConfig(dev->domain, dev->bus,
1459 dev->bus, dev->device, dev->function,
1462 dev->domain, dev->bus, dev->device, dev->function,
1465 dev->domain, dev->bus, dev->device, dev->function,
1468 dev->domain, dev->bus, dev->device, dev->function,
1471 dev->bus, dev->device, dev->function, PCI_io_base_upper16, 2);
1473 dev->bus, dev->device, dev->function, PCI_io_limit_upper16, 2);
1474 dev->info.u.h1.interrupt_line = ReadConfig(dev->domain, dev->bus,
1476 dev->info.u.h1.interrupt_pin = ReadConfig(dev->domain, dev->bus,
1478 dev->info.u.h1.bridge_control = ReadConfig(dev->domain, dev->bus,
1480 dev->info.u.h1.subsystem_id = ReadConfig(dev->domain, dev->bus,
1483 dev->bus, dev->device, dev->function, PCI_sub_vendor_id_1, 2);
1490 dev->info.u.h2.subsystem_id = ReadConfig(dev->domain, dev->bus,
1493 dev->bus, dev->device, dev->function, PCI_sub_vendor_id_2, 2);
1494 dev->info.u.h2.primary_bus = ReadConfig(dev->domain, dev->bus,
1496 dev->info.u.h2.secondary_bus = ReadConfig(dev->domain, dev->bus,
1499 dev->bus, dev->device, dev->function, PCI_subordinate_bus_2, 1);
1501 dev->bus, dev->device, dev->function, PCI_secondary_latency_2, 1);
1503 dev->info.u.h2.memory_base = ReadConfig(dev->domain, dev->bus,
1505 dev->info.u.h2.memory_limit = ReadConfig(dev->domain, dev->bus,
1508 dev->bus, dev->device, dev->function, PCI_memory_base1_2, 4);
1510 dev->bus, dev->device, dev->function, PCI_memory_limit1_2, 4);
1511 dev->info.u.h2.io_base = ReadConfig(dev->domain, dev->bus,
1513 dev->info.u.h2.io_limit = ReadConfig(dev->domain, dev->bus,
1516 dev->bus, dev->device, dev->function, PCI_io_base1_2, 4);
1518 dev->bus, dev->device, dev->function, PCI_io_limit1_2, 4);
1520 dev->bus, dev->device, dev->function, PCI_secondary_status_2, 2);
1522 dev->bus, dev->device, dev->function, PCI_bridge_control_2, 2);
1537 _RefreshDeviceInfo(fDomainData[domain].bus);
1542 PCI::_RefreshDeviceInfo(PCIBus *bus)
1544 for (PCIDev *dev = bus->child; dev; dev = dev->next) {
1557 PCI::ReadConfig(uint8 domain, uint8 bus, uint8 device, uint8 function,
1569 dprintf("PCI: can't read config for domain %d, bus %u, device %u, function %u, offset %u, size %u\n",
1570 domain, bus, device, function, offset, size);
1574 return (*info->controller->read_pci_config)(info->controller_cookie, bus,
1580 PCI::ReadConfig(uint8 domain, uint8 bus, uint8 device, uint8 function,
1584 if (ReadConfig(domain, bus, device, function, offset, size, &value)
1596 if (ReadConfig(device->domain, device->bus, device->device,
1605 PCI::WriteConfig(uint8 domain, uint8 bus, uint8 device, uint8 function,
1617 dprintf("PCI: can't write config for domain %d, bus %u, device %u, function %u, offset %u, size %u\n",
1618 domain, bus, device, function, offset, size);
1622 return (*info->controller->write_pci_config)(info->controller_cookie, bus,
1630 return WriteConfig(device->domain, device->bus, device->device,
1636 PCI::FindCapability(uint8 domain, uint8 bus, uint8 device, uint8 function,
1639 uint16 status = ReadConfig(domain, bus, device, function, PCI_status, 2);
1642 "not supported\n", bus, device, function, capID);
1646 uint8 headerType = ReadConfig(domain, bus, device, function,
1660 "%#02x unknown header type\n", bus, device, function, capID);
1664 capPointer = ReadConfig(domain, bus, device, function, capPointer, 1);
1668 "empty list\n", bus, device, function, capID);
1673 if (ReadConfig(domain, bus, device, function, capPointer, 1) == capID) {
1679 capPointer = ReadConfig(domain, bus, device, function, capPointer + 1,
1687 TRACE_CAP("PCI: find_pci_capability ERROR %u:%u:%u capability %#02x circular list\n", bus, device, function, capID);
1695 return FindCapability(device->domain, device->bus, device->device,
1701 PCI::FindExtendedCapability(uint8 domain, uint8 bus, uint8 device,
1704 if (FindCapability(domain, bus, device, function, PCI_cap_id_pcie)
1707 "not supported\n", bus, device, function, capID);
1711 uint32 capability = ReadConfig(domain, bus, device, function,
1727 capability = ReadConfig(domain, bus, device, function,
1732 "circular list\n", bus, device, function, capID);
1740 return FindExtendedCapability(device->domain, device->bus, device->device,
1746 PCI::FindHTCapability(uint8 domain, uint8 bus, uint8 device,
1753 capPointer = ReadConfig(domain, bus, device, function, *offset + 1,
1755 } else if (FindCapability(domain, bus, device, function, PCI_cap_id_ht,
1758 "not supported\n", bus, device, function, capID);
1770 uint8 capability = ReadConfig(domain, bus, device, function,
1773 if ((ReadConfig(domain, bus, device, function,
1781 capPointer = ReadConfig(domain, bus, device, function, capPointer + 1,
1786 "circular list\n", bus, device, function, capID);
1794 return FindHTCapability(device->domain, device->bus, device->device,
1800 PCI::FindDevice(uint8 domain, uint8 bus, uint8 device, uint8 function)
1805 return _FindDevice(fDomainData[domain].bus, domain, bus, device, function);
1810 PCI::_FindDevice(PCIBus *current, uint8 domain, uint8 bus, uint8 device,
1814 // search device on this bus
1818 if (child->bus == bus && child->device == device
1824 PCIDev *found = _FindDevice(child->child, domain, bus, device,
1837 PCI::UpdateInterruptLine(uint8 domain, uint8 bus, uint8 _device, uint8 function,
1840 PCIDev *device = FindDevice(domain, bus, _device, function);
1893 PCI::GetPowerstate(uint8 domain, uint8 bus, uint8 _device, uint8 function,
1896 PCIDev *device = FindDevice(domain, bus, _device, function);
1906 PCI::SetPowerstate(uint8 domain, uint8 bus, uint8 _device, uint8 function,
1909 PCIDev *device = FindDevice(domain, bus, _device, function);
2240 status_t result = FindCapability(device->domain, device->bus,
2247 info->control_value = ReadConfig(device->domain, device->bus,
2266 status_t result = FindCapability(device->domain, device->bus,
2273 info->control_value = ReadConfig(device->domain, device->bus,
2283 uint32 table_value = ReadConfig(device->domain, device->bus,
2286 uint32 pba_value = ReadConfig(device->domain, device->bus,