summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2008-06-27 12:56:10 -0700
committerH. Peter Anvin <hpa@zytor.com>2008-06-27 13:05:19 -0700
commite41337a1383fed062e1f40789a60cebadde390b6 (patch)
tree2c3e0943d47f779f611c61f5a968b6a024a60b69
parentd132465e980db755312890dfbb98c8ed91d20245 (diff)
downloadsyslinux-e41337a1383fed062e1f40789a60cebadde390b6.tar.gz
gPXE: [a20] Send a null command to the KBC after changing A20syslinux-3.70-pre27
Send a null command, specifically "pulse outputs" with no outputs selected, to the KBC after changing A20. This was apparently done by DOS, presumably as a synchronization hack, and the authors of the UHCI spec thought it was inherent. Therefore, there are systems out there (e.g. HP DL360 G5) which will stop responsing to "legacy USB" unless they see the null command, 0xFF, written to port 0x64 at the end of the A20 toggling sequence. Signed-off-by: H. Peter Anvin <hpa@zytor.com>
-rw-r--r--gpxe/src/arch/i386/firmware/pcbios/gateA20.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/gpxe/src/arch/i386/firmware/pcbios/gateA20.c b/gpxe/src/arch/i386/firmware/pcbios/gateA20.c
index 2caac894..a14e3416 100644
--- a/gpxe/src/arch/i386/firmware/pcbios/gateA20.c
+++ b/gpxe/src/arch/i386/firmware/pcbios/gateA20.c
@@ -12,6 +12,7 @@
#define KC_CMD_WIN 0xd0 /* read output port */
#define KC_CMD_WOUT 0xd1 /* write output port */
+#define KC_CMD_NULL 0xff /* null command ("pulse nothing") */
#define KB_SET_A20 0xdf /* enable A20,
enable output buffer full interrupt
enable data line
@@ -130,6 +131,8 @@ void gateA20_set ( void ) {
empty_8042();
outb ( KB_SET_A20, K_RDWR );
empty_8042();
+ outb ( KC_CMD_NULL, K_CMD );
+ empty_8042();
if ( gateA20_is_set ( A20_KBC_RETRIES ) ) {
DBG ( "Enabled gate A20 using "
"keyboard controller\n" );