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 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user