xref: /DragonOS/kernel/src/driver/input/ps2_dev/mod.rs (revision 1074eb34e784aa2adfc5b9e0d89fa4b7e6ea03ef)
1 use bitfield_struct::bitfield;
2 
3 pub mod ps2_device;
4 
5 /// PS2键盘控制器的状态寄存器
6 #[bitfield(u8)]
7 pub struct Ps2StatusRegister {
8     /// 输出缓冲区满标志
9     ///
10     /// (必须在尝试从 IO 端口 0x60 读取数据之前设置)
11     pub outbuf_full: bool,
12 
13     /// 输入缓冲区满标志
14     ///
15     /// (在尝试向 IO 端口 0x60 或 IO 端口 0x64 写入数据之前必须清除)
16     pub inbuf_full: bool,
17 
18     /// 系统标志
19     ///
20     /// 如果系统通过自检 (POST),则意味着在复位时被清除并由固件设置(通过 PS/2 控制器配置字节)
21     pub system_flag: bool,
22 
23     /// 命令/数据标志
24     ///
25     /// (0 = 写入输入缓冲区的数据是 PS/2 设备的数据,1 = 写入输入缓冲区的数据是 PS/2 控制器命令的数据)
26     pub command_data: bool,
27 
28     /// 未知标志1
29     ///
30     /// 可能是“键盘锁”(现代系统中更可能未使用)
31     pub unknown1: bool,
32 
33     /// 未知标志2
34     ///
35     /// 可能是“接收超时”或“第二个 PS/2 端口输出缓冲区已满”
36     pub unknown2: bool,
37     /// 超时错误标志
38     ///
39     /// 超时错误(0 = 无错误,1 = 超时错误)
40     pub timeout_error: bool,
41 
42     /// 奇偶校验错误标志
43     ///
44     /// (0 = 无错误,1 = 奇偶校验错误)
45     pub parity_error: bool,
46 }
47