Enhance Ps2Mouse and Ps2Keyboard driver and fix for random hangs in System waiting for the Key if no KBC is present.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8473 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
gikidy
2009-06-05 03:25:09 +00:00
parent 502bfcef5c
commit 007c18f5b7
3 changed files with 47 additions and 9 deletions

View File

@ -216,6 +216,21 @@ KbdControllerDriverStart (
ConsoleIn->ConInEx.UnregisterKeyNotify = KeyboardUnregisterKeyNotify;
InitializeListHead (&ConsoleIn->NotifyList);
//
// Fix for random hangs in System waiting for the Key if no KBC is present in BIOS.
//
KeyboardRead (ConsoleIn, &Data);
if ((KeyReadStatusRegister (ConsoleIn) & (KBC_PARE | KBC_TIM)) == (KBC_PARE | KBC_TIM)) {
//
// If nobody decodes KBC I/O port, it will read back as 0xFF.
// Check the Time-Out and Parity bit to see if it has an active KBC in system
//
Status = EFI_DEVICE_ERROR;
StatusCode = EFI_PERIPHERAL_KEYBOARD | EFI_P_EC_NOT_DETECTED;
goto ErrorExit;
}
//
// Setup the WaitForKey event
//
@ -355,7 +370,7 @@ ErrorExit:
//
if (ConsoleIn != NULL) {
Status1 = EFI_SUCCESS;
while (!EFI_ERROR (Status1)) {
while (!EFI_ERROR (Status1) && (Status != EFI_DEVICE_ERROR)) {
Status1 = KeyboardRead (ConsoleIn, &Data);;
}
}