1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 09:07:35 +00:00

Kernel: Add some more PCI [Sub]Class IDs

This commit is contained in:
Hendiadyoin1 2023-09-11 16:02:45 +02:00 committed by Andrew Kaster
parent 66647b58d4
commit 693f3ad33e
3 changed files with 78 additions and 11 deletions

View file

@ -93,30 +93,80 @@ static constexpr u16 msix_control_enable = 0x8000;
// Taken from https://pcisig.com/sites/default/files/files/PCI_Code-ID_r_1_11__v24_Jan_2019.pdf // Taken from https://pcisig.com/sites/default/files/files/PCI_Code-ID_r_1_11__v24_Jan_2019.pdf
enum class ClassID { enum class ClassID {
MassStorage = 0x1, MassStorage = 0x01,
Multimedia = 0x4, Network = 0x02,
Bridge = 0x6, Display = 0x03,
Base = 0x8, Multimedia = 0x04,
Memory = 0x05,
Bridge = 0x06,
SimpleCommunication = 0x07,
Base = 0x08,
Input = 0x09,
DockingStation = 0x0A,
Processor = 0x0B,
SerialBus = 0x0C,
Wireless = 0x0D,
IntelligentIO = 0x0E,
SatelliteCommunication = 0x0F,
EncryptionDecryption = 0x10,
DataAcquisitionAndSignalProcessing = 0x11,
ProcessingAccelerator = 0x12,
NonEssentialInstrumentation = 0x13,
}; };
namespace MassStorage { namespace MassStorage {
enum class SubclassID { enum class SubclassID {
IDEController = 0x1, SCSIController = 0x00,
SATAController = 0x6, IDEController = 0x01,
NVMeController = 0x8, FloppyController = 0x02,
IPIController = 0x03,
RAIDController = 0x04,
ATAController = 0x05,
SATAController = 0x06,
SASController = 0x06,
NVMeController = 0x08 // Technically other non-volatile memory subsystems as well
}; };
enum class SATAProgIF { enum class SATAProgIF {
AHCI = 0x1, AHCI = 0x1,
}; };
} }
namespace Network {
enum class SubclassID {
Ethernet = 0x00,
TokenRing = 0x01,
FDD = 0x02,
ATM = 0x03,
ISDN = 0x04,
WorldFlip = 0x05,
PICMG_2_14_MultiComputing = 0x06,
InfiniBand = 0x07,
HostFabric = 0x08,
};
}
namespace Display {
enum class SubclassID {
VGA = 0x00,
XGA = 0x01,
ThreeD = 0x02,
};
}
namespace Multimedia { namespace Multimedia {
enum class SubclassID { enum class SubclassID {
AudioController = 0x1, Video = 0x00,
HDACompatibleController = 0x3, Audio = 0x01,
ComputerTelephony = 0x01,
HDACompatible = 0x3,
}; };
} }
@ -132,7 +182,21 @@ enum class SubclassID {
namespace Base { namespace Base {
enum class SubclassID { enum class SubclassID {
PIC = 0x00,
DMAController = 0x01,
Timer = 0x02,
RTCController = 0x03,
PCIHotplugController = 0x04,
SDHostController = 0x5, SDHostController = 0x5,
IOMMU = 0x06
};
}
namespace SerialBus {
enum class SubclassID {
USB = 0x03,
}; };
} }
@ -264,9 +328,12 @@ AK_MAKE_DISTINCT_NUMERIC_COMPARABLE_TO_ENUM(ClassCode, ClassID)
AK_TYPEDEF_DISTINCT_ORDERED_ID(u8, SubclassCode); AK_TYPEDEF_DISTINCT_ORDERED_ID(u8, SubclassCode);
AK_MAKE_DISTINCT_NUMERIC_COMPARABLE_TO_ENUM(SubclassCode, MassStorage::SubclassID); AK_MAKE_DISTINCT_NUMERIC_COMPARABLE_TO_ENUM(SubclassCode, MassStorage::SubclassID);
AK_MAKE_DISTINCT_NUMERIC_COMPARABLE_TO_ENUM(SubclassCode, Network::SubclassID);
AK_MAKE_DISTINCT_NUMERIC_COMPARABLE_TO_ENUM(SubclassCode, Display::SubclassID);
AK_MAKE_DISTINCT_NUMERIC_COMPARABLE_TO_ENUM(SubclassCode, Multimedia::SubclassID); AK_MAKE_DISTINCT_NUMERIC_COMPARABLE_TO_ENUM(SubclassCode, Multimedia::SubclassID);
AK_MAKE_DISTINCT_NUMERIC_COMPARABLE_TO_ENUM(SubclassCode, Bridge::SubclassID); AK_MAKE_DISTINCT_NUMERIC_COMPARABLE_TO_ENUM(SubclassCode, Bridge::SubclassID);
AK_MAKE_DISTINCT_NUMERIC_COMPARABLE_TO_ENUM(SubclassCode, Base::SubclassID); AK_MAKE_DISTINCT_NUMERIC_COMPARABLE_TO_ENUM(SubclassCode, Base::SubclassID);
AK_MAKE_DISTINCT_NUMERIC_COMPARABLE_TO_ENUM(SubclassCode, SerialBus::SubclassID);
AK_TYPEDEF_DISTINCT_ORDERED_ID(u8, ProgrammingInterface); AK_TYPEDEF_DISTINCT_ORDERED_ID(u8, ProgrammingInterface);
AK_TYPEDEF_DISTINCT_ORDERED_ID(u8, RevisionID); AK_TYPEDEF_DISTINCT_ORDERED_ID(u8, RevisionID);

View file

@ -35,7 +35,7 @@ UNMAP_AFTER_INIT ErrorOr<NonnullRefPtr<AudioController>> AC97::create(PCI::Devic
UNMAP_AFTER_INIT ErrorOr<bool> AC97::probe(PCI::DeviceIdentifier const& device_identifier) UNMAP_AFTER_INIT ErrorOr<bool> AC97::probe(PCI::DeviceIdentifier const& device_identifier)
{ {
VERIFY(device_identifier.class_code() == PCI::ClassID::Multimedia); VERIFY(device_identifier.class_code() == PCI::ClassID::Multimedia);
return device_identifier.subclass_code() == PCI::Multimedia::SubclassID::AudioController; return device_identifier.subclass_code() == PCI::Multimedia::SubclassID::Audio;
} }
UNMAP_AFTER_INIT AC97::AC97(PCI::DeviceIdentifier const& pci_device_identifier, NonnullOwnPtr<AC97Channel> pcm_out_channel, NonnullOwnPtr<IOWindow> mixer_io_window, NonnullOwnPtr<IOWindow> bus_io_window) UNMAP_AFTER_INIT AC97::AC97(PCI::DeviceIdentifier const& pci_device_identifier, NonnullOwnPtr<AC97Channel> pcm_out_channel, NonnullOwnPtr<IOWindow> mixer_io_window, NonnullOwnPtr<IOWindow> bus_io_window)

View file

@ -20,7 +20,7 @@ namespace Kernel::Audio::IntelHDA {
UNMAP_AFTER_INIT ErrorOr<bool> Controller::probe(PCI::DeviceIdentifier const& device_identifier) UNMAP_AFTER_INIT ErrorOr<bool> Controller::probe(PCI::DeviceIdentifier const& device_identifier)
{ {
VERIFY(device_identifier.class_code() == PCI::ClassID::Multimedia); VERIFY(device_identifier.class_code() == PCI::ClassID::Multimedia);
return device_identifier.subclass_code() == PCI::Multimedia::SubclassID::HDACompatibleController; return device_identifier.subclass_code() == PCI::Multimedia::SubclassID::HDACompatible;
} }
UNMAP_AFTER_INIT ErrorOr<NonnullRefPtr<AudioController>> Controller::create(PCI::DeviceIdentifier const& pci_device_identifier) UNMAP_AFTER_INIT ErrorOr<NonnullRefPtr<AudioController>> Controller::create(PCI::DeviceIdentifier const& pci_device_identifier)