Move Pci.scan() recursion into scan() itself

This commit is contained in:
Josh Holtrop 2023-06-10 11:20:50 -04:00
parent d600e089e5
commit 657287c160

View File

@ -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);
}
}
}
}