summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2008-06-18 09:05:33 -0700
committerH. Peter Anvin <hpa@zytor.com>2008-06-18 09:05:33 -0700
commit34ffe9a0423644b7635683e462cab573f97ff255 (patch)
treea186e5385fde63cf65453effb5446ef2c8513cb4
parent21edbdacf38c9eddc9dcca5c555a8a587f9df6fb (diff)
downloadsyslinux-34ffe9a0423644b7635683e462cab573f97ff255.tar.gz
TEST: issue a null command to the KBC as part of A20-flippingsyslinux-3.70-pre19
UHCI supposedly wants a null command (0FFh) sent to the KBC as part of the A20-flipping sequence. See if that works for us.
-rw-r--r--core/bcopy32.inc18
-rw-r--r--memdisk/memdisk16.asm18
2 files changed, 32 insertions, 4 deletions
diff --git a/core/bcopy32.inc b/core/bcopy32.inc
index 8f36d648..4ebbe3ca 100644
--- a/core/bcopy32.inc
+++ b/core/bcopy32.inc
@@ -413,7 +413,7 @@ a20_kbc:
mov byte [cs:A20Type], A20_KBC ; Starting KBC command sequence
- mov al,0D1h ; Command write
+ mov al,0D1h ; Write output port
out 064h, al
call empty_8042_uncond
@@ -421,6 +421,13 @@ a20_kbc:
out 060h, al
call empty_8042_uncond
+ ; Apparently the UHCI spec assumes that A20 toggle
+ ; ends with a null command (assumed to be for sychronization?)
+ ; Put it here to see if it helps anything...
+ mov al,0FFh ; Null command
+ out 064h, al
+ call empty_8042_uncond
+
; Verify that A20 actually is enabled. Do that by
; observing a word in low memory and the same word in
; the HMA until they are no longer coherent. Note that
@@ -534,12 +541,19 @@ a20d_fast:
;
a20d_kbc:
call empty_8042_uncond
+
mov al,0D1h
- out 064h, al ; Command write
+ out 064h, al ; Write output port
call empty_8042_uncond
+
mov al,0DDh ; A20 off
out 060h, al
call empty_8042_uncond
+
+ mov al,0FFh ; Null command/synchronization
+ out 064h, al
+ call empty_8042_uncond
+
; Wait a bit for it to take effect
a20d_snooze:
push cx
diff --git a/memdisk/memdisk16.asm b/memdisk/memdisk16.asm
index 692ed8b8..d73ddc5d 100644
--- a/memdisk/memdisk16.asm
+++ b/memdisk/memdisk16.asm
@@ -294,7 +294,7 @@ a20_kbc:
mov byte [A20Type], A20_KBC ; Starting KBC command sequence
- mov al,0D1h ; Command write
+ mov al,0D1h ; Write output port
out 064h, al
call empty_8042_uncond
@@ -302,6 +302,13 @@ a20_kbc:
out 060h, al
call empty_8042_uncond
+ ; Apparently the UHCI spec assumes that A20 toggle
+ ; ends with a null command (assumed to be for sychronization?)
+ ; Put it here to see if it helps anything...
+ mov al,0FFh ; Null command
+ out 064h, al
+ call empty_8042_uncond
+
; Verify that A20 actually is enabled. Do that by
; observing a word in low memory and the same word in
; the HMA until they are no longer coherent. Note that
@@ -424,12 +431,19 @@ a20d_fast:
;
a20d_kbc:
call empty_8042_uncond
+
mov al,0D1h
- out 064h, al ; Command write
+ out 064h, al ; Write output port
call empty_8042_uncond
+
mov al,0DDh ; A20 off
out 060h, al
call empty_8042_uncond
+
+ mov al,0FFh ; Null command/synchronization
+ out 064h, al
+ call empty_8042_uncond
+
; Wait a bit for it to take effect
a20d_snooze:
push cx