summary refs log tree commit diff
path: root/src/linux.rs
diff options
context:
space:
mode:
authorpaulhsia <paulhsia@chromium.org>2019-01-22 15:22:25 +0800
committerchrome-bot <chrome-bot@chromium.org>2019-01-27 10:43:26 -0800
commitf052cfefc8d6d27fa068c34190615db1819b8fef (patch)
treef7d2825383a5f8307a9743971e8bc6b001835965 /src/linux.rs
parent3082e8e48d73a4cf98b33052247d0ddb0d411111 (diff)
downloadcrosvm-f052cfefc8d6d27fa068c34190615db1819b8fef.tar
crosvm-f052cfefc8d6d27fa068c34190615db1819b8fef.tar.gz
crosvm-f052cfefc8d6d27fa068c34190615db1819b8fef.tar.bz2
crosvm-f052cfefc8d6d27fa068c34190615db1819b8fef.tar.lz
crosvm-f052cfefc8d6d27fa068c34190615db1819b8fef.tar.xz
crosvm-f052cfefc8d6d27fa068c34190615db1819b8fef.tar.zst
crosvm-f052cfefc8d6d27fa068c34190615db1819b8fef.zip
linux: Add ac97 device with CRAS backend
Add an ac97 device that plays audio through CRAS audio server.

BUG=chromium:781398
BUG=chromium:907520
TEST=Test building by $ cargo build
TEST=Deploy crosvm to DUT and test audio functionality
CQ-DEPEND=CL:1429311
CQ-DEPEND=CL:1429542

Change-Id: Ia273d8f1e82c20d1f1882f088886458339399aae
Reviewed-on: https://chromium-review.googlesource.com/1426282
Commit-Ready: Chih-Yang Hsia <paulhsia@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Tested-by: Chih-Yang Hsia <paulhsia@chromium.org>
Reviewed-by: Chih-Yang Hsia <paulhsia@chromium.org>
Diffstat (limited to 'src/linux.rs')
-rw-r--r--src/linux.rs15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/linux.rs b/src/linux.rs
index 8c33d12..a61392b 100644
--- a/src/linux.rs
+++ b/src/linux.rs
@@ -26,6 +26,7 @@ use byteorder::{ByteOrder, LittleEndian};
 use devices::{self, PciDevice, VirtioPciDevice};
 use io_jail::{self, Minijail};
 use kvm::*;
+use libcras::CrasClient;
 use msg_socket::{MsgReceiver, MsgSender, MsgSocket, UnlinkMsgSocket};
 use net_util::{Error as NetError, Tap};
 use qcow::{self, ImageType, QcowFile};
@@ -633,6 +634,20 @@ fn create_virtio_devs(
         pci_devices.push((pci_dev, stub.jail));
     }
 
+    if cfg.cras_audio {
+        let cras_audio_box = Box::new(devices::Ac97Dev::new(
+            (*mem).clone(),
+            Box::new(CrasClient::new()?),
+        ));
+        let cras_audio_jail = if cfg.multiprocess {
+            let policy_path: PathBuf = cfg.seccomp_policy_dir.join("cras_audio_device.policy");
+            Some(create_base_minijail(empty_root_path, &policy_path)?)
+        } else {
+            None
+        };
+        pci_devices.push((cras_audio_box, cras_audio_jail));
+    }
+
     if cfg.null_audio {
         let null_audio_box = Box::new(devices::Ac97Dev::new(
             (*mem).clone(),