diff options
author | Daniel Prilik <prilik@google.com> | 2019-03-21 14:27:46 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2019-03-28 11:17:08 -0700 |
commit | 45b3ed437dfb0f1924c62b64d57598d5d155ff78 (patch) | |
tree | 1538f126b1d7407bec2fd8b3bd7d129817e386eb /devices/src/virtio | |
parent | 3d00b70eb53d1f89ff348346fb91600c54f7f7e8 (diff) | |
download | crosvm-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.rs | 8 | ||||
-rw-r--r-- | devices/src/virtio/virtio_device.rs | 12 | ||||
-rw-r--r-- | devices/src/virtio/virtio_pci_device.rs | 32 |
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(()) |