Move Pci.scan() recursion into scan() itself
This commit is contained in:
parent
d600e089e5
commit
657287c160
@ -32,6 +32,7 @@ struct Pci
|
||||
ubyte class_id;
|
||||
ubyte subclass_id;
|
||||
ubyte if_id;
|
||||
bool multifunction;
|
||||
|
||||
void initialize(Address address, ushort vendor_id, ushort device_id)
|
||||
{
|
||||
@ -49,14 +50,7 @@ struct Pci
|
||||
if (address.function_nr == 0u)
|
||||
{
|
||||
uint reg3 = read_config_register(address, 3u);
|
||||
if ((reg3 & (1u << 23u)) != 0u)
|
||||
{
|
||||
/* Multi-function device found. */
|
||||
for (address.function_nr = 1u; address.function_nr < 8u; address.function_nr++)
|
||||
{
|
||||
scan(address);
|
||||
}
|
||||
}
|
||||
multifunction = (reg3 & (1u << 23u)) != 0u;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -133,6 +127,13 @@ struct Pci
|
||||
ushort device_id = (reg0 >> 16u) & 0xFFFFu;
|
||||
Device * device = A1.allocate!Device();
|
||||
device.initialize(address, vendor_id, device_id);
|
||||
if (device.multifunction)
|
||||
{
|
||||
for (address.function_nr = 1u; address.function_nr < 8u; address.function_nr++)
|
||||
{
|
||||
scan(address);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user