diff --git a/Source/Mosa.BareMetal.HelloWorld/Apps/ShowPCI.cs b/Source/Mosa.BareMetal.HelloWorld/Apps/ShowPCI.cs index 3d369d4cfc..739ea36739 100644 --- a/Source/Mosa.BareMetal.HelloWorld/Apps/ShowPCI.cs +++ b/Source/Mosa.BareMetal.HelloWorld/Apps/ShowPCI.cs @@ -24,10 +24,10 @@ public void Execute() Program.Bullet(ConsoleColor.Yellow); Console.Write(" "); - var pciDevice = (PCIDevice)device.Parent.DeviceDriver; + var pciDevice = (PCIDeviceConfiguration)device.Configuration; var name = device.DeviceDriverRegistryEntry == null ? "UnknownPCIDevice" : device.Name; - Program.InBrackets(pciDevice.Device.Name + ": " + name + " " + pciDevice.VendorID.ToString("x") + ":" + pciDevice.DeviceID.ToString("x") + " " + pciDevice.SubSystemID.ToString("x") + ":" + pciDevice.SubSystemVendorID.ToString("x") + " (" + pciDevice.ClassCode.ToString("x") + ":" + pciDevice.SubClassCode.ToString("x") + ":" + pciDevice.ProgIF.ToString("x") + ":" + pciDevice.RevisionID.ToString("x") + ")", ConsoleColor.White, ConsoleColor.Green); + Program.InBrackets(pciDevice.Name + ": " + name + " " + pciDevice.VendorID.ToString("x") + ":" + pciDevice.DeviceID.ToString("x") + " " + pciDevice.SubSystemID.ToString("x") + ":" + pciDevice.SubSystemVendorID.ToString("x") + " (" + pciDevice.ClassCode.ToString("x") + ":" + pciDevice.SubClassCode.ToString("x") + ":" + pciDevice.ProgIF.ToString("x") + ":" + pciDevice.RevisionID.ToString("x") + ")", ConsoleColor.White, ConsoleColor.Green); Console.WriteLine(); } } diff --git a/Source/Mosa.DeviceDriver/ISA/PCIController.cs b/Source/Mosa.DeviceDriver/ISA/PCIController.cs index 09ca5a6423..f9c734df34 100644 --- a/Source/Mosa.DeviceDriver/ISA/PCIController.cs +++ b/Source/Mosa.DeviceDriver/ISA/PCIController.cs @@ -51,39 +51,39 @@ private static uint GetIndex(byte bus, byte slot, byte function, byte register) #region IPCIController - public uint ReadConfig32(PCIDevice pciDevice, byte register) + public uint ReadConfig32(PCIDeviceConfiguration configuration, byte register) { - configAddress.Write32(GetIndex(pciDevice.Bus, pciDevice.Slot, pciDevice.Function, register)); + configAddress.Write32(GetIndex(configuration.Bus, configuration.Slot, configuration.Function, register)); return configData.Read32(); } - public ushort ReadConfig16(PCIDevice pciDevice, byte register) + public ushort ReadConfig16(PCIDeviceConfiguration configuration, byte register) { - configAddress.Write32(GetIndex(pciDevice.Bus, pciDevice.Slot, pciDevice.Function, register)); + configAddress.Write32(GetIndex(configuration.Bus, configuration.Slot, configuration.Function, register)); return (ushort)((configData.Read32() >> (register % 4 * 8)) & 0xFFFF); } - public byte ReadConfig8(PCIDevice pciDevice, byte register) + public byte ReadConfig8(PCIDeviceConfiguration configuration, byte register) { - configAddress.Write32(GetIndex(pciDevice.Bus, pciDevice.Slot, pciDevice.Function, register)); + configAddress.Write32(GetIndex(configuration.Bus, configuration.Slot, configuration.Function, register)); return (byte)((configData.Read32() >> (register % 4 * 8)) & 0xFF); } - public void WriteConfig32(PCIDevice pciDevice, byte register, uint value) + public void WriteConfig32(PCIDeviceConfiguration configuration, byte register, uint value) { - configAddress.Write32(GetIndex(pciDevice.Bus, pciDevice.Slot, pciDevice.Function, register)); + configAddress.Write32(GetIndex(configuration.Bus, configuration.Slot, configuration.Function, register)); configData.Write32(value); } - public void WriteConfig16(PCIDevice pciDevice, byte register, ushort value) + public void WriteConfig16(PCIDeviceConfiguration configuration, byte register, ushort value) { - configAddress.Write32(GetIndex(pciDevice.Bus, pciDevice.Slot, pciDevice.Function, register)); + configAddress.Write32(GetIndex(configuration.Bus, configuration.Slot, configuration.Function, register)); configData.Write16(value); } - public void WriteConfig8(PCIDevice pciDevice, byte register, byte value) + public void WriteConfig8(PCIDeviceConfiguration configuration, byte register, byte value) { - configAddress.Write32(GetIndex(pciDevice.Bus, pciDevice.Slot, pciDevice.Function, register)); + configAddress.Write32(GetIndex(configuration.Bus, configuration.Slot, configuration.Function, register)); configData.Write8(value); } diff --git a/Source/Mosa.DeviceDriver/PCI/VirtIO/VirtIODevice.cs b/Source/Mosa.DeviceDriver/PCI/VirtIO/VirtIODevice.cs index 83a34c5e99..b864e3a566 100644 --- a/Source/Mosa.DeviceDriver/PCI/VirtIO/VirtIODevice.cs +++ b/Source/Mosa.DeviceDriver/PCI/VirtIO/VirtIODevice.cs @@ -14,7 +14,7 @@ namespace Mosa.DeviceDriver.PCI.VirtIO; public class VirtIODevice { private readonly string devName; - private readonly PCIDevice pciDevice; + private readonly PCIDeviceConfiguration configuration; private readonly IPCIController pciController; private readonly ConstrainedPointer devBar; private readonly uint devOff; @@ -38,30 +38,30 @@ public class VirtIODevice public VirtIODevice(Device device) { devName = device.Name; - pciDevice = (PCIDevice)device.Parent.DeviceDriver; + configuration = (PCIDeviceConfiguration)device.Configuration; - if (pciDevice.RevisionID < 1) + if (configuration.RevisionID < 1) { - HAL.DebugWriteLine("[" + devName + "] pci revision id mismatch; abort"); + HAL.DebugWriteLine($"[{devName}] pci revision id mismatch; abort"); return; } - pciController = pciDevice.Controller; + pciController = configuration.Controller; - foreach (var capability in pciDevice.Capabilities) + foreach (var capability in configuration.Capabilities) { if (capability.Capability != 0x09) continue; - var configType = pciController.ReadConfig8(pciDevice, (byte)(capability.Offset + 3)); - var bar = pciController.ReadConfig8(pciDevice, (byte)(capability.Offset + 4)); - var offset = pciController.ReadConfig32(pciDevice, (byte)(capability.Offset + 8)); + var configType = pciController.ReadConfig8(configuration, (byte)(capability.Offset + 3)); + var bar = pciController.ReadConfig8(configuration, (byte)(capability.Offset + 4)); + var offset = pciController.ReadConfig32(configuration, (byte)(capability.Offset + 8)); switch (configType) { case VirtIOConfigurationCapabilities.Common: { - var pciBar = pciDevice.BaseAddresses[bar]; + var pciBar = configuration.BaseAddresses[bar]; if (pciBar.Region == AddressType.Memory) { @@ -78,7 +78,7 @@ public VirtIODevice(Device device) } case VirtIOConfigurationCapabilities.Notify: { - var pciBar = pciDevice.BaseAddresses[bar]; + var pciBar = configuration.BaseAddresses[bar]; if (pciBar.Region == AddressType.Memory) { @@ -91,13 +91,13 @@ public VirtIODevice(Device device) return; } - notifyOffMultiplier = pciController.ReadConfig32(pciDevice, (byte)(capability.Offset + 16)); + notifyOffMultiplier = pciController.ReadConfig32(configuration, (byte)(capability.Offset + 16)); break; } case VirtIOConfigurationCapabilities.ISR: break; case VirtIOConfigurationCapabilities.Device: { - var pciBar = pciDevice.BaseAddresses[bar]; + var pciBar = configuration.BaseAddresses[bar]; if (pciBar.Region == AddressType.Memory) { diff --git a/Source/Mosa.DeviceSystem/Framework/BaseDeviceConfiguration.cs b/Source/Mosa.DeviceSystem/Framework/BaseDeviceConfiguration.cs index a3a2c1bd4a..f024698b29 100644 --- a/Source/Mosa.DeviceSystem/Framework/BaseDeviceConfiguration.cs +++ b/Source/Mosa.DeviceSystem/Framework/BaseDeviceConfiguration.cs @@ -1,11 +1,12 @@ // Copyright (c) MOSA Project. Licensed under the New BSD License. using Mosa.DeviceSystem.Disks; +using Mosa.DeviceSystem.PCI; namespace Mosa.DeviceSystem.Framework; /// -/// The base class for device configurations. See and -/// for implementations of this class. +/// The base class for device configurations. See , +/// and for implementations of this class. /// public abstract class BaseDeviceConfiguration { } diff --git a/Source/Mosa.DeviceSystem/HardwareAbstraction/HAL.cs b/Source/Mosa.DeviceSystem/HardwareAbstraction/HAL.cs index 7e6286ceaf..2dd83096d5 100644 --- a/Source/Mosa.DeviceSystem/HardwareAbstraction/HAL.cs +++ b/Source/Mosa.DeviceSystem/HardwareAbstraction/HAL.cs @@ -28,9 +28,9 @@ public static class HAL public static ConstrainedPointer GetPhysicalMemory(Pointer address, uint size) => hardwareAbstraction.GetPhysicalMemory(address, size); - internal static void DisableAllInterrupts() => hardwareAbstraction.DisableInterrupts(); + public static void DisableAllInterrupts() => hardwareAbstraction.DisableInterrupts(); - internal static void EnableAllInterrupts() => hardwareAbstraction.EnableInterrupts(); + public static void EnableAllInterrupts() => hardwareAbstraction.EnableInterrupts(); public static void Sleep(uint milliseconds) => hardwareAbstraction.Sleep(milliseconds); diff --git a/Source/Mosa.DeviceSystem/PCI/IPCIController.cs b/Source/Mosa.DeviceSystem/PCI/IPCIController.cs index bac525c188..d808270afb 100644 --- a/Source/Mosa.DeviceSystem/PCI/IPCIController.cs +++ b/Source/Mosa.DeviceSystem/PCI/IPCIController.cs @@ -7,15 +7,15 @@ namespace Mosa.DeviceSystem.PCI; /// public interface IPCIController { - uint ReadConfig32(PCIDevice pciDevice, byte register); + uint ReadConfig32(PCIDeviceConfiguration configuration, byte register); - ushort ReadConfig16(PCIDevice pciDevice, byte register); + ushort ReadConfig16(PCIDeviceConfiguration configuration, byte register); - byte ReadConfig8(PCIDevice pciDevice, byte register); + byte ReadConfig8(PCIDeviceConfiguration configuration, byte register); - void WriteConfig32(PCIDevice pciDevice, byte register, uint value); + void WriteConfig32(PCIDeviceConfiguration configuration, byte register, uint value); - void WriteConfig16(PCIDevice pciDevice, byte register, ushort value); + void WriteConfig16(PCIDeviceConfiguration configuration, byte register, ushort value); - void WriteConfig8(PCIDevice pciDevice, byte register, byte value); + void WriteConfig8(PCIDeviceConfiguration configuration, byte register, byte value); } diff --git a/Source/Mosa.DeviceSystem/PCI/PCIDevice.cs b/Source/Mosa.DeviceSystem/PCI/PCIDeviceConfiguration.cs similarity index 76% rename from Source/Mosa.DeviceSystem/PCI/PCIDevice.cs rename to Source/Mosa.DeviceSystem/PCI/PCIDeviceConfiguration.cs index 60af79135a..85e2d17664 100644 --- a/Source/Mosa.DeviceSystem/PCI/PCIDevice.cs +++ b/Source/Mosa.DeviceSystem/PCI/PCIDeviceConfiguration.cs @@ -11,7 +11,7 @@ namespace Mosa.DeviceSystem.PCI; /// The base class for all PCI devices in the device driver framework. It provides a generic way of initializing and enabling/disabling /// such devices. /// -public class PCIDevice : BaseDeviceDriver +public class PCIDeviceConfiguration : BaseDeviceConfiguration { #region Properties @@ -21,7 +21,9 @@ public class PCIDevice : BaseDeviceDriver public byte Function { get; } - public IPCIController Controller { get; private set; } + public string Name { get; } + + public IPCIController Controller { get; } public PCICapability[] Capabilities { get; private set; } @@ -59,19 +61,17 @@ public ushort CommandRegister #endregion Properties - public PCIDevice(byte bus, byte slot, byte function) + public PCIDeviceConfiguration(string pciControllerName, IPCIController pciController, byte bus, byte slot, byte function) { Bus = bus; Slot = slot; Function = function; + Name = $"{pciControllerName}/{bus}.{slot}.{function}"; + Controller = pciController; } - public override void Initialize() + public void Initialize() { - Controller = Device.Parent.DeviceDriver as IPCIController; - if (Controller == null) - return; - VendorID = Controller.ReadConfig16(this, PCIConfigurationHeader.VendorID); DeviceID = Controller.ReadConfig16(this, PCIConfigurationHeader.DeviceID); RevisionID = Controller.ReadConfig8(this, PCIConfigurationHeader.RevisionID); @@ -82,13 +82,11 @@ public override void Initialize() SubSystemID = Controller.ReadConfig16(this, PCIConfigurationHeader.SubSystemID); IRQ = Controller.ReadConfig8(this, PCIConfigurationHeader.InterruptLineRegister); - Device.Name = $"{Device.Parent.Name}/{Bus}.{Slot}.{Function}"; - for (byte i = 0; i < 6; i++) { var bar = (byte)(PCIConfigurationHeader.BaseAddressRegisterBase + i * 4); - var address = Controller.ReadConfig32(this, bar); + if (address == 0) continue; @@ -101,13 +99,9 @@ public override void Initialize() HAL.EnableAllInterrupts(); if (address % 2 == 1) - { BaseAddresses[i] = new BaseAddress(AddressType.PortIO, new Pointer(address & 0x0000FFF8), (~(mask & 0xFFF8) + 1) & 0xFFFF, false); - } else - { BaseAddresses[i] = new BaseAddress(AddressType.Memory, new Pointer(address & 0xFFFFFFF0), ~(mask & 0xFFFFFFF0) + 1, (address & 0x08) == 1); - } } // FIXME: Special case for generic VGA @@ -117,33 +111,21 @@ public override void Initialize() BaseAddresses[7] = new BaseAddress(AddressType.PortIO, new Pointer(0x3B0), 0x0F, false); } - if ((StatusRegister & (byte)PCIStatus.Capability) != 0) - { - var capabilities = new List(); - var ptr = Controller.ReadConfig8(this, PCIConfigurationHeader.CapabilitiesPointer); + if ((StatusRegister & (byte)PCIStatus.Capability) == 0) + return; - while (ptr != 0) - { - var capability = Controller.ReadConfig8(this, ptr); - capabilities.Add(new PCICapability(capability, ptr)); + var capabilities = new List(); + var ptr = Controller.ReadConfig8(this, PCIConfigurationHeader.CapabilitiesPointer); - ptr = Controller.ReadConfig8(this, (byte)(ptr + 1)); - } + while (ptr != 0) + { + var capability = Controller.ReadConfig8(this, ptr); + capabilities.Add(new PCICapability(capability, ptr)); - Capabilities = capabilities.ToArray(); + ptr = Controller.ReadConfig8(this, (byte)(ptr + 1)); } - EnableDevice(); - } - - public override void Probe() => Device.Status = DeviceStatus.Available; - - public override void Start() => Device.Status = DeviceStatus.Online; - - public override bool OnInterrupt() - { - // TODO - return true; + Capabilities = capabilities.ToArray(); } public void EnableDevice() @@ -151,8 +133,4 @@ public void EnableDevice() public void DisableDevice() => CommandRegister = (ushort)(CommandRegister & ~PCICommand.IOSpaceEnable & ~PCICommand.BusMasterFunctionEnable & PCICommand.MemorySpaceEnable); - - public void SetNoDriverFound() => Device.Status = DeviceStatus.NotFound; - - public void SetDeviceOnline() => Device.Status = DeviceStatus.Online; } diff --git a/Source/Mosa.DeviceSystem/Services/DeviceService.cs b/Source/Mosa.DeviceSystem/Services/DeviceService.cs index dcc25f3deb..4b02cef115 100644 --- a/Source/Mosa.DeviceSystem/Services/DeviceService.cs +++ b/Source/Mosa.DeviceSystem/Services/DeviceService.cs @@ -45,18 +45,14 @@ public void RegisterDeviceDriver(List deviceDrivers) var platformArchitecture = HAL.PlatformArchitecture; foreach (var deviceDriver in deviceDrivers) - { if ((deviceDriver.Platform & platformArchitecture) == platformArchitecture) RegisterDeviceDriver(deviceDriver); - } } public void RegisterDeviceDriver(DeviceDriverRegistryEntry deviceDriver) { lock (sync) - { registry.Add(deviceDriver); - } } public List GetDeviceDrivers(DeviceBusType busType) @@ -64,13 +60,9 @@ public List GetDeviceDrivers(DeviceBusType busType) var drivers = new List(); lock (sync) - { foreach (var deviceDriver in registry) - { if (deviceDriver.BusType == busType) drivers.Add(deviceDriver); - } - } return drivers; } @@ -182,13 +174,9 @@ private void StartDevice(Device device) public Device GetFirstDevice() { lock (sync) - { foreach (var device in devices) - { if (device.DeviceDriver is T) return device; - } - } return null; } @@ -198,13 +186,9 @@ public List GetDevices() var list = new List(); lock (sync) - { foreach (var device in devices) - { if (device.DeviceDriver is T) list.Add(device); - } - } return list; } @@ -212,13 +196,9 @@ public List GetDevices() public Device GetFirstDevice(DeviceStatus status) { lock (sync) - { foreach (var device in devices) - { if (device.Status == status && device.DeviceDriver is T) return device; - } - } return null; } @@ -228,13 +208,9 @@ public List GetDevices(DeviceStatus status) var list = new List(); lock (sync) - { foreach (var device in devices) - { if (device.Status == status && device.DeviceDriver is T) list.Add(device); - } - } return list; } @@ -244,13 +220,9 @@ public List GetDevices(string name) var list = new List(); lock (sync) - { foreach (var device in devices) - { if (device.Name == name) list.Add(device); - } - } return list; } @@ -260,10 +232,8 @@ public List GetChildrenOf(Device parent) var list = new List(); lock (sync) - { foreach (var device in parent.Children) list.Add(device); - } return list; } @@ -298,13 +268,9 @@ public List GetAllDevices(DeviceBusType busType) public bool CheckExists(Device parent, ulong componentID) { lock (sync) - { foreach (var device in devices) - { if (device.Parent == parent && device.ComponentID == componentID) return true; - } - } return false; } @@ -336,9 +302,7 @@ public void AddInterruptHandler(Device device) return; lock (sync) - { IRQDispatch[irq].Add(device); - } } HAL.DebugWriteLine("DeviceService::AddInterruptHandler() [Exit]"); @@ -354,9 +318,7 @@ public void ReleaseInterruptHandler(Device device) return; lock (sync) - { IRQDispatch[irq].Remove(device); - } } #endregion Interrupts diff --git a/Source/Mosa.DeviceSystem/Services/PCIDeviceService.cs b/Source/Mosa.DeviceSystem/Services/PCIDeviceService.cs index 96d311a257..44f223abba 100644 --- a/Source/Mosa.DeviceSystem/Services/PCIDeviceService.cs +++ b/Source/Mosa.DeviceSystem/Services/PCIDeviceService.cs @@ -4,7 +4,6 @@ using Mosa.DeviceSystem.Framework; using Mosa.DeviceSystem.Framework.PCI; using Mosa.DeviceSystem.HardwareAbstraction; -using Mosa.DeviceSystem.Misc; using Mosa.DeviceSystem.PCI; namespace Mosa.DeviceSystem.Services; @@ -34,17 +33,17 @@ protected override void Initialize() HAL.DebugWriteLine("PCIDeviceService::Initialize() [Exit]"); } - private void CreateDevice(byte bus, byte slot, byte function, Device device, IPCIController pciController) + private void CreateDevice(byte bus, byte slot, byte function, Device pciControllerDevice, IPCIController pciController) { - var pciDevice = new PCIDevice(bus, slot, function); - var value = pciController.ReadConfig32(pciDevice, 0); + var configuration = new PCIDeviceConfiguration(pciControllerDevice.Name, pciController, bus, slot, function); + var value = pciController.ReadConfig32(configuration, 0); if (value == 0xFFFFFFFF) return; // TODO: Check for duplicates - var parentDevice = deviceService.Initialize(pciDevice, device); + configuration.Initialize(); // Find the best matching driver PCIDeviceDriverRegistryEntry matchedDriver = null; @@ -53,7 +52,7 @@ private void CreateDevice(byte bus, byte slot, byte function, Device device, IPC var drivers = deviceService.GetDeviceDrivers(DeviceBusType.PCI); foreach (var driver in drivers) { - if (driver is not PCIDeviceDriverRegistryEntry pciDriver || !IsMatch(pciDriver, pciDevice)) + if (driver is not PCIDeviceDriverRegistryEntry pciDriver || !IsMatch(pciDriver, configuration)) continue; var priority = GetMatchedPriority(pciDriver); @@ -64,71 +63,72 @@ private void CreateDevice(byte bus, byte slot, byte function, Device device, IPC matchPriority = priority; } - StartDevice(matchedDriver, parentDevice, pciDevice); + StartDevice(matchedDriver, pciControllerDevice, configuration); } - private void StartDevice(PCIDeviceDriverRegistryEntry driver, Device device, PCIDevice pciDevice) + private void StartDevice(PCIDeviceDriverRegistryEntry driver, Device parentDevice, PCIDeviceConfiguration configuration) { var ioPortRegions = new List(); var memoryRegions = new List(); - foreach (var pciBaseAddress in pciDevice.BaseAddresses) + foreach (var baseAddress in configuration.BaseAddresses) { - if (pciBaseAddress == null || pciBaseAddress.Size == 0) + if (baseAddress == null || baseAddress.Size == 0) continue; - switch (pciBaseAddress.Region) + switch (baseAddress.Region) { - case AddressType.PortIO: ioPortRegions.Add(new IOPortRegion((ushort)pciBaseAddress.Address, (ushort)pciBaseAddress.Size)); break; - case AddressType.Memory: memoryRegions.Add(new AddressRegion(pciBaseAddress.Address, pciBaseAddress.Size)); break; + case AddressType.PortIO: ioPortRegions.Add(new IOPortRegion((ushort)baseAddress.Address, (ushort)baseAddress.Size)); break; + case AddressType.Memory: memoryRegions.Add(new AddressRegion(baseAddress.Address, baseAddress.Size)); break; } } - var hardwareResources = new HardwareResources(ioPortRegions, memoryRegions, pciDevice.IRQ); + var hardwareResources = new HardwareResources(ioPortRegions, memoryRegions, configuration.IRQ); // No driver was found previously if (driver == null) { HAL.DebugWriteLine(" > Unknown PCI Device: "); - HAL.DebugWriteLine(pciDevice.VendorID.ToString("x") + ":" + pciDevice.DeviceID.ToString("x")); + HAL.DebugWriteLine(configuration.VendorID.ToString("x") + ":" + configuration.DeviceID.ToString("x")); // It must be set to auto start, or else the device isn't registered in the framework - deviceService.Initialize(null, device, true, null, hardwareResources, DeviceBusType.PCI); + deviceService.Initialize(null, parentDevice, true, configuration, hardwareResources, DeviceBusType.PCI); return; } HAL.DebugWriteLine(" > PCI Device: "); HAL.DebugWriteLine(driver.Name); - deviceService.Initialize(driver, device, driver.AutoStart, null, hardwareResources, DeviceBusType.PCI); + configuration.EnableDevice(); + deviceService.Initialize(driver, parentDevice, driver.AutoStart, configuration, hardwareResources, DeviceBusType.PCI); } private static bool HasFlag(PCIField list, PCIField match) => (int)(list & match) != 0; - private static bool IsMatch(PCIDeviceDriverRegistryEntry driver, PCIDevice pciDevice) + private static bool IsMatch(PCIDeviceDriverRegistryEntry driver, PCIDeviceConfiguration pciDeviceConfiguration) { - if (HasFlag(driver.PCIFields, PCIField.VendorID) && driver.VendorID != pciDevice.VendorID) + if (HasFlag(driver.PCIFields, PCIField.VendorID) && driver.VendorID != pciDeviceConfiguration.VendorID) return false; - if (HasFlag(driver.PCIFields, PCIField.DeviceID) && driver.DeviceID != pciDevice.DeviceID) + if (HasFlag(driver.PCIFields, PCIField.DeviceID) && driver.DeviceID != pciDeviceConfiguration.DeviceID) return false; - if (HasFlag(driver.PCIFields, PCIField.SubSystemID) && driver.SubSystemID != pciDevice.SubSystemID) + if (HasFlag(driver.PCIFields, PCIField.SubSystemID) && driver.SubSystemID != pciDeviceConfiguration.SubSystemID) return false; - if (HasFlag(driver.PCIFields, PCIField.SubSystemVendorID) && driver.SubSystemVendorID != pciDevice.SubSystemVendorID) + if (HasFlag(driver.PCIFields, PCIField.SubSystemVendorID) && driver.SubSystemVendorID != pciDeviceConfiguration.SubSystemVendorID) return false; - if (HasFlag(driver.PCIFields, PCIField.ClassCode) && driver.ClassCode != pciDevice.ClassCode) + if (HasFlag(driver.PCIFields, PCIField.ClassCode) && driver.ClassCode != pciDeviceConfiguration.ClassCode) return false; - if (HasFlag(driver.PCIFields, PCIField.SubClassCode) && driver.SubClassCode != pciDevice.SubClassCode) + if (HasFlag(driver.PCIFields, PCIField.SubClassCode) && driver.SubClassCode != pciDeviceConfiguration.SubClassCode) return false; - if (HasFlag(driver.PCIFields, PCIField.ProgIF) && driver.ProgIF != pciDevice.ProgIF) + if (HasFlag(driver.PCIFields, PCIField.ProgIF) && driver.ProgIF != pciDeviceConfiguration.ProgIF) return false; - if (HasFlag(driver.PCIFields, PCIField.RevisionID) && driver.RevisionID != pciDevice.RevisionID) + if (HasFlag(driver.PCIFields, PCIField.RevisionID) && driver.RevisionID != pciDeviceConfiguration.RevisionID) return false; return true; @@ -136,30 +136,30 @@ private static bool IsMatch(PCIDeviceDriverRegistryEntry driver, PCIDevice pciDe private static int GetMatchedPriority(PCIDeviceDriverRegistryEntry driver) { - var vendorID = HasFlag(driver.PCIFields, PCIField.VendorID); - var deviceID = HasFlag(driver.PCIFields, PCIField.DeviceID); - var subSystemID = HasFlag(driver.PCIFields, PCIField.SubSystemID); - var subSystemVendorID = HasFlag(driver.PCIFields, PCIField.SubSystemVendorID); + var vendorId = HasFlag(driver.PCIFields, PCIField.VendorID); + var deviceId = HasFlag(driver.PCIFields, PCIField.DeviceID); + var subSystemId = HasFlag(driver.PCIFields, PCIField.SubSystemID); + var subSystemVendorId = HasFlag(driver.PCIFields, PCIField.SubSystemVendorID); var classCode = HasFlag(driver.PCIFields, PCIField.ClassCode); var subClassCode = HasFlag(driver.PCIFields, PCIField.SubClassCode); - var progIF = HasFlag(driver.PCIFields, PCIField.ProgIF); - var revisionID = HasFlag(driver.PCIFields, PCIField.RevisionID); + var progIf = HasFlag(driver.PCIFields, PCIField.ProgIF); + var revisionId = HasFlag(driver.PCIFields, PCIField.RevisionID); - switch (vendorID) + switch (vendorId) { - case true when deviceID && classCode && subClassCode && progIF && revisionID: return 1; - case true when deviceID && classCode && subClassCode && progIF: return 2; - case true when deviceID && subSystemVendorID && subSystemID && revisionID: return 3; - case true when deviceID && subSystemVendorID && subSystemID: return 4; - case true when deviceID && revisionID: return 5; - case true when deviceID: return 6; + case true when deviceId && classCode && subClassCode && progIf && revisionId: return 1; + case true when deviceId && classCode && subClassCode && progIf: return 2; + case true when deviceId && subSystemVendorId && subSystemId && revisionId: return 3; + case true when deviceId && subSystemVendorId && subSystemId: return 4; + case true when deviceId && revisionId: return 5; + case true when deviceId: return 6; default: { switch (classCode) { - case true when subClassCode && progIF && revisionID: return 7; - case true when subClassCode && progIF: return 8; - case true when subClassCode && revisionID: return 9; + case true when subClassCode && progIf && revisionId: return 7; + case true when subClassCode && progIf: return 8; + case true when subClassCode && revisionId: return 9; case true when subClassCode: return 10; } break;