Kernel: Clarify and make it easy to not use raw numbers
Let's put the PCI IDs as enums in the PCI namespace so they're free to pollute that namespace, but it's also more easier to use them.
This commit is contained in:
parent
b4e230a7bb
commit
3fae7ca113
Notes:
sideshowbarker
2024-07-18 11:03:45 +09:00
Author: https://github.com/supercomputer7 Commit: https://github.com/SerenityOS/serenity/commit/3fae7ca1139 Pull-request: https://github.com/SerenityOS/serenity/pull/8399 Reviewed-by: https://github.com/alimpfard ✅
9 changed files with 25 additions and 21 deletions
|
@ -6,19 +6,22 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
namespace Kernel {
|
||||
namespace Kernel::PCI {
|
||||
|
||||
enum class PCIVendorID {
|
||||
enum VendorID {
|
||||
VirtIO = 0x1af4,
|
||||
Intel = 0x8086,
|
||||
WCH = 0x1c00,
|
||||
RedHat = 0x1b36,
|
||||
Realtek = 0x10ec
|
||||
Realtek = 0x10ec,
|
||||
QEMUOld = 0x1234,
|
||||
VirtualBox = 0x80ee
|
||||
};
|
||||
|
||||
enum class PCIDeviceID {
|
||||
enum DeviceID {
|
||||
VirtIOConsole = 0x1003,
|
||||
VirtIOEntropy = 0x1005,
|
||||
VirtIOGPU = 0x1050,
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -32,10 +32,10 @@ private:
|
|||
};
|
||||
|
||||
static constexpr BoardDefinition board_definitions[4] = {
|
||||
{ { (u16)PCIVendorID::WCH, 0x3253 }, "WCH CH382 2S", 2, 0, 0xC0, 8, SerialDevice::Baud::Baud115200 },
|
||||
{ { (u16)PCIVendorID::RedHat, 0x0002 }, "QEMU PCI 16550A", 1, 0, 0, 8, SerialDevice::Baud::Baud115200 },
|
||||
{ { (u16)PCIVendorID::RedHat, 0x0003 }, "QEMU PCI Dual-port 16550A", 2, 0, 0, 8, SerialDevice::Baud::Baud115200 },
|
||||
{ { (u16)PCIVendorID::RedHat, 0x0004 }, "QEMU PCI Quad-port 16550A", 4, 0, 0, 8, SerialDevice::Baud::Baud115200 }
|
||||
{ { PCI::VendorID::WCH, 0x3253 }, "WCH CH382 2S", 2, 0, 0xC0, 8, SerialDevice::Baud::Baud115200 },
|
||||
{ { PCI::VendorID::RedHat, 0x0002 }, "QEMU PCI 16550A", 1, 0, 0, 8, SerialDevice::Baud::Baud115200 },
|
||||
{ { PCI::VendorID::RedHat, 0x0003 }, "QEMU PCI Dual-port 16550A", 2, 0, 0, 8, SerialDevice::Baud::Baud115200 },
|
||||
{ { PCI::VendorID::RedHat, 0x0004 }, "QEMU PCI Quad-port 16550A", 4, 0, 0, 8, SerialDevice::Baud::Baud115200 }
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
#include <AK/Checked.h>
|
||||
#include <AK/Singleton.h>
|
||||
#include <Kernel/Bus/PCI/Access.h>
|
||||
#include <Kernel/Bus/PCI/IDs.h>
|
||||
#include <Kernel/Debug.h>
|
||||
#include <Kernel/Graphics/Bochs.h>
|
||||
#include <Kernel/Graphics/BochsGraphicsAdapter.h>
|
||||
|
@ -47,7 +48,7 @@ struct [[gnu::packed]] BochsDisplayMMIORegisters {
|
|||
UNMAP_AFTER_INIT NonnullRefPtr<BochsGraphicsAdapter> BochsGraphicsAdapter::initialize(PCI::Address address)
|
||||
{
|
||||
PCI::ID id = PCI::get_id(address);
|
||||
VERIFY((id.vendor_id == 0x1234 && id.device_id == 0x1111) || (id.vendor_id == 0x80ee && id.device_id == 0xbeef));
|
||||
VERIFY((id.vendor_id == PCI::VendorID::QEMUOld && id.device_id == 0x1111) || (id.vendor_id == PCI::VendorID::VirtualBox && id.device_id == 0xbeef));
|
||||
return adopt_ref(*new BochsGraphicsAdapter(address));
|
||||
}
|
||||
|
||||
|
|
|
@ -82,18 +82,18 @@ UNMAP_AFTER_INIT bool GraphicsManagement::determine_and_initialize_graphics_devi
|
|||
|
||||
RefPtr<GraphicsDevice> adapter;
|
||||
switch (id.vendor_id) {
|
||||
case 0x1234:
|
||||
case PCI::VendorID::QEMUOld:
|
||||
if (id.device_id == 0x1111)
|
||||
adapter = BochsGraphicsAdapter::initialize(address);
|
||||
break;
|
||||
case 0x80ee:
|
||||
case PCI::VendorID::VirtualBox:
|
||||
if (id.device_id == 0xbeef)
|
||||
adapter = BochsGraphicsAdapter::initialize(address);
|
||||
break;
|
||||
case 0x8086:
|
||||
case PCI::VendorID::Intel:
|
||||
adapter = IntelNativeGraphicsAdapter::initialize(address);
|
||||
break;
|
||||
case static_cast<u16>(PCIVendorID::VirtIO):
|
||||
case PCI::VendorID::VirtIO:
|
||||
dmesgln("Graphics: Using VirtIO console");
|
||||
adapter = Graphics::VirtIOGraphicsAdapter::initialize(address);
|
||||
break;
|
||||
|
|
|
@ -14,7 +14,7 @@ namespace Kernel::Graphics {
|
|||
|
||||
NonnullRefPtr<VirtIOGraphicsAdapter> VirtIOGraphicsAdapter::initialize(PCI::Address base_address)
|
||||
{
|
||||
VERIFY(PCI::get_id(base_address).vendor_id == static_cast<u16>(PCIVendorID::VirtIO));
|
||||
VERIFY(PCI::get_id(base_address).vendor_id == PCI::VendorID::VirtIO);
|
||||
return adopt_ref(*new VirtIOGraphicsAdapter(base_address));
|
||||
}
|
||||
|
||||
|
|
|
@ -183,7 +183,7 @@ static bool is_valid_device_id(u16 device_id)
|
|||
UNMAP_AFTER_INIT RefPtr<E1000ENetworkAdapter> E1000ENetworkAdapter::try_to_initialize(PCI::Address address)
|
||||
{
|
||||
auto id = PCI::get_id(address);
|
||||
if (id.vendor_id != (u16)PCIVendorID::Intel)
|
||||
if (id.vendor_id != PCI::VendorID::Intel)
|
||||
return {};
|
||||
if (!is_valid_device_id(id.device_id))
|
||||
return {};
|
||||
|
|
|
@ -160,7 +160,7 @@ UNMAP_AFTER_INIT static bool is_valid_device_id(u16 device_id)
|
|||
UNMAP_AFTER_INIT RefPtr<E1000NetworkAdapter> E1000NetworkAdapter::try_to_initialize(PCI::Address address)
|
||||
{
|
||||
auto id = PCI::get_id(address);
|
||||
if (id.vendor_id != (u16)PCIVendorID::Intel)
|
||||
if (id.vendor_id != PCI::VendorID::Intel)
|
||||
return {};
|
||||
if (!is_valid_device_id(id.device_id))
|
||||
return {};
|
||||
|
|
|
@ -179,7 +179,7 @@ namespace Kernel {
|
|||
UNMAP_AFTER_INIT RefPtr<RTL8168NetworkAdapter> RTL8168NetworkAdapter::try_to_initialize(PCI::Address address)
|
||||
{
|
||||
auto id = PCI::get_id(address);
|
||||
if (id.vendor_id != (u16)PCIVendorID::Realtek)
|
||||
if (id.vendor_id != PCI::VendorID::Realtek)
|
||||
return {};
|
||||
if (id.device_id != 0x8168)
|
||||
return {};
|
||||
|
|
|
@ -21,18 +21,18 @@ UNMAP_AFTER_INIT void VirtIO::detect()
|
|||
if (address.is_null() || id.is_null())
|
||||
return;
|
||||
// TODO: We should also be checking that the device_id is in between 0x1000 - 0x107F inclusive
|
||||
if (id.vendor_id != (u16)PCIVendorID::VirtIO)
|
||||
if (id.vendor_id != PCI::VendorID::VirtIO)
|
||||
return;
|
||||
switch (id.device_id) {
|
||||
case (u16)PCIDeviceID::VirtIOConsole: {
|
||||
case PCI::DeviceID::VirtIOConsole: {
|
||||
[[maybe_unused]] auto& unused = adopt_ref(*new VirtIOConsole(address)).leak_ref();
|
||||
break;
|
||||
}
|
||||
case (u16)PCIDeviceID::VirtIOEntropy: {
|
||||
case PCI::DeviceID::VirtIOEntropy: {
|
||||
[[maybe_unused]] auto& unused = adopt_ref(*new VirtIORNG(address)).leak_ref();
|
||||
break;
|
||||
}
|
||||
case (u16)PCIDeviceID::VirtIOGPU: {
|
||||
case PCI::DeviceID::VirtIOGPU: {
|
||||
// This should have been initialized by the graphics subsystem
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue