david/ipxe
david
/
ipxe
Archived
1
0
Fork 0

[a20] Send a null command to the KBC after changing A20

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>
This commit is contained in:
H. Peter Anvin 2008-06-27 22:29:13 +01:00 committed by Michael Brown
parent 2b9e7a4767
commit b7882065f5
1 changed files with 3 additions and 0 deletions

View File

@ -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" );