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

This commit is contained in:
josh committed 2023-06-10 11:20:50 -04:00
1 parent d600e089e5
commit 657287c160
1 file changed
+9 -8
+9 -8
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);
}
}
} }
} }