xref: /aosp_15_r20/external/crosvm/devices/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::io;
6*bb4ee6a4SAndroid Build Coastguard Worker 
7*bb4ee6a4SAndroid Build Coastguard Worker use base::Event;
8*bb4ee6a4SAndroid Build Coastguard Worker use base::FileSync;
9*bb4ee6a4SAndroid Build Coastguard Worker use base::RawDescriptor;
10*bb4ee6a4SAndroid Build Coastguard Worker use hypervisor::ProtectionType;
11*bb4ee6a4SAndroid Build Coastguard Worker 
12*bb4ee6a4SAndroid Build Coastguard Worker use crate::serial_device::SerialInput;
13*bb4ee6a4SAndroid Build Coastguard Worker use crate::serial_device::SerialOptions;
14*bb4ee6a4SAndroid Build Coastguard Worker use crate::sys::serial_device::SerialDevice;
15*bb4ee6a4SAndroid Build Coastguard Worker use crate::Serial;
16*bb4ee6a4SAndroid Build Coastguard Worker 
17*bb4ee6a4SAndroid Build Coastguard Worker // TODO(b/234469655): Remove type alias once ReadNotifier is implemented for
18*bb4ee6a4SAndroid Build Coastguard Worker // PipeConnection.
19*bb4ee6a4SAndroid Build Coastguard Worker pub(crate) type InStreamType = Box<dyn SerialInput>;
20*bb4ee6a4SAndroid Build Coastguard Worker 
21*bb4ee6a4SAndroid Build Coastguard Worker impl SerialDevice for Serial {
22*bb4ee6a4SAndroid Build Coastguard Worker     /// Constructs a Serial device ready for input and output.
23*bb4ee6a4SAndroid Build Coastguard Worker     ///
24*bb4ee6a4SAndroid Build Coastguard Worker     /// The stream `input` should not block, instead returning 0 bytes if are no bytes available.
new( _protection_type: ProtectionType, interrupt_evt: Event, input: Option<Box<dyn SerialInput>>, out: Option<Box<dyn io::Write + Send>>, _sync: Option<Box<dyn FileSync + Send>>, options: SerialOptions, _keep_rds: Vec<RawDescriptor>, ) -> Serial25*bb4ee6a4SAndroid Build Coastguard Worker     fn new(
26*bb4ee6a4SAndroid Build Coastguard Worker         _protection_type: ProtectionType,
27*bb4ee6a4SAndroid Build Coastguard Worker         interrupt_evt: Event,
28*bb4ee6a4SAndroid Build Coastguard Worker         input: Option<Box<dyn SerialInput>>,
29*bb4ee6a4SAndroid Build Coastguard Worker         out: Option<Box<dyn io::Write + Send>>,
30*bb4ee6a4SAndroid Build Coastguard Worker         _sync: Option<Box<dyn FileSync + Send>>,
31*bb4ee6a4SAndroid Build Coastguard Worker         options: SerialOptions,
32*bb4ee6a4SAndroid Build Coastguard Worker         _keep_rds: Vec<RawDescriptor>,
33*bb4ee6a4SAndroid Build Coastguard Worker     ) -> Serial {
34*bb4ee6a4SAndroid Build Coastguard Worker         Serial::new_common(interrupt_evt, input, out, options.out_timestamp)
35*bb4ee6a4SAndroid Build Coastguard Worker     }
36*bb4ee6a4SAndroid Build Coastguard Worker }
37