X-Git-Url: http://git.joshuawise.com/netwatch.git/blobdiff_plain/692f070ede4a413337c573b8d1592f0f5d1ea7ed..9eee8073b16fad5359206bb7d832293ce878dd16:/aseg-paging/main.c diff --git a/aseg-paging/main.c b/aseg-paging/main.c index 21aaeeb..41465e2 100644 --- a/aseg-paging/main.c +++ b/aseg-paging/main.c @@ -17,10 +17,11 @@ extern unsigned int counter; static int _ibf_ready = 0; static int _waiting_for_data = 0; static int curdev = 0; +static int adding_locks_from_time_to_time = 0; static int _inject_ready() { - return _ibf_ready && !_waiting_for_data; + return _ibf_ready && !_waiting_for_data && !adding_locks_from_time_to_time; } void _try_inject() @@ -37,6 +38,8 @@ void _try_inject() outb(0x60, kbd_get_injected_scancode()); /* data */ while ((inb(0x64) & 0x02) && i--) /* wait for completion */ ; + outl(0x844, 0x1000); + adding_locks_from_time_to_time++; smi_enable_event(SMI_EVENT_DEVTRAP_KBC); } else if (kbd_has_injected_scancode()) outputf("Would like to inject, but %d %d", _ibf_ready, _waiting_for_data); @@ -70,15 +73,20 @@ void pci_dump() { break; case 0x60: - if ((curdev == 0) && kbd_has_injected_scancode()) + if ((curdev == 0) && kbd_has_injected_scancode() && !adding_locks_from_time_to_time) b = kbd_get_injected_scancode(); else b = inb(0x60); + if (adding_locks_from_time_to_time) + adding_locks_from_time_to_time--; if ((curdev == 0) && (b == 0x01)) { /* Escape */ outb(0xCF9, 0x4); /* Reboot */ return; } break; + + default: + b = inb(cts & 0xFFFF); } dologf("READ : %08x (%02x)", cts, b);