Here's a few things that I know:
1. This computer has xHCI, which I take ownership of from BIOS before touching PS/2.
2. This computer has a Synaptics touchpad (so PS/2 must also be real).
3. I know its not a multiplexed PS/2 controller.
4. My simple test that I made works on 2 other laptops & qemu/vmware.
Here's the test that I tried (in pseudocode):
Code: Select all
disable_all_ports();
enable_port(1);
// sends 0xF5 and waits for ACK
disable_scanning(port1);
for (;;) {
data = try_to_read_data_with_some_timeout();
if (!timeout) {
panic("got data with scanning disabled? %d", data);
}
}
Is this a buggy PS/2 implementation? How am I supposed to safely initialize a device if i can get random garbage data at any time?
UPD: I "solved" the problem by rewriting every function to handle garbage bytes correctly.