mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 09:07:35 +00:00
Kernel: Keep reading from i8042 until the buffer is empty
Otherwise we might not drain the mouse buffer until the next IRQ.
This commit is contained in:
parent
a5982f8605
commit
467f6c74a4
1 changed files with 9 additions and 7 deletions
|
@ -149,6 +149,7 @@ void I8042Controller::irq_process_input_buffer(Device)
|
||||||
{
|
{
|
||||||
ASSERT(Processor::current().in_irq());
|
ASSERT(Processor::current().in_irq());
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
u8 status = IO::in8(I8042_STATUS);
|
u8 status = IO::in8(I8042_STATUS);
|
||||||
if (!(status & I8042_BUFFER_FULL))
|
if (!(status & I8042_BUFFER_FULL))
|
||||||
return;
|
return;
|
||||||
|
@ -156,6 +157,7 @@ void I8042Controller::irq_process_input_buffer(Device)
|
||||||
u8 byte = IO::in8(I8042_BUFFER);
|
u8 byte = IO::in8(I8042_BUFFER);
|
||||||
if (auto* device = m_devices[data_for_device == Device::Keyboard ? 0 : 1].device)
|
if (auto* device = m_devices[data_for_device == Device::Keyboard ? 0 : 1].device)
|
||||||
device->irq_handle_byte_read(byte);
|
device->irq_handle_byte_read(byte);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void I8042Controller::do_drain()
|
void I8042Controller::do_drain()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue