uefi_raw/protocol/console/
serial.rs1use crate::{Guid, Status, guid, newtype_enum};
4use bitflags::bitflags;
5
6bitflags! {
7 #[repr(transparent)]
11 #[derive(Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord)]
12 pub struct ControlBits: u32 {
13 const CLEAR_TO_SEND = 0x10;
15 const DATA_SET_READY = 0x20;
17 const RING_INDICATE = 0x40;
19 const CARRIER_DETECT = 0x80;
21 const INPUT_BUFFER_EMPTY = 0x100;
23 const OUTPUT_BUFFER_EMPTY = 0x200;
25
26 const DATA_TERMINAL_READY = 0x1;
28 const REQUEST_TO_SEND = 0x2;
30 const HARDWARE_LOOPBACK_ENABLE = 0x1000;
32 const SOFTWARE_LOOPBACK_ENABLE = 0x2000;
34 const HARDWARE_FLOW_CONTROL_ENABLE = 0x4000;
36
37 const SETTABLE =
41 ControlBits::DATA_TERMINAL_READY.bits()
42 | ControlBits::REQUEST_TO_SEND.bits()
43 | ControlBits::HARDWARE_LOOPBACK_ENABLE.bits()
44 | ControlBits::SOFTWARE_LOOPBACK_ENABLE.bits()
45 | ControlBits::HARDWARE_FLOW_CONTROL_ENABLE.bits();
46 }
47}
48
49#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd)]
61#[repr(C)]
62pub struct SerialIoMode {
63 pub control_mask: ControlBits,
65 pub timeout: u32,
68 pub baud_rate: u64,
70 pub receive_fifo_depth: u32,
72 pub data_bits: u32,
74 pub parity: Parity,
76 pub stop_bits: StopBits,
78}
79
80newtype_enum! {
81 #[derive(Default)]
83 pub enum SerialIoProtocolRevision: u32 => {
84 REVISION_1_0 = 0x00010000,
86 REVISION_1_1 = 0x00010001,
88 }
89}
90
91#[derive(Debug)]
93#[repr(C)]
94pub struct SerialIoProtocol {
95 pub revision: SerialIoProtocolRevision,
96 pub reset: unsafe extern "efiapi" fn(*mut Self) -> Status,
97 pub set_attributes: unsafe extern "efiapi" fn(
98 *mut Self,
99 baud_rate: u64,
100 receive_fifo_depth: u32,
101 timeout: u32,
102 parity: Parity,
103 data_bits: u8,
104 stop_bits_type: StopBits,
105 ) -> Status,
106 pub set_control_bits: unsafe extern "efiapi" fn(*mut Self, ControlBits) -> Status,
107 pub get_control_bits: unsafe extern "efiapi" fn(*const Self, *mut ControlBits) -> Status,
108 pub write: unsafe extern "efiapi" fn(*mut Self, *mut usize, *const u8) -> Status,
109 pub read: unsafe extern "efiapi" fn(*mut Self, *mut usize, *mut u8) -> Status,
110 pub mode: *const SerialIoMode,
111}
112
113impl SerialIoProtocol {
114 pub const GUID: Guid = guid!("bb25cf6f-f1d4-11d2-9a0c-0090273fc1fd");
115}
116
117#[derive(Debug)]
119#[repr(C)]
120#[allow(non_camel_case_types)]
121pub struct SerialIoProtocol_1_1 {
122 pub base_protocol: SerialIoProtocol,
123 pub device_type_guid: *const Guid,
124}
125
126impl SerialIoProtocol_1_1 {
127 pub const GUID: Guid = SerialIoProtocol::GUID;
128}
129
130newtype_enum! {
131 pub enum Parity: u32 => {
133 DEFAULT = 0,
135 NONE = 1,
137 EVEN = 2,
139 ODD = 3,
141 MARK = 4,
143 SPACE = 5,
145 }
146}
147
148newtype_enum! {
149 pub enum StopBits: u32 => {
151 DEFAULT = 0,
153 ONE = 1,
155 ONE_FIVE = 2,
157 TWO = 3,
159 }
160}