diff options
author | Alyssa Ross <hi@alyssa.is> | 2020-03-14 00:53:46 +0000 |
---|---|---|
committer | Alyssa Ross <hi@alyssa.is> | 2020-06-15 09:36:54 +0000 |
commit | c7c60d2c07f573e0431d8b81cb169cc751b4ea99 (patch) | |
tree | 63edb935b8cd396c3ef696d6fef08b668daab85b | |
parent | 15cbc91653fb35f1145b47dd2c808df2daa1633a (diff) | |
download | crosvm-c7c60d2c07f573e0431d8b81cb169cc751b4ea99.tar crosvm-c7c60d2c07f573e0431d8b81cb169cc751b4ea99.tar.gz crosvm-c7c60d2c07f573e0431d8b81cb169cc751b4ea99.tar.bz2 crosvm-c7c60d2c07f573e0431d8b81cb169cc751b4ea99.tar.lz crosvm-c7c60d2c07f573e0431d8b81cb169cc751b4ea99.tar.xz crosvm-c7c60d2c07f573e0431d8b81cb169cc751b4ea99.tar.zst crosvm-c7c60d2c07f573e0431d8b81cb169cc751b4ea99.zip |
features
-rw-r--r-- | devices/src/virtio/controller.rs | 14 | ||||
-rw-r--r-- | src/wl.rs | 7 |
2 files changed, 20 insertions, 1 deletions
diff --git a/devices/src/virtio/controller.rs b/devices/src/virtio/controller.rs index c5d2ef4..857bbe8 100644 --- a/devices/src/virtio/controller.rs +++ b/devices/src/virtio/controller.rs @@ -83,6 +83,8 @@ pub enum MsgOnSocketRequest { memory_params: MemoryParams, }, + Features, + AckFeatures(u64), Activate { @@ -125,6 +127,7 @@ impl From<BincodeRequest> for Request { #[derive(Debug, MsgOnSocket)] pub enum MsgOnSocketResponse { + Features(u64), Reset(bool), Kill, } @@ -321,7 +324,16 @@ impl VirtioDevice for Controller { } fn features(&self) -> u64 { - 1 << VIRTIO_WL_F_TRANS_FLAGS | 1 << VIRTIO_F_VERSION_1 + if let Err(e) = self.socket.send(MsgOnSocketRequest::Features) { + panic!("failed to send Features: {}", e); + } + + match self.socket.recv_msg_on_socket() { + Ok(MsgOnSocketResponse::Features(features)) => features, + response => { + panic!("bad response to Reset: {:?}", response); + } + } } fn ack_features(&mut self, value: u64) { diff --git a/src/wl.rs b/src/wl.rs index 7177f74..fb19622 100644 --- a/src/wl.rs +++ b/src/wl.rs @@ -66,6 +66,13 @@ fn main() { break; } + Ok(MsgOnSocket(MsgOnSocketRequest::Features)) => { + let result = wl.features(); + if let Err(e) = msg_socket.send(MsgOnSocketResponse::Features(result)) { + panic!("responding to Features failed: {}", e); + } + } + Ok(MsgOnSocket(MsgOnSocketRequest::AckFeatures(value))) => wl.ack_features(value), Ok(Bincode(BincodeRequest::ReadConfig { offset, len })) => { |