chipset/i8042/
spec.rs

1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4//! Intel 8042 definitions.
5
6use bitfield_struct::bitfield;
7use inspect::Inspect;
8use open_enum::open_enum;
9
10#[derive(Inspect)]
11#[bitfield(u8)]
12pub struct OutputPort {
13    pub reset: bool,
14    pub a20_gate: bool,
15    pub aux_clock: bool,
16    pub aux_data: bool,
17    pub keyboard_output_buffered: bool,
18    pub mouse_output_buffered: bool,
19    pub clock: bool,
20    pub data: bool,
21}
22
23open_enum! {
24    #[derive(Inspect)]
25    #[inspect(debug)]
26    pub enum ControllerCommand: u8 {
27        READ_COMMAND_BYTE       = 0x20,
28        WRITE_COMMAND_BYTE      = 0x60,
29        UNKNOWN_A1              = 0xA1,     // Used in AMI BIOS boot
30        PWD_CHECK               = 0xA4,
31        DISABLE_AUX_INTERFACE   = 0xA7,
32        ENABLE_AUX_INTERFACE    = 0xA8,
33        CHECK_AUX_INTERFACE     = 0xA9,
34        SELF_TEST               = 0xAA,
35        CHECK_INTERFACE         = 0xAB,
36        DISABLE_KEYBOARD        = 0xAD,
37        ENABLE_KEYBOARD         = 0xAE,
38        READ_INPUT_PORT         = 0xC0,
39        READ_OUT_INPUT_PORT_LO  = 0xC1,
40        READ_OUT_INPUT_PORT_HI  = 0xC2,
41        READ_OUTPUT_PORT        = 0xD0,
42        WRITE_OUTPUT_PORT       = 0xD1,
43        WRITE_OUTPUT_BUFFER     = 0xD2,
44        WRITE_AUX_OUTPUT_BUFFER = 0xD3,
45        WRITE_AUX_DEVICE        = 0xD4,
46        PULSE_OUTPUT_F0         = 0xF0,
47        PULSE_OUTPUT_F1         = 0xF1,
48        PULSE_OUTPUT_F2         = 0xF2,
49        PULSE_OUTPUT_F3         = 0xF3,
50        PULSE_OUTPUT_F4         = 0xF4,
51        PULSE_OUTPUT_F5         = 0xF5,
52        PULSE_OUTPUT_F6         = 0xF6,
53        PULSE_OUTPUT_F7         = 0xF7,
54        PULSE_OUTPUT_F8         = 0xF8,
55        PULSE_OUTPUT_F9         = 0xF9,
56        PULSE_OUTPUT_FA         = 0xFA,
57        PULSE_OUTPUT_FB         = 0xFB,
58        PULSE_OUTPUT_FC         = 0xFC,
59        PULSE_OUTPUT_FD         = 0xFD,
60        PULSE_OUTPUT_FE         = 0xFE,
61        PULSE_OUTPUT_FF         = 0xFF,
62    }
63}
64
65#[derive(Inspect)]
66#[bitfield(u8)]
67pub struct KeyboardStatus {
68    pub output_buffer_full: bool,
69    pub input_buffer_full: bool,
70    pub keyboard_self_test: bool,
71    pub input_buffer_for_controller: bool,
72    pub keyboard_unlocked: bool,
73    pub output_buffer_for_mouse: bool,
74    pub timeout_error: bool,
75    pub parity_error: bool,
76}
77
78#[derive(Inspect)]
79#[bitfield(u8)]
80pub struct CommandFlag {
81    pub allow_keyboard_interrupts: bool,
82    pub allow_mouse_interrupts: bool,
83    pub keyboard_self_test: bool,
84    pub unused: bool,
85    pub disable_keyboard: bool,
86    pub disable_mouse: bool,
87    pub enable_scan_code: bool,
88    pub unused2: bool,
89}