diff options
author | niruiyu <niruiyu@6f19259b-4bc3-4df7-8a09-765794883524> | 2011-10-27 05:38:42 +0000 |
---|---|---|
committer | niruiyu <niruiyu@6f19259b-4bc3-4df7-8a09-765794883524> | 2011-10-27 05:38:42 +0000 |
commit | 59d88f42ca8b2d1556e52930a164f908814b9b9e (patch) | |
tree | 8b17adfabdc9609e67433114e7eff14a99054772 /MdeModulePkg | |
parent | bdfbe63efacf2c0feb9ce4486d7d703a7da948ff (diff) | |
download | edk2-platforms-59d88f42ca8b2d1556e52930a164f908814b9b9e.tar.xz |
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
Diffstat (limited to 'MdeModulePkg')
-rw-r--r-- | MdeModulePkg/Universal/Console/TerminalDxe/TerminalConIn.c | 37 |
1 files 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);
+ }
}
//
|