diff --git a/kernel/trunk/core/apic.inc b/kernel/trunk/core/apic.inc index d6aa8f962..20d129edd 100644 --- a/kernel/trunk/core/apic.inc +++ b/kernel/trunk/core/apic.inc @@ -371,6 +371,33 @@ proc enable_irq stdcall, irq_line:dword ret endp +proc disable_irq stdcall, irq_line:dword + mov ebx, [irq_line] + cmp [irq_mode], IRQ_APIC + je .APIC + + mov edx, 0x21 + cmp ebx, 8 + jb @F + + mov edx, 0xA1 + sub ebx, 8 +@@: + in al, dx + bts eax, ebx + out dx, al + ret +.APIC: + shl ebx, 1 + add ebx, 0x10 + mov eax, ebx + call IOAPIC_read + or eax, 0x10000; bit 16 + xchg eax, ebx + call IOAPIC_write + ret +endp + align 4 pci_irq_fixup: diff --git a/kernel/trunk/hid/keyboard.inc b/kernel/trunk/hid/keyboard.inc index ddba3da8e..3110a3a27 100644 --- a/kernel/trunk/hid/keyboard.inc +++ b/kernel/trunk/hid/keyboard.inc @@ -359,9 +359,6 @@ send_scancode: xor [kb_state], eax xor [kb_lights], bl - push ecx - call set_lights - pop ecx .writekey: pushad ; test for system hotkeys @@ -495,10 +492,12 @@ set_lights: ret ps2_set_lights: + stdcall disable_irq, 1 mov al, 0xED call kb_write mov al, [esp+8] call kb_write + stdcall enable_irq, 1 ret 8 ;// mike.dld ]