diff options
author | Liav A <liavalb@gmail.com> | 2020-12-18 20:24:32 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2020-12-21 00:19:21 +0100 |
commit | 97b36febd5670550a209272db9587776c17237dd (patch) | |
tree | 9bc7434afdca67ced4f3b848af0fd41cd4f0893f /Kernel/PCI | |
parent | 85b4256d10633397516fa39fc3c41517c51ff63a (diff) | |
download | serenity-97b36febd5670550a209272db9587776c17237dd.zip |
Kernel: Add a method to retrieve the Physical ID for a PCI address
Diffstat (limited to 'Kernel/PCI')
-rw-r--r-- | Kernel/PCI/Access.cpp | 18 | ||||
-rw-r--r-- | Kernel/PCI/Access.h | 2 |
2 files changed, 20 insertions, 0 deletions
diff --git a/Kernel/PCI/Access.cpp b/Kernel/PCI/Access.cpp index 3941b77dc6..cb1fb7e18d 100644 --- a/Kernel/PCI/Access.cpp +++ b/Kernel/PCI/Access.cpp @@ -58,6 +58,19 @@ Access::Access() s_access = this; } +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().function() == address.function()) { + return physical_id; + } + } + ASSERT_NOT_REACHED(); +} + u8 Access::early_read8_field(Address address, u32 field) { IO::out32(PCI_ADDRESS_PORT, address.io_address_for_field(field)); @@ -137,6 +150,11 @@ Optional<u8> get_capabilities_pointer(Address address) return {}; } +PhysicalID get_physical_id(Address address) +{ + return Access::the().get_physical_id(address); +} + Vector<Capability> get_capabilities(Address address) { auto capabilities_pointer = PCI::get_capabilities_pointer(address); diff --git a/Kernel/PCI/Access.h b/Kernel/PCI/Access.h index 4b6ade98d2..2b53ceaf59 100644 --- a/Kernel/PCI/Access.h +++ b/Kernel/PCI/Access.h @@ -60,6 +60,8 @@ public: virtual u16 read16_field(Address address, u32 field) = 0; virtual u32 read32_field(Address address, u32 field) = 0; + PhysicalID get_physical_id(Address address) const; + protected: virtual void enumerate_hardware(Function<void(Address, ID)>) = 0; |