Reuse virtual bus numbers when a mapping already exists.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23981 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Marcus Overhagen
2008-02-17 14:44:33 +00:00
parent fe19cba8f0
commit 6af5db20f4
2 changed files with 11 additions and 5 deletions
+8 -4
View File
@@ -381,13 +381,17 @@ PCI::CreateVirtualBus(int domain, uint8 bus, uint8 *virtualBus)
uint16 value = domain << 8 | bus;
// XXX iterate through entries 0 to fNextVirtualBus
// XXX and check if value is already present, return
// XXX key if found instead of inserting a new one
for (VirtualBusMap::Iterator it = fVirtualBusMap.Begin(); it != fVirtualBusMap.End(); ++it) {
if (it->Value() == value) {
*virtualBus = it->Key();
FLOW("PCI::CreateVirtualBus: domain %d, bus %d already in map => virtualBus %d\n", domain, bus, *virtualBus);
return B_OK;
}
}
*virtualBus = fNextVirtualBus++;
dprintf("CreateVirtualBus domain %d, bus %d => virtualBus %d\n", domain, bus, *virtualBus);
FLOW("PCI::CreateVirtualBus: domain %d, bus %d => virtualBus %d\n", domain, bus, *virtualBus);
return fVirtualBusMap.Insert(*virtualBus, value);
+3 -1
View File
@@ -119,7 +119,9 @@ class PCI {
int fDomainCount;
bool fBusEnumeration;
VectorMap<uint8, uint16> fVirtualBusMap;
typedef VectorMap<uint8, uint16> VirtualBusMap;
VirtualBusMap fVirtualBusMap;
int fNextVirtualBus;
};