From 32053e8f25166625ba1331ac38d51658cf89a880 Mon Sep 17 00:00:00 2001 From: Liav A Date: Fri, 11 Feb 2022 18:59:26 +0200 Subject: [PATCH] Kernel: Increase attempts count when waiting before doing i8042 IO Apparently on VirtualBox the keyboard device refused to complete the reset sequence. With longer delays and more attempts before giving up, it seems like the problem is gone. --- Kernel/Devices/HID/I8042Controller.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Kernel/Devices/HID/I8042Controller.cpp b/Kernel/Devices/HID/I8042Controller.cpp index b6253e3e30..a302449be0 100644 --- a/Kernel/Devices/HID/I8042Controller.cpp +++ b/Kernel/Devices/HID/I8042Controller.cpp @@ -268,17 +268,17 @@ ErrorOr I8042Controller::prepare_for_input(HIDDevice::Type device) { VERIFY(m_lock.is_locked()); u8 const second_port_flag = device == HIDDevice::Type::Keyboard ? 0 : I8042StatusFlag::SecondPS2PortOutputBuffer; - for (int attempt = 0; attempt < 5; attempt++) { + for (int attempt = 0; attempt < 50; attempt++) { u8 status = IO::in8(I8042Port::Status); if (!(status & I8042StatusFlag::OutputBuffer)) { - IO::delay(100); + IO::delay(1000); continue; } if (device == HIDDevice::Type::Unknown) return {}; if ((status & I8042StatusFlag::SecondPS2PortOutputBuffer) == second_port_flag) return {}; - IO::delay(100); + IO::delay(1000); } return Error::from_errno(EBUSY); } @@ -286,11 +286,11 @@ ErrorOr I8042Controller::prepare_for_input(HIDDevice::Type device) ErrorOr I8042Controller::prepare_for_output() { VERIFY(m_lock.is_locked()); - for (int attempt = 0; attempt < 5; attempt++) { + for (int attempt = 0; attempt < 50; attempt++) { u8 status = IO::in8(I8042Port::Status); if (!(status & I8042StatusFlag::InputBuffer)) return {}; - IO::delay(100); + IO::delay(1000); } return Error::from_errno(EBUSY); }