pub struct Serial {Show 17 fields
interrupt_enable: Arc<AtomicU8>,
interrupt_identification: u8,
interrupt_evt: Event,
line_control: u8,
line_status: u8,
modem_control: u8,
modem_status: u8,
scratch: u8,
baud_divisor: u16,
in_buffer: VecDeque<u8>,
in_channel: Option<Receiver<u8>>,
input: Option<Box<dyn SerialInput>>,
out: Option<Box<dyn Write + Send>>,
out_timestamp: bool,
last_write_was_newline: bool,
device_state: DeviceState,
worker: Option<WorkerThread<Box<dyn SerialInput>>>,
}Expand description
Emulates serial COM ports commonly seen on x86 I/O ports 0x3f8/0x2f8/0x3e8/0x2e8.
This can optionally write the guest’s output to a Write trait object. To send input to the
guest, use queue_input_bytes directly, or give a Read trait object which will be used queue
bytes when used_command is called.
Fields§
§interrupt_enable: Arc<AtomicU8>§interrupt_identification: u8§interrupt_evt: Event§line_control: u8§line_status: u8§modem_control: u8§modem_status: u8§scratch: u8§baud_divisor: u16§in_buffer: VecDeque<u8>§in_channel: Option<Receiver<u8>>§input: Option<Box<dyn SerialInput>>§out: Option<Box<dyn Write + Send>>§out_timestamp: bool§last_write_was_newline: bool§device_state: DeviceState§worker: Option<WorkerThread<Box<dyn SerialInput>>>Implementations§
Source§impl Serial
impl Serial
fn new_common( interrupt_evt: Event, input: Option<Box<dyn SerialInput>>, out: Option<Box<dyn Write + Send>>, out_timestamp: bool, ) -> Serial
Sourcepub fn debug_label() -> String
pub fn debug_label() -> String
Returns a debug label for the serial device. Used when setting up IrqEventSource.
Sourcepub fn queue_input_bytes(&mut self, c: &[u8]) -> Result<()>
pub fn queue_input_bytes(&mut self, c: &[u8]) -> Result<()>
Queues raw bytes for the guest to read and signals the interrupt if the line status would change. These bytes will be read by the guest before any bytes from the input stream that have not already been queued.
fn spawn_input_thread(&mut self)
fn drain_in_channel(&mut self)
Sourcepub fn interrupt_event(&self) -> &Event
pub fn interrupt_event(&self) -> &Event
Gets the interrupt event used to interrupt the driver when it needs to respond to this device.
fn is_dlab_set(&self) -> bool
fn is_recv_intr_enabled(&self) -> bool
fn is_thr_intr_enabled(&self) -> bool
fn is_thr_intr_changed(&self, bit: u8) -> bool
fn is_loop(&self) -> bool
fn add_intr_bit(&mut self, bit: u8)
fn del_intr_bit(&mut self, bit: u8)
fn trigger_thr_empty(&mut self) -> Result<()>
fn trigger_recv_interrupt(&mut self) -> Result<()>
fn trigger_interrupt(&mut self) -> Result<()>
fn set_data_bit(&mut self)
fn is_data_avaiable(&self) -> bool
fn iir_reset(&mut self)
fn handle_write(&mut self, offset: u8, v: u8) -> Result<()>
fn handle_write_data(&mut self, v: u8) -> Result<()>
Trait Implementations§
Source§impl BusDevice for Serial
impl BusDevice for Serial
Source§fn device_id(&self) -> DeviceId
fn device_id(&self) -> DeviceId
Source§fn debug_label(&self) -> String
fn debug_label(&self) -> String
Source§fn write(&mut self, info: BusAccessInfo, data: &[u8])
fn write(&mut self, info: BusAccessInfo, data: &[u8])
info.Source§fn read(&mut self, info: BusAccessInfo, data: &mut [u8])
fn read(&mut self, info: BusAccessInfo, data: &mut [u8])
info.Source§fn config_register_write(
&mut self,
reg_idx: usize,
offset: u64,
data: &[u8],
) -> ConfigWriteResult
fn config_register_write( &mut self, reg_idx: usize, offset: u64, data: &[u8], ) -> ConfigWriteResult
Source§fn config_register_read(&self, reg_idx: usize) -> u32
fn config_register_read(&self, reg_idx: usize) -> u32
Source§fn init_pci_config_mapping(
&mut self,
shmem: &SharedMemory,
base: usize,
len: usize,
) -> bool
fn init_pci_config_mapping( &mut self, shmem: &SharedMemory, base: usize, len: usize, ) -> bool
Source§fn virtual_config_register_write(&mut self, reg_idx: usize, value: u32)
fn virtual_config_register_write(&mut self, reg_idx: usize, value: u32)
Source§fn virtual_config_register_read(&self, reg_idx: usize) -> u32
fn virtual_config_register_read(&self, reg_idx: usize) -> u32
Source§fn on_sandboxed(&mut self)
fn on_sandboxed(&mut self)
Source§fn get_ranges(&self) -> Vec<(BusRange, BusType)>
fn get_ranges(&self) -> Vec<(BusRange, BusType)>
Source§fn destroy_device(&mut self)
fn destroy_device(&mut self)
Source§fn supports_power_management(&self) -> Result<bool>
fn supports_power_management(&self) -> Result<bool>
Source§fn initial_power_state(&self) -> bool
fn initial_power_state(&self) -> bool
Source§fn is_bridge(&self) -> Option<u8>
fn is_bridge(&self) -> Option<u8>
Source§fn handle_hypercall(&self, abi: &mut HypercallAbi) -> Result<()>
fn handle_hypercall(&self, abi: &mut HypercallAbi) -> Result<()>
Source§impl SerialDevice for Serial
impl SerialDevice for Serial
Source§fn new(
_protection_type: ProtectionType,
interrupt_evt: Event,
input: Option<Box<dyn SerialInput>>,
out: Option<Box<dyn Write + Send>>,
_sync: Option<Box<dyn FileSync + Send>>,
options: SerialOptions,
_keep_rds: Vec<RawDescriptor>,
) -> Serial
fn new( _protection_type: ProtectionType, interrupt_evt: Event, input: Option<Box<dyn SerialInput>>, out: Option<Box<dyn Write + Send>>, _sync: Option<Box<dyn FileSync + Send>>, options: SerialOptions, _keep_rds: Vec<RawDescriptor>, ) -> Serial
Constructs a Serial device ready for input and output.
The stream input should not block, instead returning 0 bytes if are no bytes available.