summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2020-03-14 01:20:12 +0000
committerAlyssa Ross <hi@alyssa.is>2020-06-15 09:36:56 +0000
commit3806c2d8455b1a54cd20c9c9e6bd46fe95bf6a43 (patch)
tree25d51c098f7770fb982f51f5a33734c53ff3ad58
parentc7c60d2c07f573e0431d8b81cb169cc751b4ea99 (diff)
downloadcrosvm-3806c2d8455b1a54cd20c9c9e6bd46fe95bf6a43.tar
crosvm-3806c2d8455b1a54cd20c9c9e6bd46fe95bf6a43.tar.gz
crosvm-3806c2d8455b1a54cd20c9c9e6bd46fe95bf6a43.tar.bz2
crosvm-3806c2d8455b1a54cd20c9c9e6bd46fe95bf6a43.tar.lz
crosvm-3806c2d8455b1a54cd20c9c9e6bd46fe95bf6a43.tar.xz
crosvm-3806c2d8455b1a54cd20c9c9e6bd46fe95bf6a43.tar.zst
crosvm-3806c2d8455b1a54cd20c9c9e6bd46fe95bf6a43.zip
device_type
-rw-r--r--devices/src/virtio/controller.rs14
-rw-r--r--src/wl.rs23
2 files changed, 28 insertions, 9 deletions
diff --git a/devices/src/virtio/controller.rs b/devices/src/virtio/controller.rs
index 857bbe8..514a96b 100644
--- a/devices/src/virtio/controller.rs
+++ b/devices/src/virtio/controller.rs
@@ -83,6 +83,8 @@ pub enum MsgOnSocketRequest {
         memory_params: MemoryParams,
     },
 
+    DeviceType,
+
     Features,
 
     AckFeatures(u64),
@@ -127,6 +129,7 @@ impl From<BincodeRequest> for Request {
 
 #[derive(Debug, MsgOnSocket)]
 pub enum MsgOnSocketResponse {
+    DeviceType(u32),
     Features(u64),
     Reset(bool),
     Kill,
@@ -316,7 +319,16 @@ impl VirtioDevice for Controller {
     }
 
     fn device_type(&self) -> u32 {
-        TYPE_WL
+        if let Err(e) = self.socket.send(MsgOnSocketRequest::DeviceType) {
+            panic!("failed to send DeviceType: {}", e);
+        }
+
+        match self.socket.recv_msg_on_socket() {
+            Ok(MsgOnSocketResponse::DeviceType(device_type)) => device_type,
+            response => {
+                panic!("bad response to Reset: {:?}", response);
+            }
+        }
     }
 
     fn queue_max_sizes(&self) -> &[u16] {
diff --git a/src/wl.rs b/src/wl.rs
index fb19622..8cc2aa4 100644
--- a/src/wl.rs
+++ b/src/wl.rs
@@ -55,15 +55,11 @@ fn main() {
     loop {
         use poly_msg_socket::Value::*;
         match msg_socket.recv() {
-            Ok(MsgOnSocket(MsgOnSocketRequest::Kill)) => {
-                // Will block until worker shuts down.
-                drop(wl);
-
-                if let Err(e) = msg_socket.send(MsgOnSocketResponse::Kill) {
-                    error!("responding to Kill failed: {}", e);
+            Ok(MsgOnSocket(MsgOnSocketRequest::DeviceType)) => {
+                let result = wl.device_type();
+                if let Err(e) = msg_socket.send(MsgOnSocketResponse::DeviceType(result)) {
+                    panic!("responding to DeviceType failed: {}", e);
                 }
-
-                break;
             }
 
             Ok(MsgOnSocket(MsgOnSocketRequest::Features)) => {
@@ -143,6 +139,17 @@ fn main() {
                 }
             }
 
+            Ok(MsgOnSocket(MsgOnSocketRequest::Kill)) => {
+                // Will block until worker shuts down.
+                drop(wl);
+
+                if let Err(e) = msg_socket.send(MsgOnSocketResponse::Kill) {
+                    error!("responding to Kill failed: {}", e);
+                }
+
+                break;
+            }
+
             Ok(MsgOnSocket(msg @ MsgOnSocketRequest::Create { .. })) => {
                 panic!("unexpected message {:?}", msg)
             }