From 4605ecf1a8b935ac62d5338eee33db23727db10b Mon Sep 17 00:00:00 2001 From: Samuel Ortiz Date: Wed, 3 Jul 2019 01:27:38 +0200 Subject: [PATCH] pci: Extend the Device trait to carry the device BARs When reading from or writing to a PCI BAR to handle a VM exit, we need to have the BAR address itself to be able to support multiple BARs PCI devices. Fixes: #87 Signed-off-by: Samuel Ortiz --- pci/src/device.rs | 4 ++-- vm-virtio/src/transport/pci_device.rs | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/pci/src/device.rs b/pci/src/device.rs index 275a65b7c..25111700a 100755 --- a/pci/src/device.rs +++ b/pci/src/device.rs @@ -90,11 +90,11 @@ pub trait PciDevice: BusDevice { /// Reads from a BAR region mapped in to the device. /// * `addr` - The guest address inside the BAR. /// * `data` - Filled with the data from `addr`. - fn read_bar(&mut self, addr: u64, data: &mut [u8]); + fn read_bar(&mut self, base: u64, offset: u64, data: &mut [u8]); /// Writes to a BAR region mapped in to the device. /// * `addr` - The guest address inside the BAR. /// * `data` - The data to write. - fn write_bar(&mut self, addr: u64, data: &[u8]); + fn write_bar(&mut self, base: u64, offset: u64, data: &[u8]); /// Invoked when the device is sandboxed. fn on_device_sandboxed(&mut self) {} } diff --git a/vm-virtio/src/transport/pci_device.rs b/vm-virtio/src/transport/pci_device.rs index 7341a7647..b22f7cef6 100755 --- a/vm-virtio/src/transport/pci_device.rs +++ b/vm-virtio/src/transport/pci_device.rs @@ -480,7 +480,7 @@ impl PciDevice for VirtioPciDevice { Ok(ranges) } - fn read_bar(&mut self, offset: u64, data: &mut [u8]) { + fn read_bar(&mut self, _base: u64, offset: u64, data: &mut [u8]) { match offset { o if o < COMMON_CONFIG_BAR_OFFSET + COMMON_CONFIG_SIZE => self.common_config.read( o - COMMON_CONFIG_BAR_OFFSET, @@ -524,7 +524,7 @@ impl PciDevice for VirtioPciDevice { } } - fn write_bar(&mut self, offset: u64, data: &[u8]) { + fn write_bar(&mut self, _base: u64, offset: u64, data: &[u8]) { match offset { o if o < COMMON_CONFIG_BAR_OFFSET + COMMON_CONFIG_SIZE => self.common_config.write( o - COMMON_CONFIG_BAR_OFFSET, @@ -607,11 +607,11 @@ impl PciDevice for VirtioPciDevice { } impl BusDevice for VirtioPciDevice { - fn read(&mut self, _base: u64, offset: u64, data: &mut [u8]) { - self.read_bar(offset, data) + fn read(&mut self, base: u64, offset: u64, data: &mut [u8]) { + self.read_bar(base, offset, data) } - fn write(&mut self, _base: u64, offset: u64, data: &[u8]) { - self.write_bar(offset, data) + fn write(&mut self, base: u64, offset: u64, data: &[u8]) { + self.write_bar(base, offset, data) } }