From bb1fe2b4dc1eea39326c0227b258ca9d71ed0f8a Mon Sep 17 00:00:00 2001 From: Matheus Date: Wed, 10 Jul 2024 20:55:46 -0300 Subject: [PATCH] ps2kbd: actually enable data reporting --- kernel-src/arch/x86-64/ps2kbd.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/kernel-src/arch/x86-64/ps2kbd.c b/kernel-src/arch/x86-64/ps2kbd.c index 916bfdb0..5c24abc0 100644 --- a/kernel-src/arch/x86-64/ps2kbd.c +++ b/kernel-src/arch/x86-64/ps2kbd.c @@ -116,12 +116,13 @@ static char extendedcodes[128] = { }; #define KEYBOARDIRQ 1 +#define KEYBOARD_CMD_REPORTDATA 0xf4 keyboard_t *kb; static bool extended = false; static void kbdisr(isr_t *isr, context_t *ctx) { - uint8_t scancode = inb(0x60); + uint8_t scancode = inb(PS2_PORT_DATA); if (scancode == 0xE0) { extended = true; return; @@ -151,9 +152,16 @@ static void kbdisr(isr_t *isr, context_t *ctx) { keyboard_sendpacket(kb, &packet); } -void ps2kbd_init(){ +void ps2kbd_init() { // clear PS/2 buffer to make sure its empty inb(PS2_PORT_DATA); + + int response = device_write_response(1, KEYBOARD_CMD_REPORTDATA); + if (response != ACK) { + printf("ps2keyboard: expected ACK, got %x\n", response); + return; + } + isr_t *isr = interrupt_allocate(kbdisr, arch_apic_eoi, IPL_KEYBOARD); __assert(isr); arch_ioapic_setirq(KEYBOARDIRQ, isr->id & 0xff, _cpu()->id, false);