xref: /aosp_15_r20/external/crosvm/arch/src/serial/sys/linux.rs (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
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::sync::Arc;
6*bb4ee6a4SAndroid Build Coastguard Worker 
7*bb4ee6a4SAndroid Build Coastguard Worker use base::RawDescriptor;
8*bb4ee6a4SAndroid Build Coastguard Worker use devices::serial_device::SerialParameters;
9*bb4ee6a4SAndroid Build Coastguard Worker use devices::BusDevice;
10*bb4ee6a4SAndroid Build Coastguard Worker use devices::ProxyDevice;
11*bb4ee6a4SAndroid Build Coastguard Worker use devices::Serial;
12*bb4ee6a4SAndroid Build Coastguard Worker use minijail::Minijail;
13*bb4ee6a4SAndroid Build Coastguard Worker use sync::Mutex;
14*bb4ee6a4SAndroid Build Coastguard Worker 
15*bb4ee6a4SAndroid Build Coastguard Worker use crate::DeviceRegistrationError;
16*bb4ee6a4SAndroid Build Coastguard Worker 
add_serial_device( com: Serial, _serial_parameters: &SerialParameters, serial_jail: Option<Minijail>, preserved_descriptors: Vec<RawDescriptor>, #[cfg(feature = "swap")] swap_controller: &mut Option<swap::SwapController>, ) -> std::result::Result<Arc<Mutex<dyn BusDevice>>, DeviceRegistrationError>17*bb4ee6a4SAndroid Build Coastguard Worker pub fn add_serial_device(
18*bb4ee6a4SAndroid Build Coastguard Worker     com: Serial,
19*bb4ee6a4SAndroid Build Coastguard Worker     _serial_parameters: &SerialParameters,
20*bb4ee6a4SAndroid Build Coastguard Worker     serial_jail: Option<Minijail>,
21*bb4ee6a4SAndroid Build Coastguard Worker     preserved_descriptors: Vec<RawDescriptor>,
22*bb4ee6a4SAndroid Build Coastguard Worker     #[cfg(feature = "swap")] swap_controller: &mut Option<swap::SwapController>,
23*bb4ee6a4SAndroid Build Coastguard Worker ) -> std::result::Result<Arc<Mutex<dyn BusDevice>>, DeviceRegistrationError> {
24*bb4ee6a4SAndroid Build Coastguard Worker     let com: Arc<Mutex<dyn BusDevice>> = if let Some(serial_jail) = serial_jail {
25*bb4ee6a4SAndroid Build Coastguard Worker         Arc::new(Mutex::new(
26*bb4ee6a4SAndroid Build Coastguard Worker             ProxyDevice::new(
27*bb4ee6a4SAndroid Build Coastguard Worker                 com,
28*bb4ee6a4SAndroid Build Coastguard Worker                 serial_jail,
29*bb4ee6a4SAndroid Build Coastguard Worker                 preserved_descriptors,
30*bb4ee6a4SAndroid Build Coastguard Worker                 #[cfg(feature = "swap")]
31*bb4ee6a4SAndroid Build Coastguard Worker                 swap_controller,
32*bb4ee6a4SAndroid Build Coastguard Worker             )
33*bb4ee6a4SAndroid Build Coastguard Worker             .map_err(DeviceRegistrationError::ProxyDeviceCreation)?,
34*bb4ee6a4SAndroid Build Coastguard Worker         ))
35*bb4ee6a4SAndroid Build Coastguard Worker     } else {
36*bb4ee6a4SAndroid Build Coastguard Worker         Arc::new(Mutex::new(com))
37*bb4ee6a4SAndroid Build Coastguard Worker     };
38*bb4ee6a4SAndroid Build Coastguard Worker     Ok(com)
39*bb4ee6a4SAndroid Build Coastguard Worker }
40