1*bb4ee6a4SAndroid Build Coastguard Worker // Copyright 2022 The ChromiumOS Authors
2*bb4ee6a4SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*bb4ee6a4SAndroid Build Coastguard Worker // found in the LICENSE file.
4*bb4ee6a4SAndroid Build Coastguard Worker
5*bb4ee6a4SAndroid Build Coastguard Worker use std::collections::BTreeMap;
6*bb4ee6a4SAndroid Build Coastguard Worker use std::thread;
7*bb4ee6a4SAndroid Build Coastguard Worker use std::thread::JoinHandle;
8*bb4ee6a4SAndroid Build Coastguard Worker use std::time::Duration;
9*bb4ee6a4SAndroid Build Coastguard Worker
10*bb4ee6a4SAndroid Build Coastguard Worker use anyhow::Result;
11*bb4ee6a4SAndroid Build Coastguard Worker use arch::RunnableLinuxVm;
12*bb4ee6a4SAndroid Build Coastguard Worker use arch::VcpuArch;
13*bb4ee6a4SAndroid Build Coastguard Worker use arch::VirtioDeviceStub;
14*bb4ee6a4SAndroid Build Coastguard Worker use arch::VmArch;
15*bb4ee6a4SAndroid Build Coastguard Worker use base::info;
16*bb4ee6a4SAndroid Build Coastguard Worker use base::AsRawDescriptor;
17*bb4ee6a4SAndroid Build Coastguard Worker use base::CloseNotifier;
18*bb4ee6a4SAndroid Build Coastguard Worker use base::Event;
19*bb4ee6a4SAndroid Build Coastguard Worker use base::EventToken;
20*bb4ee6a4SAndroid Build Coastguard Worker use base::ProtoTube;
21*bb4ee6a4SAndroid Build Coastguard Worker use base::ReadNotifier;
22*bb4ee6a4SAndroid Build Coastguard Worker use base::SendTube;
23*bb4ee6a4SAndroid Build Coastguard Worker use base::Tube;
24*bb4ee6a4SAndroid Build Coastguard Worker use base::WaitContext;
25*bb4ee6a4SAndroid Build Coastguard Worker use crosvm_cli::sys::windows::exit::Exit;
26*bb4ee6a4SAndroid Build Coastguard Worker use crosvm_cli::sys::windows::exit::ExitContext;
27*bb4ee6a4SAndroid Build Coastguard Worker use devices::virtio;
28*bb4ee6a4SAndroid Build Coastguard Worker #[cfg(feature = "gpu")]
29*bb4ee6a4SAndroid Build Coastguard Worker use devices::virtio::gpu::EventDevice;
30*bb4ee6a4SAndroid Build Coastguard Worker #[cfg(feature = "gpu")]
31*bb4ee6a4SAndroid Build Coastguard Worker use devices::virtio::vhost::user::gpu::sys::windows::product::GpuBackendConfig as GpuBackendConfigProduct;
32*bb4ee6a4SAndroid Build Coastguard Worker #[cfg(feature = "gpu")]
33*bb4ee6a4SAndroid Build Coastguard Worker use devices::virtio::vhost::user::gpu::sys::windows::product::GpuVmmConfig as GpuVmmConfigProduct;
34*bb4ee6a4SAndroid Build Coastguard Worker #[cfg(feature = "gpu")]
35*bb4ee6a4SAndroid Build Coastguard Worker use devices::virtio::vhost::user::gpu::sys::windows::product::WindowProcedureThreadVmmConfig as WindowProcedureThreadVmmConfigProduct;
36*bb4ee6a4SAndroid Build Coastguard Worker #[cfg(feature = "gpu")]
37*bb4ee6a4SAndroid Build Coastguard Worker use devices::virtio::vhost::user::gpu::sys::windows::GpuVmmConfig;
38*bb4ee6a4SAndroid Build Coastguard Worker #[cfg(feature = "gpu")]
39*bb4ee6a4SAndroid Build Coastguard Worker use devices::virtio::vhost::user::gpu::sys::windows::InputEventVmmConfig;
40*bb4ee6a4SAndroid Build Coastguard Worker #[cfg(feature = "gpu")]
41*bb4ee6a4SAndroid Build Coastguard Worker use devices::virtio::vhost::user::gpu::sys::windows::WindowProcedureThreadVmmConfig;
42*bb4ee6a4SAndroid Build Coastguard Worker #[cfg(feature = "audio")]
43*bb4ee6a4SAndroid Build Coastguard Worker use devices::virtio::vhost::user::snd::sys::windows::product::SndBackendConfig as SndBackendConfigProduct;
44*bb4ee6a4SAndroid Build Coastguard Worker #[cfg(feature = "audio")]
45*bb4ee6a4SAndroid Build Coastguard Worker use devices::virtio::vhost::user::snd::sys::windows::product::SndVmmConfig as SndVmmConfigProduct;
46*bb4ee6a4SAndroid Build Coastguard Worker #[cfg(feature = "audio")]
47*bb4ee6a4SAndroid Build Coastguard Worker use devices::virtio::vhost::user::snd::sys::windows::SndVmmConfig;
48*bb4ee6a4SAndroid Build Coastguard Worker #[cfg(feature = "gpu")]
49*bb4ee6a4SAndroid Build Coastguard Worker use devices::virtio::DisplayBackend;
50*bb4ee6a4SAndroid Build Coastguard Worker #[cfg(feature = "gpu")]
51*bb4ee6a4SAndroid Build Coastguard Worker use devices::virtio::Gpu;
52*bb4ee6a4SAndroid Build Coastguard Worker #[cfg(feature = "gpu")]
53*bb4ee6a4SAndroid Build Coastguard Worker use devices::virtio::GpuParameters;
54*bb4ee6a4SAndroid Build Coastguard Worker #[cfg(feature = "gpu")]
55*bb4ee6a4SAndroid Build Coastguard Worker use gpu_display::WindowProcedureThread;
56*bb4ee6a4SAndroid Build Coastguard Worker #[cfg(feature = "gpu")]
57*bb4ee6a4SAndroid Build Coastguard Worker use gpu_display::WindowProcedureThreadBuilder;
58*bb4ee6a4SAndroid Build Coastguard Worker pub(crate) use metrics::log_descriptor;
59*bb4ee6a4SAndroid Build Coastguard Worker pub(crate) use metrics::MetricEventType;
60*bb4ee6a4SAndroid Build Coastguard Worker use sync::Mutex;
61*bb4ee6a4SAndroid Build Coastguard Worker #[cfg(feature = "balloon")]
62*bb4ee6a4SAndroid Build Coastguard Worker use vm_control::BalloonTube;
63*bb4ee6a4SAndroid Build Coastguard Worker use vm_control::InitialAudioSessionState;
64*bb4ee6a4SAndroid Build Coastguard Worker use vm_control::PvClockCommand;
65*bb4ee6a4SAndroid Build Coastguard Worker use vm_control::VmRequest;
66*bb4ee6a4SAndroid Build Coastguard Worker use vm_control::VmResponse;
67*bb4ee6a4SAndroid Build Coastguard Worker use vm_control::VmRunMode;
68*bb4ee6a4SAndroid Build Coastguard Worker
69*bb4ee6a4SAndroid Build Coastguard Worker use super::run_vcpu::VcpuRunMode;
70*bb4ee6a4SAndroid Build Coastguard Worker use crate::crosvm::config::Config;
71*bb4ee6a4SAndroid Build Coastguard Worker use crate::crosvm::sys::cmdline::RunMetricsCommand;
72*bb4ee6a4SAndroid Build Coastguard Worker use crate::sys::windows::TaggedControlTube as SharedTaggedControlTube;
73*bb4ee6a4SAndroid Build Coastguard Worker
74*bb4ee6a4SAndroid Build Coastguard Worker pub struct MessageFromService {}
75*bb4ee6a4SAndroid Build Coastguard Worker
76*bb4ee6a4SAndroid Build Coastguard Worker pub struct ServiceVmState {}
77*bb4ee6a4SAndroid Build Coastguard Worker
78*bb4ee6a4SAndroid Build Coastguard Worker impl ServiceVmState {
set_memory_size(&mut self, _size: u64)79*bb4ee6a4SAndroid Build Coastguard Worker pub fn set_memory_size(&mut self, _size: u64) {}
generate_send_state_message(&self)80*bb4ee6a4SAndroid Build Coastguard Worker pub fn generate_send_state_message(&self) {}
81*bb4ee6a4SAndroid Build Coastguard Worker }
82*bb4ee6a4SAndroid Build Coastguard Worker
83*bb4ee6a4SAndroid Build Coastguard Worker pub struct ServiceAudioStates {}
84*bb4ee6a4SAndroid Build Coastguard Worker
85*bb4ee6a4SAndroid Build Coastguard Worker pub(super) struct RunControlArgs {}
86*bb4ee6a4SAndroid Build Coastguard Worker
87*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug)]
88*bb4ee6a4SAndroid Build Coastguard Worker pub(super) enum TaggedControlTube {
89*bb4ee6a4SAndroid Build Coastguard Worker Unused,
90*bb4ee6a4SAndroid Build Coastguard Worker }
91*bb4ee6a4SAndroid Build Coastguard Worker
92*bb4ee6a4SAndroid Build Coastguard Worker impl ReadNotifier for TaggedControlTube {
get_read_notifier(&self) -> &dyn AsRawDescriptor93*bb4ee6a4SAndroid Build Coastguard Worker fn get_read_notifier(&self) -> &dyn AsRawDescriptor {
94*bb4ee6a4SAndroid Build Coastguard Worker panic!(
95*bb4ee6a4SAndroid Build Coastguard Worker "get_read_notifier called on generic tagged control: {:?}",
96*bb4ee6a4SAndroid Build Coastguard Worker self
97*bb4ee6a4SAndroid Build Coastguard Worker )
98*bb4ee6a4SAndroid Build Coastguard Worker }
99*bb4ee6a4SAndroid Build Coastguard Worker }
100*bb4ee6a4SAndroid Build Coastguard Worker
101*bb4ee6a4SAndroid Build Coastguard Worker impl CloseNotifier for TaggedControlTube {
get_close_notifier(&self) -> &dyn AsRawDescriptor102*bb4ee6a4SAndroid Build Coastguard Worker fn get_close_notifier(&self) -> &dyn AsRawDescriptor {
103*bb4ee6a4SAndroid Build Coastguard Worker panic!(
104*bb4ee6a4SAndroid Build Coastguard Worker "get_read_notifier called on generic tagged control: {:?}",
105*bb4ee6a4SAndroid Build Coastguard Worker self
106*bb4ee6a4SAndroid Build Coastguard Worker )
107*bb4ee6a4SAndroid Build Coastguard Worker }
108*bb4ee6a4SAndroid Build Coastguard Worker }
109*bb4ee6a4SAndroid Build Coastguard Worker
110*bb4ee6a4SAndroid Build Coastguard Worker #[derive(EventToken, Debug)]
111*bb4ee6a4SAndroid Build Coastguard Worker pub(super) enum Token {
112*bb4ee6a4SAndroid Build Coastguard Worker VmEvent,
113*bb4ee6a4SAndroid Build Coastguard Worker BrokerShutdown,
114*bb4ee6a4SAndroid Build Coastguard Worker VmControlServer,
115*bb4ee6a4SAndroid Build Coastguard Worker VmControl { id: usize },
116*bb4ee6a4SAndroid Build Coastguard Worker BalloonTube,
117*bb4ee6a4SAndroid Build Coastguard Worker }
118*bb4ee6a4SAndroid Build Coastguard Worker
handle_hungup_event(token: &Token)119*bb4ee6a4SAndroid Build Coastguard Worker pub(super) fn handle_hungup_event(token: &Token) {
120*bb4ee6a4SAndroid Build Coastguard Worker panic!(
121*bb4ee6a4SAndroid Build Coastguard Worker "Unable to handle hungup on a shared token in product specific handler: {:?}",
122*bb4ee6a4SAndroid Build Coastguard Worker token
123*bb4ee6a4SAndroid Build Coastguard Worker )
124*bb4ee6a4SAndroid Build Coastguard Worker }
125*bb4ee6a4SAndroid Build Coastguard Worker
setup_common_metric_invariants(cfg: &Config)126*bb4ee6a4SAndroid Build Coastguard Worker pub(super) fn setup_common_metric_invariants(cfg: &Config) {}
127*bb4ee6a4SAndroid Build Coastguard Worker
128*bb4ee6a4SAndroid Build Coastguard Worker // Sets package name to the name contained in `msg`.
set_package_name(msg: &MessageFromService)129*bb4ee6a4SAndroid Build Coastguard Worker pub(super) fn set_package_name(msg: &MessageFromService) {}
130*bb4ee6a4SAndroid Build Coastguard Worker
get_run_control_args(cfg: &mut Config) -> RunControlArgs131*bb4ee6a4SAndroid Build Coastguard Worker pub(super) fn get_run_control_args(cfg: &mut Config) -> RunControlArgs {
132*bb4ee6a4SAndroid Build Coastguard Worker RunControlArgs {}
133*bb4ee6a4SAndroid Build Coastguard Worker }
134*bb4ee6a4SAndroid Build Coastguard Worker // Merges session invariants.
merge_session_invariants(serialized_session_invariants: &[u8])135*bb4ee6a4SAndroid Build Coastguard Worker pub(super) fn merge_session_invariants(serialized_session_invariants: &[u8]) {}
136*bb4ee6a4SAndroid Build Coastguard Worker
137*bb4ee6a4SAndroid Build Coastguard Worker // Handles sending command to pvclock device.
138*bb4ee6a4SAndroid Build Coastguard Worker #[cfg(feature = "pvclock")]
handle_pvclock_request(tube: &Option<Tube>, command: PvClockCommand) -> Result<()>139*bb4ee6a4SAndroid Build Coastguard Worker pub(super) fn handle_pvclock_request(tube: &Option<Tube>, command: PvClockCommand) -> Result<()> {
140*bb4ee6a4SAndroid Build Coastguard Worker Ok(())
141*bb4ee6a4SAndroid Build Coastguard Worker }
142*bb4ee6a4SAndroid Build Coastguard Worker
143*bb4ee6a4SAndroid Build Coastguard Worker // Run ime thread.
run_ime_thread( product_args: &mut RunControlArgs, exit_evt: &Event, ) -> Result<Option<JoinHandle<Result<()>>>>144*bb4ee6a4SAndroid Build Coastguard Worker pub(super) fn run_ime_thread(
145*bb4ee6a4SAndroid Build Coastguard Worker product_args: &mut RunControlArgs,
146*bb4ee6a4SAndroid Build Coastguard Worker exit_evt: &Event,
147*bb4ee6a4SAndroid Build Coastguard Worker ) -> Result<Option<JoinHandle<Result<()>>>> {
148*bb4ee6a4SAndroid Build Coastguard Worker Ok(None)
149*bb4ee6a4SAndroid Build Coastguard Worker }
150*bb4ee6a4SAndroid Build Coastguard Worker
create_snd_state_tube( control_tubes: &mut [SharedTaggedControlTube], ) -> Result<Option<Tube>>151*bb4ee6a4SAndroid Build Coastguard Worker pub(super) fn create_snd_state_tube(
152*bb4ee6a4SAndroid Build Coastguard Worker control_tubes: &mut [SharedTaggedControlTube],
153*bb4ee6a4SAndroid Build Coastguard Worker ) -> Result<Option<Tube>> {
154*bb4ee6a4SAndroid Build Coastguard Worker Ok(None)
155*bb4ee6a4SAndroid Build Coastguard Worker }
156*bb4ee6a4SAndroid Build Coastguard Worker
create_snd_mute_tube_pair() -> Result<(Option<Tube>, Option<Tube>)>157*bb4ee6a4SAndroid Build Coastguard Worker pub(super) fn create_snd_mute_tube_pair() -> Result<(Option<Tube>, Option<Tube>)> {
158*bb4ee6a4SAndroid Build Coastguard Worker Ok((None, None))
159*bb4ee6a4SAndroid Build Coastguard Worker }
160*bb4ee6a4SAndroid Build Coastguard Worker
161*bb4ee6a4SAndroid Build Coastguard Worker // Returns two tubes and a handle to service_ipc. One for ipc_main_loop and another
162*bb4ee6a4SAndroid Build Coastguard Worker // for proto_main_loop.
start_service_ipc_listener( service_pipe_name: Option<String>, ) -> Result<(Option<Tube>, Option<ProtoTube>, Option<()>)>163*bb4ee6a4SAndroid Build Coastguard Worker pub(super) fn start_service_ipc_listener(
164*bb4ee6a4SAndroid Build Coastguard Worker service_pipe_name: Option<String>,
165*bb4ee6a4SAndroid Build Coastguard Worker ) -> Result<(Option<Tube>, Option<ProtoTube>, Option<()>)> {
166*bb4ee6a4SAndroid Build Coastguard Worker Ok((None, None, None))
167*bb4ee6a4SAndroid Build Coastguard Worker }
168*bb4ee6a4SAndroid Build Coastguard Worker
handle_tagged_control_tube_event( product_tube: &TaggedControlTube, virtio_snd_host_mute_tubes: &mut [Tube], service_vm_state: &mut ServiceVmState, ipc_main_loop_tube: Option<&Tube>, )169*bb4ee6a4SAndroid Build Coastguard Worker pub(super) fn handle_tagged_control_tube_event(
170*bb4ee6a4SAndroid Build Coastguard Worker product_tube: &TaggedControlTube,
171*bb4ee6a4SAndroid Build Coastguard Worker virtio_snd_host_mute_tubes: &mut [Tube],
172*bb4ee6a4SAndroid Build Coastguard Worker service_vm_state: &mut ServiceVmState,
173*bb4ee6a4SAndroid Build Coastguard Worker ipc_main_loop_tube: Option<&Tube>,
174*bb4ee6a4SAndroid Build Coastguard Worker ) {
175*bb4ee6a4SAndroid Build Coastguard Worker }
176*bb4ee6a4SAndroid Build Coastguard Worker
push_triggers<'a>( _triggers: &mut [(&'a dyn AsRawDescriptor, Token)], ipc_tube: &'a Option<Tube>, proto_tube: &'a Option<ProtoTube>, )177*bb4ee6a4SAndroid Build Coastguard Worker pub(super) fn push_triggers<'a>(
178*bb4ee6a4SAndroid Build Coastguard Worker _triggers: &mut [(&'a dyn AsRawDescriptor, Token)],
179*bb4ee6a4SAndroid Build Coastguard Worker ipc_tube: &'a Option<Tube>,
180*bb4ee6a4SAndroid Build Coastguard Worker proto_tube: &'a Option<ProtoTube>,
181*bb4ee6a4SAndroid Build Coastguard Worker ) {
182*bb4ee6a4SAndroid Build Coastguard Worker if ipc_tube.is_some() {
183*bb4ee6a4SAndroid Build Coastguard Worker panic!("trying to push non-none ipc tube in generic product");
184*bb4ee6a4SAndroid Build Coastguard Worker }
185*bb4ee6a4SAndroid Build Coastguard Worker if proto_tube.is_some() {
186*bb4ee6a4SAndroid Build Coastguard Worker panic!("trying to push non-none proto tube in generic product");
187*bb4ee6a4SAndroid Build Coastguard Worker }
188*bb4ee6a4SAndroid Build Coastguard Worker }
189*bb4ee6a4SAndroid Build Coastguard Worker
handle_received_token<'a, V: VmArch + 'static, Vcpu: VcpuArch + 'static, F>( token: &Token, _anti_tamper_main_thread_tube: &Option<ProtoTube>, #[cfg(feature = "balloon")] _balloon_tube: Option<&mut BalloonTube>, _control_tubes: &BTreeMap<usize, SharedTaggedControlTube>, _guest_os: &mut RunnableLinuxVm<V, Vcpu>, _ipc_main_loop_tube: Option<&Tube>, _memory_size_mb: u64, _proto_main_loop_tube: Option<&ProtoTube>, #[cfg(feature = "pvclock")] _pvclock_host_tube: &Option<Tube>, _run_mode_arc: &VcpuRunMode, _service_vm_state: &mut ServiceVmState, _vcpu_boxes: &Mutex<Vec<Box<dyn VcpuArch>>>, _virtio_snd_host_mute_tube: &mut [Tube], _execute_vm_request: F, ) -> Option<VmRunMode> where F: FnMut(VmRequest, &'a mut RunnableLinuxVm<V, Vcpu>) -> (VmResponse, Option<VmRunMode>),190*bb4ee6a4SAndroid Build Coastguard Worker pub(super) fn handle_received_token<'a, V: VmArch + 'static, Vcpu: VcpuArch + 'static, F>(
191*bb4ee6a4SAndroid Build Coastguard Worker token: &Token,
192*bb4ee6a4SAndroid Build Coastguard Worker _anti_tamper_main_thread_tube: &Option<ProtoTube>,
193*bb4ee6a4SAndroid Build Coastguard Worker #[cfg(feature = "balloon")] _balloon_tube: Option<&mut BalloonTube>,
194*bb4ee6a4SAndroid Build Coastguard Worker _control_tubes: &BTreeMap<usize, SharedTaggedControlTube>,
195*bb4ee6a4SAndroid Build Coastguard Worker _guest_os: &mut RunnableLinuxVm<V, Vcpu>,
196*bb4ee6a4SAndroid Build Coastguard Worker _ipc_main_loop_tube: Option<&Tube>,
197*bb4ee6a4SAndroid Build Coastguard Worker _memory_size_mb: u64,
198*bb4ee6a4SAndroid Build Coastguard Worker _proto_main_loop_tube: Option<&ProtoTube>,
199*bb4ee6a4SAndroid Build Coastguard Worker #[cfg(feature = "pvclock")] _pvclock_host_tube: &Option<Tube>,
200*bb4ee6a4SAndroid Build Coastguard Worker _run_mode_arc: &VcpuRunMode,
201*bb4ee6a4SAndroid Build Coastguard Worker _service_vm_state: &mut ServiceVmState,
202*bb4ee6a4SAndroid Build Coastguard Worker _vcpu_boxes: &Mutex<Vec<Box<dyn VcpuArch>>>,
203*bb4ee6a4SAndroid Build Coastguard Worker _virtio_snd_host_mute_tube: &mut [Tube],
204*bb4ee6a4SAndroid Build Coastguard Worker _execute_vm_request: F,
205*bb4ee6a4SAndroid Build Coastguard Worker ) -> Option<VmRunMode>
206*bb4ee6a4SAndroid Build Coastguard Worker where
207*bb4ee6a4SAndroid Build Coastguard Worker F: FnMut(VmRequest, &'a mut RunnableLinuxVm<V, Vcpu>) -> (VmResponse, Option<VmRunMode>),
208*bb4ee6a4SAndroid Build Coastguard Worker {
209*bb4ee6a4SAndroid Build Coastguard Worker panic!(
210*bb4ee6a4SAndroid Build Coastguard Worker "Received an unrecognized shared token to product specific handler: {:?}",
211*bb4ee6a4SAndroid Build Coastguard Worker token
212*bb4ee6a4SAndroid Build Coastguard Worker )
213*bb4ee6a4SAndroid Build Coastguard Worker }
214*bb4ee6a4SAndroid Build Coastguard Worker
spawn_anti_tamper_thread(wait_ctx: &WaitContext<Token>) -> Option<ProtoTube>215*bb4ee6a4SAndroid Build Coastguard Worker pub(super) fn spawn_anti_tamper_thread(wait_ctx: &WaitContext<Token>) -> Option<ProtoTube> {
216*bb4ee6a4SAndroid Build Coastguard Worker None
217*bb4ee6a4SAndroid Build Coastguard Worker }
218*bb4ee6a4SAndroid Build Coastguard Worker
create_service_vm_state(_memory_size_mb: u64) -> ServiceVmState219*bb4ee6a4SAndroid Build Coastguard Worker pub(super) fn create_service_vm_state(_memory_size_mb: u64) -> ServiceVmState {
220*bb4ee6a4SAndroid Build Coastguard Worker ServiceVmState {}
221*bb4ee6a4SAndroid Build Coastguard Worker }
222*bb4ee6a4SAndroid Build Coastguard Worker
223*bb4ee6a4SAndroid Build Coastguard Worker #[cfg(feature = "gpu")]
create_gpu( vm_evt_wrtube: &SendTube, gpu_control_tube: Tube, resource_bridges: Vec<Tube>, display_backends: Vec<DisplayBackend>, gpu_parameters: &GpuParameters, event_devices: Vec<EventDevice>, features: u64, _product_args: GpuBackendConfigProduct, wndproc_thread: WindowProcedureThread, ) -> Result<Gpu>224*bb4ee6a4SAndroid Build Coastguard Worker pub(super) fn create_gpu(
225*bb4ee6a4SAndroid Build Coastguard Worker vm_evt_wrtube: &SendTube,
226*bb4ee6a4SAndroid Build Coastguard Worker gpu_control_tube: Tube,
227*bb4ee6a4SAndroid Build Coastguard Worker resource_bridges: Vec<Tube>,
228*bb4ee6a4SAndroid Build Coastguard Worker display_backends: Vec<DisplayBackend>,
229*bb4ee6a4SAndroid Build Coastguard Worker gpu_parameters: &GpuParameters,
230*bb4ee6a4SAndroid Build Coastguard Worker event_devices: Vec<EventDevice>,
231*bb4ee6a4SAndroid Build Coastguard Worker features: u64,
232*bb4ee6a4SAndroid Build Coastguard Worker _product_args: GpuBackendConfigProduct,
233*bb4ee6a4SAndroid Build Coastguard Worker wndproc_thread: WindowProcedureThread,
234*bb4ee6a4SAndroid Build Coastguard Worker ) -> Result<Gpu> {
235*bb4ee6a4SAndroid Build Coastguard Worker Ok(Gpu::new(
236*bb4ee6a4SAndroid Build Coastguard Worker vm_evt_wrtube
237*bb4ee6a4SAndroid Build Coastguard Worker .try_clone()
238*bb4ee6a4SAndroid Build Coastguard Worker .exit_context(Exit::CloneTube, "failed to clone tube")?,
239*bb4ee6a4SAndroid Build Coastguard Worker gpu_control_tube,
240*bb4ee6a4SAndroid Build Coastguard Worker resource_bridges,
241*bb4ee6a4SAndroid Build Coastguard Worker display_backends,
242*bb4ee6a4SAndroid Build Coastguard Worker gpu_parameters,
243*bb4ee6a4SAndroid Build Coastguard Worker None,
244*bb4ee6a4SAndroid Build Coastguard Worker event_devices,
245*bb4ee6a4SAndroid Build Coastguard Worker features,
246*bb4ee6a4SAndroid Build Coastguard Worker &BTreeMap::new(),
247*bb4ee6a4SAndroid Build Coastguard Worker wndproc_thread,
248*bb4ee6a4SAndroid Build Coastguard Worker ))
249*bb4ee6a4SAndroid Build Coastguard Worker }
250*bb4ee6a4SAndroid Build Coastguard Worker
create_service_audio_states_and_send_to_service( initial_audio_session_states: Vec<InitialAudioSessionState>, ipc_main_loop_tube: &Option<Tube>, ) -> Result<ServiceAudioStates>251*bb4ee6a4SAndroid Build Coastguard Worker pub(super) fn create_service_audio_states_and_send_to_service(
252*bb4ee6a4SAndroid Build Coastguard Worker initial_audio_session_states: Vec<InitialAudioSessionState>,
253*bb4ee6a4SAndroid Build Coastguard Worker ipc_main_loop_tube: &Option<Tube>,
254*bb4ee6a4SAndroid Build Coastguard Worker ) -> Result<ServiceAudioStates> {
255*bb4ee6a4SAndroid Build Coastguard Worker Ok(ServiceAudioStates {})
256*bb4ee6a4SAndroid Build Coastguard Worker }
257*bb4ee6a4SAndroid Build Coastguard Worker
258*bb4ee6a4SAndroid Build Coastguard Worker #[cfg(feature = "gpu")]
push_window_procedure_thread_control_tubes( #[allow(clippy::ptr_arg)] _control_tubes: &mut Vec<SharedTaggedControlTube>, _: &mut WindowProcedureThreadVmmConfig, )259*bb4ee6a4SAndroid Build Coastguard Worker pub(super) fn push_window_procedure_thread_control_tubes(
260*bb4ee6a4SAndroid Build Coastguard Worker #[allow(clippy::ptr_arg)]
261*bb4ee6a4SAndroid Build Coastguard Worker // The implementor can extend the size of this argument, so mutable slice is not enough.
262*bb4ee6a4SAndroid Build Coastguard Worker _control_tubes: &mut Vec<SharedTaggedControlTube>,
263*bb4ee6a4SAndroid Build Coastguard Worker _: &mut WindowProcedureThreadVmmConfig,
264*bb4ee6a4SAndroid Build Coastguard Worker ) {
265*bb4ee6a4SAndroid Build Coastguard Worker }
266*bb4ee6a4SAndroid Build Coastguard Worker
267*bb4ee6a4SAndroid Build Coastguard Worker #[cfg(feature = "gpu")]
push_gpu_control_tubes( _control_tubes: &mut [SharedTaggedControlTube], _gpu_vmm_config: &mut GpuVmmConfig, )268*bb4ee6a4SAndroid Build Coastguard Worker pub(super) fn push_gpu_control_tubes(
269*bb4ee6a4SAndroid Build Coastguard Worker _control_tubes: &mut [SharedTaggedControlTube],
270*bb4ee6a4SAndroid Build Coastguard Worker _gpu_vmm_config: &mut GpuVmmConfig,
271*bb4ee6a4SAndroid Build Coastguard Worker ) {
272*bb4ee6a4SAndroid Build Coastguard Worker }
273*bb4ee6a4SAndroid Build Coastguard Worker
274*bb4ee6a4SAndroid Build Coastguard Worker #[cfg(feature = "audio")]
push_snd_control_tubes( _control_tubes: &mut [SharedTaggedControlTube], _snd_vmm_config: &mut SndVmmConfig, )275*bb4ee6a4SAndroid Build Coastguard Worker pub(super) fn push_snd_control_tubes(
276*bb4ee6a4SAndroid Build Coastguard Worker _control_tubes: &mut [SharedTaggedControlTube],
277*bb4ee6a4SAndroid Build Coastguard Worker _snd_vmm_config: &mut SndVmmConfig,
278*bb4ee6a4SAndroid Build Coastguard Worker ) {
279*bb4ee6a4SAndroid Build Coastguard Worker }
280*bb4ee6a4SAndroid Build Coastguard Worker
281*bb4ee6a4SAndroid Build Coastguard Worker #[cfg(feature = "audio")]
num_input_sound_devices(_cfg: &Config) -> u32282*bb4ee6a4SAndroid Build Coastguard Worker pub(crate) fn num_input_sound_devices(_cfg: &Config) -> u32 {
283*bb4ee6a4SAndroid Build Coastguard Worker 0
284*bb4ee6a4SAndroid Build Coastguard Worker }
285*bb4ee6a4SAndroid Build Coastguard Worker
286*bb4ee6a4SAndroid Build Coastguard Worker #[cfg(feature = "audio")]
num_input_sound_streams(_cfg: &Config) -> u32287*bb4ee6a4SAndroid Build Coastguard Worker pub(crate) fn num_input_sound_streams(_cfg: &Config) -> u32 {
288*bb4ee6a4SAndroid Build Coastguard Worker 0
289*bb4ee6a4SAndroid Build Coastguard Worker }
290*bb4ee6a4SAndroid Build Coastguard Worker
291*bb4ee6a4SAndroid Build Coastguard Worker #[cfg(feature = "gpu")]
get_gpu_product_configs( cfg: &Config, alias_pid: u32, ) -> Result<(GpuBackendConfigProduct, GpuVmmConfigProduct)>292*bb4ee6a4SAndroid Build Coastguard Worker pub(crate) fn get_gpu_product_configs(
293*bb4ee6a4SAndroid Build Coastguard Worker cfg: &Config,
294*bb4ee6a4SAndroid Build Coastguard Worker alias_pid: u32,
295*bb4ee6a4SAndroid Build Coastguard Worker ) -> Result<(GpuBackendConfigProduct, GpuVmmConfigProduct)> {
296*bb4ee6a4SAndroid Build Coastguard Worker Ok((GpuBackendConfigProduct {}, GpuVmmConfigProduct {}))
297*bb4ee6a4SAndroid Build Coastguard Worker }
298*bb4ee6a4SAndroid Build Coastguard Worker
299*bb4ee6a4SAndroid Build Coastguard Worker #[cfg(feature = "audio")]
get_snd_product_configs() -> Result<(SndBackendConfigProduct, SndVmmConfigProduct)>300*bb4ee6a4SAndroid Build Coastguard Worker pub(crate) fn get_snd_product_configs() -> Result<(SndBackendConfigProduct, SndVmmConfigProduct)> {
301*bb4ee6a4SAndroid Build Coastguard Worker Ok((SndBackendConfigProduct {}, SndVmmConfigProduct {}))
302*bb4ee6a4SAndroid Build Coastguard Worker }
303*bb4ee6a4SAndroid Build Coastguard Worker
run_metrics(_args: RunMetricsCommand) -> Result<()>304*bb4ee6a4SAndroid Build Coastguard Worker pub(crate) fn run_metrics(_args: RunMetricsCommand) -> Result<()> {
305*bb4ee6a4SAndroid Build Coastguard Worker info!("sleep forever. We will get killed by broker");
306*bb4ee6a4SAndroid Build Coastguard Worker thread::sleep(Duration::MAX);
307*bb4ee6a4SAndroid Build Coastguard Worker Ok(())
308*bb4ee6a4SAndroid Build Coastguard Worker }
309*bb4ee6a4SAndroid Build Coastguard Worker
setup_metrics_reporting() -> Result<()>310*bb4ee6a4SAndroid Build Coastguard Worker pub(crate) fn setup_metrics_reporting() -> Result<()> {
311*bb4ee6a4SAndroid Build Coastguard Worker Ok(())
312*bb4ee6a4SAndroid Build Coastguard Worker }
313*bb4ee6a4SAndroid Build Coastguard Worker
push_mouse_device( cfg: &Config, #[cfg(feature = "gpu")] _input_event_vmm_config: &mut InputEventVmmConfig, _devs: &mut [VirtioDeviceStub], ) -> Result<()>314*bb4ee6a4SAndroid Build Coastguard Worker pub(super) fn push_mouse_device(
315*bb4ee6a4SAndroid Build Coastguard Worker cfg: &Config,
316*bb4ee6a4SAndroid Build Coastguard Worker #[cfg(feature = "gpu")] _input_event_vmm_config: &mut InputEventVmmConfig,
317*bb4ee6a4SAndroid Build Coastguard Worker _devs: &mut [VirtioDeviceStub],
318*bb4ee6a4SAndroid Build Coastguard Worker ) -> Result<()> {
319*bb4ee6a4SAndroid Build Coastguard Worker Ok(())
320*bb4ee6a4SAndroid Build Coastguard Worker }
321*bb4ee6a4SAndroid Build Coastguard Worker
322*bb4ee6a4SAndroid Build Coastguard Worker #[cfg(feature = "pvclock")]
push_pvclock_device( cfg: &Config, devs: &mut [VirtioDeviceStub], tsc_frequency: u64, tube: Tube, )323*bb4ee6a4SAndroid Build Coastguard Worker pub(super) fn push_pvclock_device(
324*bb4ee6a4SAndroid Build Coastguard Worker cfg: &Config,
325*bb4ee6a4SAndroid Build Coastguard Worker devs: &mut [VirtioDeviceStub],
326*bb4ee6a4SAndroid Build Coastguard Worker tsc_frequency: u64,
327*bb4ee6a4SAndroid Build Coastguard Worker tube: Tube,
328*bb4ee6a4SAndroid Build Coastguard Worker ) {
329*bb4ee6a4SAndroid Build Coastguard Worker }
330*bb4ee6a4SAndroid Build Coastguard Worker
331*bb4ee6a4SAndroid Build Coastguard Worker #[cfg(feature = "gpu")]
get_window_procedure_thread_product_configs( _: &Config, _: &mut WindowProcedureThreadBuilder, _main_alias_pid: u32, _device_alias_pid: u32, ) -> Result<WindowProcedureThreadVmmConfigProduct>332*bb4ee6a4SAndroid Build Coastguard Worker pub(crate) fn get_window_procedure_thread_product_configs(
333*bb4ee6a4SAndroid Build Coastguard Worker _: &Config,
334*bb4ee6a4SAndroid Build Coastguard Worker _: &mut WindowProcedureThreadBuilder,
335*bb4ee6a4SAndroid Build Coastguard Worker _main_alias_pid: u32,
336*bb4ee6a4SAndroid Build Coastguard Worker _device_alias_pid: u32,
337*bb4ee6a4SAndroid Build Coastguard Worker ) -> Result<WindowProcedureThreadVmmConfigProduct> {
338*bb4ee6a4SAndroid Build Coastguard Worker Ok(WindowProcedureThreadVmmConfigProduct {})
339*bb4ee6a4SAndroid Build Coastguard Worker }
340