mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2025-02-22 11:22:26 +00:00
vm-virtio: Fix the network and storage PCI class and sub-class
Use the virtio device type to generate the righ class and subclass. Fixes: #83 Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
This commit is contained in:
parent
77684f473d
commit
4a15316101
@ -21,7 +21,8 @@ use devices::BusDevice;
|
|||||||
use pci::{
|
use pci::{
|
||||||
InterruptDelivery, InterruptParameters, MsixCap, MsixConfig, PciBarConfiguration,
|
InterruptDelivery, InterruptParameters, MsixCap, MsixConfig, PciBarConfiguration,
|
||||||
PciCapability, PciCapabilityID, PciClassCode, PciConfiguration, PciDevice, PciDeviceError,
|
PciCapability, PciCapabilityID, PciClassCode, PciConfiguration, PciDevice, PciDeviceError,
|
||||||
PciHeaderType, PciInterruptPin, PciSubclass,
|
PciHeaderType, PciInterruptPin, PciMassStorageSubclass, PciNetworkControllerSubclass,
|
||||||
|
PciSubclass,
|
||||||
};
|
};
|
||||||
use vm_allocator::SystemAllocator;
|
use vm_allocator::SystemAllocator;
|
||||||
use vm_memory::{Address, ByteValued, GuestAddress, GuestMemoryMmap, GuestUsize, Le32};
|
use vm_memory::{Address, ByteValued, GuestAddress, GuestMemoryMmap, GuestUsize, Le32};
|
||||||
@ -29,8 +30,8 @@ use vmm_sys_util::{EventFd, Result};
|
|||||||
|
|
||||||
use super::VirtioPciCommonConfig;
|
use super::VirtioPciCommonConfig;
|
||||||
use crate::{
|
use crate::{
|
||||||
Queue, VirtioDevice, VirtioInterrupt, DEVICE_ACKNOWLEDGE, DEVICE_DRIVER, DEVICE_DRIVER_OK,
|
Queue, VirtioDevice, VirtioDeviceType, VirtioInterrupt, DEVICE_ACKNOWLEDGE, DEVICE_DRIVER,
|
||||||
DEVICE_FAILED, DEVICE_FEATURES_OK, DEVICE_INIT,
|
DEVICE_DRIVER_OK, DEVICE_FAILED, DEVICE_FEATURES_OK, DEVICE_INIT,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[allow(clippy::enum_variant_names)]
|
#[allow(clippy::enum_variant_names)]
|
||||||
@ -218,11 +219,26 @@ impl VirtioPciDevice {
|
|||||||
(None, None)
|
(None, None)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let (class, subclass) = match VirtioDeviceType::from(device.device_type()) {
|
||||||
|
VirtioDeviceType::TYPE_NET => (
|
||||||
|
PciClassCode::NetworkController,
|
||||||
|
&PciNetworkControllerSubclass::EthernetController as &PciSubclass,
|
||||||
|
),
|
||||||
|
VirtioDeviceType::TYPE_BLOCK => (
|
||||||
|
PciClassCode::MassStorage,
|
||||||
|
&PciMassStorageSubclass::MassStorage as &PciSubclass,
|
||||||
|
),
|
||||||
|
_ => (
|
||||||
|
PciClassCode::Other,
|
||||||
|
&PciVirtioSubclass::NonTransitionalBase as &PciSubclass,
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
let configuration = PciConfiguration::new(
|
let configuration = PciConfiguration::new(
|
||||||
VIRTIO_PCI_VENDOR_ID,
|
VIRTIO_PCI_VENDOR_ID,
|
||||||
pci_device_id,
|
pci_device_id,
|
||||||
PciClassCode::Other,
|
class,
|
||||||
&PciVirtioSubclass::NonTransitionalBase,
|
subclass,
|
||||||
None,
|
None,
|
||||||
PciHeaderType::Device,
|
PciHeaderType::Device,
|
||||||
VIRTIO_PCI_VENDOR_ID,
|
VIRTIO_PCI_VENDOR_ID,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user