summaryrefslogtreecommitdiff
path: root/Kernel/PCI/Access.h
diff options
context:
space:
mode:
authorAndreas Kling <kling@serenityos.org>2020-04-08 16:56:36 +0200
committerAndreas Kling <kling@serenityos.org>2020-04-08 17:19:46 +0200
commite1709a0904cfe6238035315247bbdaf620d2e7e2 (patch)
tree7775f9842ea75993c48e8f52cd0a3930d22cac91 /Kernel/PCI/Access.h
parente5a20697da7029ca6fc14caa385770d657859cb8 (diff)
downloadserenity-e1709a0904cfe6238035315247bbdaf620d2e7e2.zip
Kernel: Remove an unnecessary layer of indirection in the PCI code
The PCI access layer was composed of a bunch of virtual functions that did nothing but call other virtual functions. The first layer was never overridden so there was no need for them to be virtual. This patch removes the indirection and moves logic from PCI::Access down into the various PCI::get_foo() helpers that were the sole users.
Diffstat (limited to 'Kernel/PCI/Access.h')
-rw-r--r--Kernel/PCI/Access.h51
1 files changed, 6 insertions, 45 deletions
diff --git a/Kernel/PCI/Access.h b/Kernel/PCI/Access.h
index 05cb50e49b..40f8d37495 100644
--- a/Kernel/PCI/Access.h
+++ b/Kernel/PCI/Access.h
@@ -34,49 +34,10 @@ namespace Kernel {
class PCI::Access {
public:
virtual void enumerate_all(Function<void(Address, ID)>&) = 0;
- virtual u8 get_interrupt_line(Address address) { return read8_field(address, PCI_INTERRUPT_LINE); }
- virtual u32 get_BAR0(Address address) { return read32_field(address, PCI_BAR0); }
- virtual u32 get_BAR1(Address address) { return read32_field(address, PCI_BAR1); }
- virtual u32 get_BAR2(Address address) { return read32_field(address, PCI_BAR2); }
- virtual u32 get_BAR3(Address address) { return read32_field(address, PCI_BAR3); }
- virtual u32 get_BAR4(Address address) { return read32_field(address, PCI_BAR4); }
- virtual u32 get_BAR5(Address address) { return read32_field(address, PCI_BAR5); }
- virtual size_t get_BAR_Space_Size(Address address, u8 bar_number)
- {
- // See PCI Spec 2.3, Page 222
- ASSERT(bar_number < 6);
- u8 field = (PCI_BAR0 + (bar_number << 2));
- u32 bar_reserved = read32_field(address, field);
- write32_field(address, field, 0xFFFFFFFF);
- u32 space_size = read32_field(address, field);
- write32_field(address, field, bar_reserved);
- space_size &= 0xfffffff0;
- space_size = (~space_size) + 1;
- return space_size;
- }
- virtual ID get_id(Address address) final;
- virtual void enable_interrupt_line(Address address) final
- {
- write16_field(address, PCI_COMMAND, read16_field(address, PCI_COMMAND) & ~(1 << 10));
- }
- virtual void disable_interrupt_line(Address address) final
- {
- write16_field(address, PCI_COMMAND, read16_field(address, PCI_COMMAND) | 1 << 10);
- }
- virtual u8 get_revision_id(Address address) { return read8_field(address, PCI_REVISION_ID); }
- virtual u8 get_subclass(Address address) { return read8_field(address, PCI_SUBCLASS); }
- virtual u8 get_class(Address address) { return read8_field(address, PCI_CLASS); }
- virtual u16 get_subsystem_id(Address address) { return read16_field(address, PCI_SUBSYSTEM_ID); }
- virtual u16 get_subsystem_vendor_id(Address address) { return read16_field(address, PCI_SUBSYSTEM_VENDOR_ID); }
- virtual u16 read_type(Address address) { return (read8_field(address, PCI_CLASS) << 8u) | read8_field(address, PCI_SUBCLASS); }
-
- virtual void enable_bus_mastering(Address) final;
- virtual void disable_bus_mastering(Address) final;
-
- virtual void enumerate_bus(int type, u8 bus, Function<void(Address, ID)>&) final;
- virtual void enumerate_functions(int type, u8 bus, u8 slot, u8 function, Function<void(Address, ID)>& callback) final;
- virtual void enumerate_slot(int type, u8 bus, u8 slot, Function<void(Address, ID)>& callback) final;
+ void enumerate_bus(int type, u8 bus, Function<void(Address, ID)>&);
+ void enumerate_functions(int type, u8 bus, u8 slot, u8 function, Function<void(Address, ID)>& callback);
+ void enumerate_slot(int type, u8 bus, u8 slot, Function<void(Address, ID)>& callback);
static Access& the();
static bool is_initialized();
@@ -89,12 +50,12 @@ public:
virtual void write16_field(Address address, u32 field, u16 value) = 0;
virtual void write32_field(Address address, u32 field, u32 value) = 0;
-protected:
- Access();
-
virtual u8 read8_field(Address address, u32 field) = 0;
virtual u16 read16_field(Address address, u32 field) = 0;
virtual u32 read32_field(Address address, u32 field) = 0;
+
+protected:
+ Access();
};
}