Kernel: Move PCI vendor and device IDs into Kernel/PCI/IDs.h

This commit is contained in:
Gunnar Beutner 2021-04-27 10:54:22 +02:00 committed by Andreas Kling
parent eaf8fc90e7
commit bf703ee553
Notes: sideshowbarker 2024-07-18 19:02:25 +09:00
6 changed files with 27 additions and 12 deletions

View file

@ -7,6 +7,7 @@
#include <AK/MACAddress.h> #include <AK/MACAddress.h>
#include <Kernel/Debug.h> #include <Kernel/Debug.h>
#include <Kernel/Net/E1000NetworkAdapter.h> #include <Kernel/Net/E1000NetworkAdapter.h>
#include <Kernel/PCI/IDs.h>
namespace Kernel { namespace Kernel {
@ -117,8 +118,6 @@ namespace Kernel {
#define INTERRUPT_TXD_LOW (1 << 15) #define INTERRUPT_TXD_LOW (1 << 15)
#define INTERRUPT_SRPD (1 << 16) #define INTERRUPT_SRPD (1 << 16)
#define PCI_VENDOR_INTEL 0x8086
// https://www.intel.com/content/dam/doc/manual/pci-pci-x-family-gbe-controllers-software-dev-manual.pdf Section 5.2 // https://www.intel.com/content/dam/doc/manual/pci-pci-x-family-gbe-controllers-software-dev-manual.pdf Section 5.2
static bool is_valid_device_id(u16 device_id) static bool is_valid_device_id(u16 device_id)
{ {
@ -162,7 +161,7 @@ UNMAP_AFTER_INIT void E1000NetworkAdapter::detect()
PCI::enumerate([&](const PCI::Address& address, PCI::ID id) { PCI::enumerate([&](const PCI::Address& address, PCI::ID id) {
if (address.is_null()) if (address.is_null())
return; return;
if (id.vendor_id != PCI_VENDOR_INTEL) if (id.vendor_id != (u16)PCIVendorID::Intel)
return; return;
if (!is_valid_device_id(id.device_id)) if (!is_valid_device_id(id.device_id))
return; return;

21
Kernel/PCI/IDs.h Normal file
View file

@ -0,0 +1,21 @@
/*
* Copyright (c) 2021, Gunnar Beutner <gbeutner@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
namespace Kernel {
enum class PCIVendorID {
VirtIO = 0x1af4,
Intel = 0x8086,
};
enum class PCIDeviceID {
VirtIOConsole = 0x1003,
VirtIOEntropy = 0x1005,
};
}

View file

@ -5,6 +5,7 @@
*/ */
#include <Kernel/CommandLine.h> #include <Kernel/CommandLine.h>
#include <Kernel/PCI/IDs.h>
#include <Kernel/VirtIO/VirtIO.h> #include <Kernel/VirtIO/VirtIO.h>
#include <Kernel/VirtIO/VirtIOConsole.h> #include <Kernel/VirtIO/VirtIOConsole.h>
#include <Kernel/VirtIO/VirtIORNG.h> #include <Kernel/VirtIO/VirtIORNG.h>
@ -18,14 +19,14 @@ void VirtIO::detect()
PCI::enumerate([&](const PCI::Address& address, PCI::ID id) { PCI::enumerate([&](const PCI::Address& address, PCI::ID id) {
if (address.is_null() || id.is_null()) if (address.is_null() || id.is_null())
return; return;
if (id.vendor_id != VIRTIO_PCI_VENDOR_ID) if (id.vendor_id != (u16)PCIVendorID::VirtIO)
return; return;
switch (id.device_id) { switch (id.device_id) {
case VIRTIO_CONSOLE_PCI_DEVICE_ID: { case (u16)PCIDeviceID::VirtIOConsole: {
[[maybe_unused]] auto& unused = adopt_ref(*new VirtIOConsole(address)).leak_ref(); [[maybe_unused]] auto& unused = adopt_ref(*new VirtIOConsole(address)).leak_ref();
break; break;
} }
case VIRTIO_ENTROPY_PCI_DEVICE_ID: { case (u16)PCIDeviceID::VirtIOEntropy: {
[[maybe_unused]] auto& unused = adopt_ref(*new VirtIORNG(address)).leak_ref(); [[maybe_unused]] auto& unused = adopt_ref(*new VirtIORNG(address)).leak_ref();
break; break;
} }

View file

@ -17,8 +17,6 @@
namespace Kernel { namespace Kernel {
#define VIRTIO_PCI_VENDOR_ID 0x1AF4
#define REG_DEVICE_FEATURES 0x0 #define REG_DEVICE_FEATURES 0x0
#define REG_GUEST_FEATURES 0x4 #define REG_GUEST_FEATURES 0x4
#define REG_QUEUE_ADDRESS 0x8 #define REG_QUEUE_ADDRESS 0x8

View file

@ -11,8 +11,6 @@
namespace Kernel { namespace Kernel {
#define VIRTIO_CONSOLE_PCI_DEVICE_ID 0x1003
#define VIRTIO_CONSOLE_F_SIZE (1 << 0) #define VIRTIO_CONSOLE_F_SIZE (1 << 0)
#define VIRTIO_CONSOLE_F_MULTIPORT (1 << 1) #define VIRTIO_CONSOLE_F_MULTIPORT (1 << 1)
#define VIRTIO_CONSOLE_F_EMERG_WRITE (1 << 2) #define VIRTIO_CONSOLE_F_EMERG_WRITE (1 << 2)

View file

@ -12,8 +12,6 @@
namespace Kernel { namespace Kernel {
#define VIRTIO_ENTROPY_PCI_DEVICE_ID 0x1005
#define REQUESTQ 0 #define REQUESTQ 0
class VirtIORNG final : public CharacterDevice class VirtIORNG final : public CharacterDevice