summaryrefslogtreecommitdiff
path: root/Kernel/PCI/Access.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Kernel/PCI/Access.cpp')
-rw-r--r--Kernel/PCI/Access.cpp30
1 files changed, 15 insertions, 15 deletions
diff --git a/Kernel/PCI/Access.cpp b/Kernel/PCI/Access.cpp
index 4bbe031265..197f00907b 100644
--- a/Kernel/PCI/Access.cpp
+++ b/Kernel/PCI/Access.cpp
@@ -64,7 +64,7 @@ PhysicalID Access::get_physical_id(Address address) const
for (auto physical_id : m_physical_ids) {
if (physical_id.address().seg() == address.seg()
&& physical_id.address().bus() == address.bus()
- && physical_id.address().slot() == address.slot()
+ && physical_id.address().device() == address.device()
&& physical_id.address().function() == address.function()) {
return physical_id;
}
@@ -99,43 +99,43 @@ u16 Access::early_read_type(Address address)
return (early_read8_field(address, PCI_CLASS) << 8u) | early_read8_field(address, PCI_SUBCLASS);
}
-void Access::enumerate_functions(int type, u8 bus, u8 slot, u8 function, Function<void(Address, ID)>& callback)
+void Access::enumerate_functions(int type, u8 bus, u8 device, u8 function, Function<void(Address, ID)>& callback, bool recursive)
{
- dbgln<PCI_DEBUG>("PCI: Enumerating function type={}, bus={}, slot={}, function={}", type, bus, slot, function);
- Address address(0, bus, slot, function);
+ dbgln<PCI_DEBUG>("PCI: Enumerating function type={}, bus={}, device={}, function={}", type, bus, device, function);
+ Address address(0, bus, device, function);
if (type == -1 || type == early_read_type(address))
callback(address, { early_read16_field(address, PCI_VENDOR_ID), early_read16_field(address, PCI_DEVICE_ID) });
- if (early_read_type(address) == PCI_TYPE_BRIDGE) {
+ if (early_read_type(address) == PCI_TYPE_BRIDGE && recursive) {
u8 secondary_bus = early_read8_field(address, PCI_SECONDARY_BUS);
#if PCI_DEBUG
klog() << "PCI: Found secondary bus: " << secondary_bus;
#endif
ASSERT(secondary_bus != bus);
- enumerate_bus(type, secondary_bus, callback);
+ enumerate_bus(type, secondary_bus, callback, recursive);
}
}
-void Access::enumerate_slot(int type, u8 bus, u8 slot, Function<void(Address, ID)>& callback)
+void Access::enumerate_device(int type, u8 bus, u8 device, Function<void(Address, ID)>& callback, bool recursive)
{
- dbgln<PCI_DEBUG>("PCI: Enumerating slot type={}, bus={}, slot={}", type, bus, slot);
- Address address(0, bus, slot, 0);
+ dbgln<PCI_DEBUG>("PCI: Enumerating device type={}, bus={}, device={}", type, bus, device);
+ Address address(0, bus, device, 0);
if (early_read16_field(address, PCI_VENDOR_ID) == PCI_NONE)
return;
- enumerate_functions(type, bus, slot, 0, callback);
+ enumerate_functions(type, bus, device, 0, callback, recursive);
if (!(early_read8_field(address, PCI_HEADER_TYPE) & 0x80))
return;
for (u8 function = 1; function < 8; ++function) {
- Address address(0, bus, slot, function);
+ Address address(0, bus, device, function);
if (early_read16_field(address, PCI_VENDOR_ID) != PCI_NONE)
- enumerate_functions(type, bus, slot, function, callback);
+ enumerate_functions(type, bus, device, function, callback, recursive);
}
}
-void Access::enumerate_bus(int type, u8 bus, Function<void(Address, ID)>& callback)
+void Access::enumerate_bus(int type, u8 bus, Function<void(Address, ID)>& callback, bool recursive)
{
dbgln<PCI_DEBUG>("PCI: Enumerating bus type={}, bus={}", type, bus);
- for (u8 slot = 0; slot < 32; ++slot)
- enumerate_slot(type, bus, slot, callback);
+ for (u8 device = 0; device < 32; ++device)
+ enumerate_device(type, bus, device, callback, recursive);
}
void Access::enumerate(Function<void(Address, ID)>& callback) const