mirror of
https://chromium.googlesource.com/crosvm/crosvm
synced 2025-02-06 02:25:23 +00:00
devices: Move VirtioDevice to its own file
Currently VirtioDevice was only used by MmioDevice. Move it to a separate file to allow it to be used by a PCI implementation in the following commits. Change-Id: Ie2de92d8876fdaa31d71341714681212d52a618c Signed-off-by: Dylan Reid <dgreid@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/1208690 Commit-Ready: Daniel Verkamp <dverkamp@chromium.org> Tested-by: Daniel Verkamp <dverkamp@chromium.org> Reviewed-by: Zach Reizner <zachr@chromium.org>
This commit is contained in:
parent
059a188d0d
commit
67afe44f80
3 changed files with 69 additions and 58 deletions
|
@ -2,7 +2,6 @@
|
|||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
use std::os::unix::io::RawFd;
|
||||
use std::sync::Arc;
|
||||
use std::sync::atomic::{AtomicUsize, Ordering};
|
||||
|
||||
|
@ -17,63 +16,6 @@ const VENDOR_ID: u32 = 0;
|
|||
const MMIO_MAGIC_VALUE: u32 = 0x74726976;
|
||||
const MMIO_VERSION: u32 = 2;
|
||||
|
||||
/// Trait for virtio devices to be driven by a virtio transport.
|
||||
///
|
||||
/// The lifecycle of a virtio device is to be moved to a virtio transport, which will then query the
|
||||
/// device. Once the guest driver has configured the device, `VirtioDevice::activate` will be called
|
||||
/// and all the events, memory, and queues for device operation will be moved into the device.
|
||||
/// Optionally, a virtio device can implement device reset in which it returns said resources and
|
||||
/// resets its internal.
|
||||
pub trait VirtioDevice: Send {
|
||||
/// A vector of device-specific file descriptors that must be kept open
|
||||
/// after jailing. Must be called before the process is jailed.
|
||||
fn keep_fds(&self) -> Vec<RawFd>;
|
||||
|
||||
/// The virtio device type.
|
||||
fn device_type(&self) -> u32;
|
||||
|
||||
/// The maximum size of each queue that this device supports.
|
||||
fn queue_max_sizes(&self) -> &[u16];
|
||||
|
||||
/// The set of feature bits shifted by `page * 32`.
|
||||
fn features(&self, page: u32) -> u32 {
|
||||
let _ = page;
|
||||
0
|
||||
}
|
||||
|
||||
/// Acknowledges that this set of features should be enabled.
|
||||
fn ack_features(&mut self, page: u32, value: u32) {
|
||||
let _ = page;
|
||||
let _ = value;
|
||||
}
|
||||
|
||||
/// Reads this device configuration space at `offset`.
|
||||
fn read_config(&self, offset: u64, data: &mut [u8]) {
|
||||
let _ = offset;
|
||||
let _ = data;
|
||||
}
|
||||
|
||||
/// Writes to this device configuration space at `offset`.
|
||||
fn write_config(&mut self, offset: u64, data: &[u8]) {
|
||||
let _ = offset;
|
||||
let _ = data;
|
||||
}
|
||||
|
||||
/// Activates this device for real usage.
|
||||
fn activate(&mut self,
|
||||
mem: GuestMemory,
|
||||
interrupt_evt: EventFd,
|
||||
status: Arc<AtomicUsize>,
|
||||
queues: Vec<Queue>,
|
||||
queue_evts: Vec<EventFd>);
|
||||
|
||||
/// Optionally deactivates this device and returns ownership of the guest memory map, interrupt
|
||||
/// event, and queue events.
|
||||
fn reset(&mut self) -> Option<(EventFd, Vec<EventFd>)> {
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
/// Implements the
|
||||
/// [MMIO](http://docs.oasis-open.org/virtio/virtio/v1.0/cs04/virtio-v1.0-cs04.html#x1-1090002)
|
||||
/// transport for virtio devices.
|
||||
|
|
|
@ -13,6 +13,7 @@ mod net;
|
|||
#[cfg(feature = "gpu")]
|
||||
mod gpu;
|
||||
mod p9;
|
||||
mod virtio_device;
|
||||
mod wl;
|
||||
|
||||
pub mod vhost;
|
||||
|
@ -26,6 +27,7 @@ pub use self::net::*;
|
|||
#[cfg(feature = "gpu")]
|
||||
pub use self::gpu::*;
|
||||
pub use self::p9::*;
|
||||
pub use self::virtio_device::*;
|
||||
pub use self::wl::*;
|
||||
|
||||
const DEVICE_ACKNOWLEDGE: u32 = 0x01;
|
||||
|
|
67
devices/src/virtio/virtio_device.rs
Normal file
67
devices/src/virtio/virtio_device.rs
Normal file
|
@ -0,0 +1,67 @@
|
|||
// Copyright 2018 The Chromium OS Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
use std::os::unix::io::RawFd;
|
||||
use std::sync::Arc;
|
||||
use std::sync::atomic::AtomicUsize;
|
||||
|
||||
use super::*;
|
||||
use sys_util::{EventFd, GuestMemory};
|
||||
|
||||
/// Trait for virtio devices to be driven by a virtio transport.
|
||||
///
|
||||
/// The lifecycle of a virtio device is to be moved to a virtio transport, which will then query the
|
||||
/// device. Once the guest driver has configured the device, `VirtioDevice::activate` will be called
|
||||
/// and all the events, memory, and queues for device operation will be moved into the device.
|
||||
/// Optionally, a virtio device can implement device reset in which it returns said resources and
|
||||
/// resets its internal.
|
||||
pub trait VirtioDevice: Send {
|
||||
/// A vector of device-specific file descriptors that must be kept open
|
||||
/// after jailing. Must be called before the process is jailed.
|
||||
fn keep_fds(&self) -> Vec<RawFd>;
|
||||
|
||||
/// The virtio device type.
|
||||
fn device_type(&self) -> u32;
|
||||
|
||||
/// The maximum size of each queue that this device supports.
|
||||
fn queue_max_sizes(&self) -> &[u16];
|
||||
|
||||
/// The set of feature bits shifted by `page * 32`.
|
||||
fn features(&self, page: u32) -> u32 {
|
||||
let _ = page;
|
||||
0
|
||||
}
|
||||
|
||||
/// Acknowledges that this set of features should be enabled.
|
||||
fn ack_features(&mut self, page: u32, value: u32) {
|
||||
let _ = page;
|
||||
let _ = value;
|
||||
}
|
||||
|
||||
/// Reads this device configuration space at `offset`.
|
||||
fn read_config(&self, offset: u64, data: &mut [u8]) {
|
||||
let _ = offset;
|
||||
let _ = data;
|
||||
}
|
||||
|
||||
/// Writes to this device configuration space at `offset`.
|
||||
fn write_config(&mut self, offset: u64, data: &[u8]) {
|
||||
let _ = offset;
|
||||
let _ = data;
|
||||
}
|
||||
|
||||
/// Activates this device for real usage.
|
||||
fn activate(&mut self,
|
||||
mem: GuestMemory,
|
||||
interrupt_evt: EventFd,
|
||||
status: Arc<AtomicUsize>,
|
||||
queues: Vec<Queue>,
|
||||
queue_evts: Vec<EventFd>);
|
||||
|
||||
/// Optionally deactivates this device and returns ownership of the guest memory map, interrupt
|
||||
/// event, and queue events.
|
||||
fn reset(&mut self) -> Option<(EventFd, Vec<EventFd>)> {
|
||||
None
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue