a20: issue a null command after toggling the KBC
authorH. Peter Anvin <hpa@zytor.com>
Fri, 27 Jun 2008 20:09:13 +0000 (13:09 -0700)
committerH. Peter Anvin <hpa@zytor.com>
Fri, 27 Jun 2008 20:09:13 +0000 (13:09 -0700)
Issue a null command after toggling the KBC, to avoid confusing UHCI
USB controllers.  Apparently DOS did this, probably for
synchronization reasons, and the UHCI specification took it as the end
of the A20 toggle sequence.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
reloc/a20.S

index fd68b2e..2c3b708 100644 (file)
@@ -59,10 +59,14 @@ enable_a20:
        outb    %al, $0x64
        call    empty_8042
 
-       movb    $0xdf, %al
+       movb    $0xdf, %al      /* Enable A20 */
        outb    %al, $0x60
        call    empty_8042
 
+       movb    $0xff, %al      /* Null command, required by UHCI spec */
+       outb    %al, $0x64
+       call    empty_8042
+
        /* Loop until A20 is enabled, or for 2^16 loops */
        /* %cx == 0 */
 2:     call    a20_test