From 349dbb9aacfa5652e1618b60e8d28d035ae07904 Mon Sep 17 00:00:00 2001 From: Rob Bradford Date: Tue, 6 Jul 2021 13:23:49 +0000 Subject: [PATCH] pci: vfio: Add trait for accessing VFIO PCI device config Signed-off-by: Rob Bradford --- pci/src/vfio.rs | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/pci/src/vfio.rs b/pci/src/vfio.rs index 6c2df80c4..43cf73da6 100644 --- a/pci/src/vfio.rs +++ b/pci/src/vfio.rs @@ -245,15 +245,35 @@ pub struct MmioRegion { mmap_size: Option, } -struct VfioPciConfig { +trait VfioPciConfig { + fn read_config_byte(&self, _offset: u32) -> u8 { + unimplemented!() + } + + fn read_config_word(&self, _offset: u32) -> u16 { + unimplemented!() + } + + fn read_config_dword(&self, _offset: u32) -> u32 { + unimplemented!() + } + + fn write_config_dword(&self, _buf: u32, _offset: u32) { + unimplemented!() + } +} + +struct VfioPciDeviceConfig { device: Arc, } -impl VfioPciConfig { +impl VfioPciDeviceConfig { fn new(device: Arc) -> Self { - VfioPciConfig { device } + Self { device } } +} +impl VfioPciConfig for VfioPciDeviceConfig { fn read_config_byte(&self, offset: u32) -> u8 { let mut data: [u8; 1] = [0]; self.device @@ -295,7 +315,7 @@ pub struct VfioPciDevice { vm: Arc, device: Arc, container: Arc, - vfio_pci_configuration: VfioPciConfig, + vfio_pci_configuration: VfioPciDeviceConfig, configuration: PciConfiguration, mmio_regions: Vec, interrupt: Interrupt, @@ -328,7 +348,7 @@ impl VfioPciDevice { None, ); - let vfio_pci_configuration = VfioPciConfig::new(Arc::clone(&device)); + let vfio_pci_configuration = VfioPciDeviceConfig::new(Arc::clone(&device)); let mut vfio_pci_device = VfioPciDevice { vm: vm.clone(),