uefi_raw/protocol/console/
serial.rs1use crate::{guid, Guid, Status};
2use bitflags::bitflags;
3
4bitflags! {
5 #[repr(transparent)]
9 #[derive(Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord)]
10 pub struct ControlBits: u32 {
11 const CLEAR_TO_SEND = 0x10;
13 const DATA_SET_READY = 0x20;
15 const RING_INDICATE = 0x40;
17 const CARRIER_DETECT = 0x80;
19 const INPUT_BUFFER_EMPTY = 0x100;
21 const OUTPUT_BUFFER_EMPTY = 0x200;
23
24 const DATA_TERMINAL_READY = 0x1;
26 const REQUEST_TO_SEND = 0x2;
28 const HARDWARE_LOOPBACK_ENABLE = 0x1000;
30 const SOFTWARE_LOOPBACK_ENABLE = 0x2000;
32 const HARDWARE_FLOW_CONTROL_ENABLE = 0x4000;
34
35 const SETTABLE =
39 ControlBits::DATA_TERMINAL_READY.bits()
40 | ControlBits::REQUEST_TO_SEND.bits()
41 | ControlBits::HARDWARE_LOOPBACK_ENABLE.bits()
42 | ControlBits::SOFTWARE_LOOPBACK_ENABLE.bits()
43 | ControlBits::HARDWARE_FLOW_CONTROL_ENABLE.bits();
44 }
45}
46
47#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd)]
59#[repr(C)]
60pub struct SerialIoMode {
61 pub control_mask: ControlBits,
63 pub timeout: u32,
66 pub baud_rate: u64,
68 pub receive_fifo_depth: u32,
70 pub data_bits: u32,
72 pub parity: Parity,
74 pub stop_bits: StopBits,
76}
77
78#[derive(Debug)]
79#[repr(C)]
80pub struct SerialIoProtocol {
81 pub revision: u32,
82 pub reset: unsafe extern "efiapi" fn(*mut Self) -> Status,
83 pub set_attributes: unsafe extern "efiapi" fn(
84 *const Self,
85 baud_rate: u64,
86 receive_fifo_depth: u32,
87 timeout: u32,
88 parity: Parity,
89 data_bits: u8,
90 stop_bits_type: StopBits,
91 ) -> Status,
92 pub set_control_bits: unsafe extern "efiapi" fn(*mut Self, ControlBits) -> Status,
93 pub get_control_bits: unsafe extern "efiapi" fn(*const Self, *mut ControlBits) -> Status,
94 pub write: unsafe extern "efiapi" fn(*mut Self, *mut usize, *const u8) -> Status,
95 pub read: unsafe extern "efiapi" fn(*mut Self, *mut usize, *mut u8) -> Status,
96 pub mode: *const SerialIoMode,
97}
98
99impl SerialIoProtocol {
100 pub const GUID: Guid = guid!("bb25cf6f-f1d4-11d2-9a0c-0090273fc1fd");
101 pub const REVISION: u32 = 0x00010000;
102 pub const REVISION1P1: u32 = 0x00010001;
103}
104
105newtype_enum! {
106 pub enum Parity: u32 => {
108 DEFAULT = 0,
110 NONE = 1,
112 EVEN = 2,
114 ODD = 3,
116 MARK = 4,
118 SPACE = 5,
120 }
121}
122
123newtype_enum! {
124 pub enum StopBits: u32 => {
126 DEFAULT = 0,
128 ONE = 1,
130 ONE_FIVE = 2,
132 TWO = 3,
134 }
135}