forked from lolo859/vystem
37 lines
1.8 KiB
Markdown
37 lines
1.8 KiB
Markdown
# PS2 keyboard
|
|
|
|
The PS2 keyboard driver is defined in `shelter/lib/include/devs/input/ps2.h` and implemented in `shelter/lib/src/devs/input/ps2.c`. This documentation only describes the public API, the one that is safe to access from external subsystems.
|
|
|
|
## Driver initialization
|
|
|
|
The PS2 is initialized using `sh_ps2_driver_init()`. The pre-requirement for this function include the keyboard input subsystem being initialized. Here is the exact procedure:
|
|
1) Disable interrupts for safety
|
|
2) Flush output buffer
|
|
3) Debug log status and config byte initial value
|
|
4) Disable keyboard and mouse PS2 ports
|
|
5) Reflush output buffer for safety
|
|
6) Disable both ports IRQs
|
|
7) Perform the PS2 controller self test
|
|
8) Enable port 1
|
|
9) Enable scancodes translation
|
|
10) Initialize driver internal state
|
|
11) Enable IRQ for port 1
|
|
12) Register interrupt handler for legacy IRQ1
|
|
13) Enable interrupts
|
|
14) Disable scanning
|
|
15) Reset leds state
|
|
16) Identify keyboard
|
|
17) Register PS2 keyboard to the keyboard input subsystem
|
|
18) Enable scanning
|
|
|
|
For the moments, commands responses handling and scancodes parsing is working but there are a few limitations:
|
|
- since we only parsed a few ACPI tables, we are unable to detect with certainty the presence of a PS2 controller. So the system consider that the PS2 controller is available and working and the keyboard device registered to the keyboard input subsystem will always be marked as present
|
|
- any error in the driver initialization will be interpreted as a failure of the boot process
|
|
- for the moment, we are unable to defer the leds state update when a scancode change the NumLock/CapsLock state, so these leds won't update
|
|
|
|
## API
|
|
|
|
A few additionnal functions are provided:
|
|
- `sh_ps2_disable_scanning()`: disable PS2 keyboard scanning
|
|
- `sh_ps2_enable_scanning()`: enable PS2 keyboard scanning
|