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:
@@ -381,13 +381,17 @@ PCI::CreateVirtualBus(int domain, uint8 bus, uint8 *virtualBus)
|
|||||||
|
|
||||||
uint16 value = domain << 8 | bus;
|
uint16 value = domain << 8 | bus;
|
||||||
|
|
||||||
// XXX iterate through entries 0 to fNextVirtualBus
|
for (VirtualBusMap::Iterator it = fVirtualBusMap.Begin(); it != fVirtualBusMap.End(); ++it) {
|
||||||
// XXX and check if value is already present, return
|
if (it->Value() == value) {
|
||||||
// XXX key if found instead of inserting a new one
|
*virtualBus = it->Key();
|
||||||
|
FLOW("PCI::CreateVirtualBus: domain %d, bus %d already in map => virtualBus %d\n", domain, bus, *virtualBus);
|
||||||
|
return B_OK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
*virtualBus = fNextVirtualBus++;
|
*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);
|
return fVirtualBusMap.Insert(*virtualBus, value);
|
||||||
|
|
||||||
|
|||||||
@@ -119,7 +119,9 @@ class PCI {
|
|||||||
int fDomainCount;
|
int fDomainCount;
|
||||||
bool fBusEnumeration;
|
bool fBusEnumeration;
|
||||||
|
|
||||||
VectorMap<uint8, uint16> fVirtualBusMap;
|
typedef VectorMap<uint8, uint16> VirtualBusMap;
|
||||||
|
|
||||||
|
VirtualBusMap fVirtualBusMap;
|
||||||
int fNextVirtualBus;
|
int fNextVirtualBus;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user