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 class_id;
ubyte subclass_id; ubyte subclass_id;
ubyte if_id; ubyte if_id;
bool multifunction;
void initialize(Address address, ushort vendor_id, ushort device_id) void initialize(Address address, ushort vendor_id, ushort device_id)
{ {
@ -49,14 +50,7 @@ struct Pci
if (address.function_nr == 0u) if (address.function_nr == 0u)
{ {
uint reg3 = read_config_register(address, 3u); uint reg3 = read_config_register(address, 3u);
if ((reg3 & (1u << 23u)) != 0u) multifunction = (reg3 & (1u << 23u)) != 0u;
{
/* Multi-function device found. */
for (address.function_nr = 1u; address.function_nr < 8u; address.function_nr++)
{
scan(address);
}
}
} }
} }
} }
@ -133,6 +127,13 @@ struct Pci
ushort device_id = (reg0 >> 16u) & 0xFFFFu; ushort device_id = (reg0 >> 16u) & 0xFFFFu;
Device * device = A1.allocate!Device(); Device * device = A1.allocate!Device();
device.initialize(address, vendor_id, device_id); device.initialize(address, vendor_id, device_id);
if (device.multifunction)
{
for (address.function_nr = 1u; address.function_nr < 8u; address.function_nr++)
{
scan(address);
}
}
} }
} }