summary refs log tree commit diff
path: root/devices/src/virtio
diff options
context:
space:
mode:
authorDaniel Prilik <prilik@google.com>2019-03-21 14:27:46 -0700
committerchrome-bot <chrome-bot@chromium.org>2019-03-28 11:17:08 -0700
commit45b3ed437dfb0f1924c62b64d57598d5d155ff78 (patch)
tree1538f126b1d7407bec2fd8b3bd7d129817e386eb /devices/src/virtio
parent3d00b70eb53d1f89ff348346fb91600c54f7f7e8 (diff)
downloadcrosvm-45b3ed437dfb0f1924c62b64d57598d5d155ff78.tar
crosvm-45b3ed437dfb0f1924c62b64d57598d5d155ff78.tar.gz
crosvm-45b3ed437dfb0f1924c62b64d57598d5d155ff78.tar.bz2
crosvm-45b3ed437dfb0f1924c62b64d57598d5d155ff78.tar.lz
crosvm-45b3ed437dfb0f1924c62b64d57598d5d155ff78.tar.xz
crosvm-45b3ed437dfb0f1924c62b64d57598d5d155ff78.tar.zst
crosvm-45b3ed437dfb0f1924c62b64d57598d5d155ff78.zip
devices: improve get_device_bars/caps interface
Removes an unnecessary Option from the return type.

Also added a note about moving PCI methods out of the VirtioDevice
trait, as the trait shouldn't be tied to any particular transport layer.

BUG=chromium:936567
TEST=cargo build --features=gpu

Change-Id: I2c75c830bbe2d2b4a15461e8497535c526775bbe
Reviewed-on: https://chromium-review.googlesource.com/1536206
Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com>
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Zach Reizner <zachr@chromium.org>
Diffstat (limited to 'devices/src/virtio')
-rw-r--r--devices/src/virtio/gpu/mod.rs8
-rw-r--r--devices/src/virtio/virtio_device.rs12
-rw-r--r--devices/src/virtio/virtio_pci_device.rs32
3 files changed, 23 insertions, 29 deletions
diff --git a/devices/src/virtio/gpu/mod.rs b/devices/src/virtio/gpu/mod.rs
index 0047bbd..c39515b 100644
--- a/devices/src/virtio/gpu/mod.rs
+++ b/devices/src/virtio/gpu/mod.rs
@@ -812,14 +812,12 @@ impl VirtioDevice for Gpu {
     }
 
     // Require 1 BAR for mapping 3D buffers
-    fn get_device_bars(&self) -> Option<Vec<PciBarConfiguration>> {
-        let mut bars = Vec::new();
-        bars.push(PciBarConfiguration::new(
+    fn get_device_bars(&self) -> Vec<PciBarConfiguration> {
+        vec![PciBarConfiguration::new(
             4,
             1 << 33,
             PciBarRegionType::Memory64BitRegion,
             PciBarPrefetchable::NotPrefetchable,
-        ));
-        Some(bars)
+        )]
     }
 }
diff --git a/devices/src/virtio/virtio_device.rs b/devices/src/virtio/virtio_device.rs
index e1b235f..f497146 100644
--- a/devices/src/virtio/virtio_device.rs
+++ b/devices/src/virtio/virtio_device.rs
@@ -76,13 +76,13 @@ pub trait VirtioDevice: Send {
         None
     }
 
-    /// Optionally returns additional BAR configuration needed by device
-    fn get_device_bars(&self) -> Option<Vec<PciBarConfiguration>> {
-        None
+    /// Returns any additional BAR configuration required by the device.
+    fn get_device_bars(&self) -> Vec<PciBarConfiguration> {
+        Vec::new()
     }
 
-    /// Optionally returns additional capabiltiies needed by device
-    fn get_device_caps(&self) -> Option<Vec<Box<PciCapability>>> {
-        None
+    /// Returns any additional capabiltiies required by the device.
+    fn get_device_caps(&self) -> Vec<Box<PciCapability>> {
+        Vec::new()
     }
 }
diff --git a/devices/src/virtio/virtio_pci_device.rs b/devices/src/virtio/virtio_pci_device.rs
index bc8b322..071c7d6 100644
--- a/devices/src/virtio/virtio_pci_device.rs
+++ b/devices/src/virtio/virtio_pci_device.rs
@@ -349,29 +349,25 @@ impl PciDevice for VirtioPciDevice {
         resources: &mut SystemAllocator,
     ) -> std::result::Result<Vec<(u64, u64)>, PciDeviceError> {
         let mut ranges = Vec::new();
-        if let Some(configs) = self.device.get_device_bars() {
-            for mut config in configs {
-                let device_addr = resources
-                    .allocate_device_addresses(config.get_size())
-                    .ok_or(PciDeviceError::IoAllocationFailed(config.get_size()))?;
-                config.set_address(device_addr);
-                let _device_bar = self
-                    .config_regs
-                    .add_pci_bar(&config)
-                    .map_err(|e| PciDeviceError::IoRegistrationFailed(device_addr, e))?;
-                ranges.push((device_addr, config.get_size()));
-            }
+        for mut config in self.device.get_device_bars() {
+            let device_addr = resources
+                .allocate_device_addresses(config.get_size())
+                .ok_or(PciDeviceError::IoAllocationFailed(config.get_size()))?;
+            config.set_address(device_addr);
+            let _device_bar = self
+                .config_regs
+                .add_pci_bar(&config)
+                .map_err(|e| PciDeviceError::IoRegistrationFailed(device_addr, e))?;
+            ranges.push((device_addr, config.get_size()));
         }
         Ok(ranges)
     }
 
     fn register_device_capabilities(&mut self) -> std::result::Result<(), PciDeviceError> {
-        if let Some(caps) = self.device.get_device_caps() {
-            for cap in caps {
-                self.config_regs
-                    .add_capability(&*cap)
-                    .map_err(|e| PciDeviceError::CapabilitiesSetup(e))?;
-            }
+        for cap in self.device.get_device_caps() {
+            self.config_regs
+                .add_capability(&*cap)
+                .map_err(|e| PciDeviceError::CapabilitiesSetup(e))?;
         }
 
         Ok(())