From 59d88f42ca8b2d1556e52930a164f908814b9b9e Mon Sep 17 00:00:00 2001 From: niruiyu Date: Thu, 27 Oct 2011 05:38:42 +0000 Subject: [PATCH] Check the serial buffer empty status before performing the serial IO reading operation. Signed-off-by: niruiyu Reviewed-by: vanjeff git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12581 6f19259b-4bc3-4df7-8a09-765794883524 --- .../Console/TerminalDxe/TerminalConIn.c | 37 +++++++++++-------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConIn.c b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConIn.c index 47881a9d9c..90bac164bc 100644 --- a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConIn.c +++ b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConIn.c @@ -515,6 +515,7 @@ TerminalConInTimerHandler ( { EFI_STATUS Status; TERMINAL_DEV *TerminalDevice; + UINT32 Control; UINT8 Input; EFI_SERIAL_IO_MODE *Mode; EFI_SERIAL_IO_PROTOCOL *SerialIo; @@ -558,27 +559,33 @@ TerminalConInTimerHandler ( TerminalDevice->SerialInTimeOut = SerialInTimeOut; } } - // - // Fetch all the keys in the serial buffer, - // and insert the byte stream into RawFIFO. + // Check whether serial buffer is empty. // - while (!IsRawFiFoFull (TerminalDevice)) { + Status = SerialIo->GetControl (SerialIo, &Control); - Status = GetOneKeyFromSerial (TerminalDevice->SerialIo, &Input); + if ((Control & EFI_SERIAL_INPUT_BUFFER_EMPTY) == 0) { + // + // Fetch all the keys in the serial buffer, + // and insert the byte stream into RawFIFO. + // + while (!IsRawFiFoFull (TerminalDevice)) { - if (EFI_ERROR (Status)) { - if (Status == EFI_DEVICE_ERROR) { - REPORT_STATUS_CODE_WITH_DEVICE_PATH ( - EFI_ERROR_CODE | EFI_ERROR_MINOR, - (EFI_PERIPHERAL_REMOTE_CONSOLE | EFI_P_EC_INPUT_ERROR), - TerminalDevice->DevicePath - ); + Status = GetOneKeyFromSerial (TerminalDevice->SerialIo, &Input); + + if (EFI_ERROR (Status)) { + if (Status == EFI_DEVICE_ERROR) { + REPORT_STATUS_CODE_WITH_DEVICE_PATH ( + EFI_ERROR_CODE | EFI_ERROR_MINOR, + (EFI_PERIPHERAL_REMOTE_CONSOLE | EFI_P_EC_INPUT_ERROR), + TerminalDevice->DevicePath + ); + } + break; } - break; - } - RawFiFoInsertOneKey (TerminalDevice, Input); + RawFiFoInsertOneKey (TerminalDevice, Input); + } } // -- 2.39.2