summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2020-03-14 00:53:46 +0000
committerAlyssa Ross <hi@alyssa.is>2020-06-15 09:36:54 +0000
commitc7c60d2c07f573e0431d8b81cb169cc751b4ea99 (patch)
tree63edb935b8cd396c3ef696d6fef08b668daab85b
parent15cbc91653fb35f1145b47dd2c808df2daa1633a (diff)
downloadcrosvm-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.rs14
-rw-r--r--src/wl.rs7
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 })) => {