1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 10:58:12 +00:00

Kernel: Use nested Kernel::PCI namespaces more to reduce PCI:: spam

This commit is contained in:
Andreas Kling 2020-04-08 17:29:37 +02:00
parent e5ec332eb1
commit a6a8f36a83
4 changed files with 57 additions and 50 deletions

View file

@ -28,53 +28,54 @@
#include <LibBareMetal/IO.h>
namespace Kernel {
namespace PCI {
void PCI::IOAccess::initialize()
void IOAccess::initialize()
{
if (!PCI::Access::is_initialized())
new PCI::IOAccess();
if (!Access::is_initialized())
new IOAccess();
}
PCI::IOAccess::IOAccess()
IOAccess::IOAccess()
{
klog() << "PCI: Using IO Mechanism for PCI Configuartion Space Access";
}
u8 PCI::IOAccess::read8_field(Address address, u32 field)
u8 IOAccess::read8_field(Address address, u32 field)
{
IO::out32(PCI_ADDRESS_PORT, address.io_address_for_field(field));
return IO::in8(PCI_VALUE_PORT + (field & 3));
}
u16 PCI::IOAccess::read16_field(Address address, u32 field)
u16 IOAccess::read16_field(Address address, u32 field)
{
IO::out32(PCI_ADDRESS_PORT, address.io_address_for_field(field));
return IO::in16(PCI_VALUE_PORT + (field & 2));
}
u32 PCI::IOAccess::read32_field(Address address, u32 field)
u32 IOAccess::read32_field(Address address, u32 field)
{
IO::out32(PCI_ADDRESS_PORT, address.io_address_for_field(field));
return IO::in32(PCI_VALUE_PORT);
}
void PCI::IOAccess::write8_field(Address address, u32 field, u8 value)
void IOAccess::write8_field(Address address, u32 field, u8 value)
{
IO::out32(PCI_ADDRESS_PORT, address.io_address_for_field(field));
IO::out8(PCI_VALUE_PORT + (field & 3), value);
}
void PCI::IOAccess::write16_field(Address address, u32 field, u16 value)
void IOAccess::write16_field(Address address, u32 field, u16 value)
{
IO::out32(PCI_ADDRESS_PORT, address.io_address_for_field(field));
IO::out16(PCI_VALUE_PORT + (field & 2), value);
}
void PCI::IOAccess::write32_field(Address address, u32 field, u32 value)
void IOAccess::write32_field(Address address, u32 field, u32 value)
{
IO::out32(PCI_ADDRESS_PORT, address.io_address_for_field(field));
IO::out32(PCI_VALUE_PORT, value);
}
void PCI::IOAccess::enumerate_all(Function<void(Address, ID)>& callback)
void IOAccess::enumerate_all(Function<void(Address, ID)>& callback)
{
// Single PCI host controller.
if ((read8_field(Address(), PCI_HEADER_TYPE) & 0x80) == 0) {
@ -91,3 +92,4 @@ void PCI::IOAccess::enumerate_all(Function<void(Address, ID)>& callback)
}
}
}