diff --git a/src/hulk/pci.d b/src/hulk/pci.d index 4178ba9..8f1f6e2 100644 --- a/src/hulk/pci.d +++ b/src/hulk/pci.d @@ -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); + } + } } }