From c895e48de84f2a6b6f5b21e8037abef50e365a51 Mon Sep 17 00:00:00 2001 From: Alyssa Ross Date: Sat, 14 Mar 2020 00:17:26 +0000 Subject: get_device_bars --- devices/src/virtio/controller.rs | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'devices/src/virtio/controller.rs') diff --git a/devices/src/virtio/controller.rs b/devices/src/virtio/controller.rs index 7a5ab71..33dbdd4 100644 --- a/devices/src/virtio/controller.rs +++ b/devices/src/virtio/controller.rs @@ -36,7 +36,10 @@ use std::thread; use super::resource_bridge::*; use super::{Interrupt, InterruptProxyEvent, Queue, VirtioDevice, TYPE_WL, VIRTIO_F_VERSION_1}; -use crate::MemoryParams; +use crate::{ + pci::{PciAddress, PciBarConfiguration}, + MemoryParams, +}; use vm_control::{MaybeOwnedFd, VmMemoryControlRequestSocket}; use msg_socket::{MsgOnSocket, MsgReceiver, MsgSocket}; @@ -74,6 +77,8 @@ pub enum MsgOnSocketRequest { pub enum BincodeRequest { ReadConfig { offset: u64, len: usize }, WriteConfig { offset: u64, data: Vec }, + + GetDeviceBars(PciAddress), } pub type Request = poly_msg_socket::Value; @@ -99,6 +104,8 @@ pub enum MsgOnSocketResponse { #[derive(Debug, Deserialize, Serialize)] pub enum BincodeResponse { ReadConfig(Vec), + + GetDeviceBars(Vec), } pub type Response = poly_msg_socket::Value; @@ -386,4 +393,17 @@ impl VirtioDevice for Controller { } } } + + fn get_device_bars(&mut self, address: PciAddress) -> Vec { + if let Err(e) = self.socket.send(BincodeRequest::GetDeviceBars(address)) { + panic!("failed to send GetDeviceBars: {}", e); + } + + match self.socket.recv_bincode() { + Ok(BincodeResponse::GetDeviceBars(bars)) => bars, + response => { + panic!("bad response to GetDeviceBars: {:?}", response); + } + } + } } -- cgit 1.4.1