]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Console/TerminalDxe/TerminalConIn.c
MdeModulePkg: Apply uncrustify changes
[mirror_edk2.git] / MdeModulePkg / Universal / Console / TerminalDxe / TerminalConIn.c
index 4d6ede4c9f477db87659eaa069bee7df306fa39e..2286264b29e5833f1db346c7efa20406408ae2c9 100644 (file)
@@ -10,7 +10,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
 \r
 #include "Terminal.h"\r
 \r
-\r
 /**\r
   Reads the next keystroke from the input device. The WaitForKey Event can\r
   be used to test for existence of a keystroke via WaitForEvent () call.\r
@@ -27,8 +26,8 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
 **/\r
 EFI_STATUS\r
 ReadKeyStrokeWorker (\r
-  IN  TERMINAL_DEV *TerminalDevice,\r
-  OUT EFI_KEY_DATA *KeyData\r
+  IN  TERMINAL_DEV  *TerminalDevice,\r
+  OUT EFI_KEY_DATA  *KeyData\r
   )\r
 {\r
   if (KeyData == NULL) {\r
@@ -43,7 +42,6 @@ ReadKeyStrokeWorker (
   }\r
 \r
   return EFI_SUCCESS;\r
-\r
 }\r
 \r
 /**\r
@@ -84,9 +82,9 @@ TerminalConInReset (
   //\r
   // Make all the internal buffer empty for keys\r
   //\r
-  TerminalDevice->RawFiFo->Head     = TerminalDevice->RawFiFo->Tail;\r
-  TerminalDevice->UnicodeFiFo->Head = TerminalDevice->UnicodeFiFo->Tail;\r
-  TerminalDevice->EfiKeyFiFo->Head  = TerminalDevice->EfiKeyFiFo->Tail;\r
+  TerminalDevice->RawFiFo->Head             = TerminalDevice->RawFiFo->Tail;\r
+  TerminalDevice->UnicodeFiFo->Head         = TerminalDevice->UnicodeFiFo->Tail;\r
+  TerminalDevice->EfiKeyFiFo->Head          = TerminalDevice->EfiKeyFiFo->Tail;\r
   TerminalDevice->EfiKeyFiFoForNotify->Head = TerminalDevice->EfiKeyFiFoForNotify->Tail;\r
 \r
   if (EFI_ERROR (Status)) {\r
@@ -127,7 +125,7 @@ TerminalConInReadKeyStroke (
   //\r
   //  get TERMINAL_DEV from "This" parameter.\r
   //\r
-  TerminalDevice  = TERMINAL_CON_IN_DEV_FROM_THIS (This);\r
+  TerminalDevice = TERMINAL_CON_IN_DEV_FROM_THIS (This);\r
 \r
   Status = ReadKeyStrokeWorker (TerminalDevice, &KeyData);\r
   if (EFI_ERROR (Status)) {\r
@@ -137,7 +135,6 @@ TerminalConInReadKeyStroke (
   CopyMem (Key, &KeyData.Key, sizeof (EFI_INPUT_KEY));\r
 \r
   return EFI_SUCCESS;\r
-\r
 }\r
 \r
 /**\r
@@ -165,15 +162,14 @@ IsKeyRegistered (
   ASSERT (RegsiteredData != NULL && InputData != NULL);\r
 \r
   if ((RegsiteredData->Key.ScanCode    != InputData->Key.ScanCode) ||\r
-      (RegsiteredData->Key.UnicodeChar != InputData->Key.UnicodeChar)) {\r
+      (RegsiteredData->Key.UnicodeChar != InputData->Key.UnicodeChar))\r
+  {\r
     return FALSE;\r
   }\r
 \r
   return TRUE;\r
 }\r
 \r
-\r
-\r
 /**\r
   Event notification function for EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.WaitForKeyEx event\r
   Signal the event if there is key available\r
@@ -185,8 +181,8 @@ IsKeyRegistered (
 VOID\r
 EFIAPI\r
 TerminalConInWaitForKeyEx (\r
-  IN  EFI_EVENT       Event,\r
-  IN  VOID            *Context\r
+  IN  EFI_EVENT  Event,\r
+  IN  VOID       *Context\r
   )\r
 {\r
   TerminalConInWaitForKey (Event, Context);\r
@@ -214,8 +210,8 @@ TerminalConInResetEx (
   IN BOOLEAN                            ExtendedVerification\r
   )\r
 {\r
-  EFI_STATUS              Status;\r
-  TERMINAL_DEV            *TerminalDevice;\r
+  EFI_STATUS    Status;\r
+  TERMINAL_DEV  *TerminalDevice;\r
 \r
   TerminalDevice = TERMINAL_CON_IN_EX_DEV_FROM_THIS (This);\r
 \r
@@ -225,10 +221,8 @@ TerminalConInResetEx (
   }\r
 \r
   return EFI_SUCCESS;\r
-\r
 }\r
 \r
-\r
 /**\r
   Reads the next keystroke from the input device. The WaitForKey Event can\r
   be used to test for existence of a keystroke via WaitForEvent () call.\r
@@ -248,11 +242,11 @@ TerminalConInResetEx (
 EFI_STATUS\r
 EFIAPI\r
 TerminalConInReadKeyStrokeEx (\r
-  IN  EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,\r
-  OUT EFI_KEY_DATA                      *KeyData\r
+  IN  EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL  *This,\r
+  OUT EFI_KEY_DATA                       *KeyData\r
   )\r
 {\r
-  TERMINAL_DEV                    *TerminalDevice;\r
+  TERMINAL_DEV  *TerminalDevice;\r
 \r
   if (KeyData == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
@@ -261,10 +255,8 @@ TerminalConInReadKeyStrokeEx (
   TerminalDevice = TERMINAL_CON_IN_EX_DEV_FROM_THIS (This);\r
 \r
   return ReadKeyStrokeWorker (TerminalDevice, KeyData);\r
-\r
 }\r
 \r
-\r
 /**\r
   Set certain state for the input device.\r
 \r
@@ -298,7 +290,6 @@ TerminalConInSetState (
   return EFI_SUCCESS;\r
 }\r
 \r
-\r
 /**\r
   Register a notification function for a particular keystroke for the input device.\r
 \r
@@ -330,13 +321,13 @@ TerminalConInRegisterKeyNotify (
   OUT VOID                              **NotifyHandle\r
   )\r
 {\r
-  TERMINAL_DEV                    *TerminalDevice;\r
-  TERMINAL_CONSOLE_IN_EX_NOTIFY   *NewNotify;\r
-  LIST_ENTRY                      *Link;\r
-  LIST_ENTRY                      *NotifyList;\r
-  TERMINAL_CONSOLE_IN_EX_NOTIFY   *CurrentNotify;\r
+  TERMINAL_DEV                   *TerminalDevice;\r
+  TERMINAL_CONSOLE_IN_EX_NOTIFY  *NewNotify;\r
+  LIST_ENTRY                     *Link;\r
+  LIST_ENTRY                     *NotifyList;\r
+  TERMINAL_CONSOLE_IN_EX_NOTIFY  *CurrentNotify;\r
 \r
-  if (KeyData == NULL || NotifyHandle == NULL || KeyNotificationFunction == NULL) {\r
+  if ((KeyData == NULL) || (NotifyHandle == NULL) || (KeyNotificationFunction == NULL)) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
@@ -346,7 +337,7 @@ TerminalConInRegisterKeyNotify (
   // Return EFI_SUCCESS if the (KeyData, NotificationFunction) is already registered.\r
   //\r
   NotifyList = &TerminalDevice->NotifyList;\r
-  for (Link = GetFirstNode (NotifyList); !IsNull (NotifyList,Link); Link = GetNextNode (NotifyList,Link)) {\r
+  for (Link = GetFirstNode (NotifyList); !IsNull (NotifyList, Link); Link = GetNextNode (NotifyList, Link)) {\r
     CurrentNotify = CR (\r
                       Link,\r
                       TERMINAL_CONSOLE_IN_EX_NOTIFY,\r
@@ -364,7 +355,7 @@ TerminalConInRegisterKeyNotify (
   //\r
   // Allocate resource to save the notification function\r
   //\r
-  NewNotify = (TERMINAL_CONSOLE_IN_EX_NOTIFY *) AllocateZeroPool (sizeof (TERMINAL_CONSOLE_IN_EX_NOTIFY));\r
+  NewNotify = (TERMINAL_CONSOLE_IN_EX_NOTIFY *)AllocateZeroPool (sizeof (TERMINAL_CONSOLE_IN_EX_NOTIFY));\r
   if (NewNotify == NULL) {\r
     return EFI_OUT_OF_RESOURCES;\r
   }\r
@@ -374,12 +365,11 @@ TerminalConInRegisterKeyNotify (
   CopyMem (&NewNotify->KeyData, KeyData, sizeof (EFI_KEY_DATA));\r
   InsertTailList (&TerminalDevice->NotifyList, &NewNotify->NotifyEntry);\r
 \r
-  *NotifyHandle                = NewNotify;\r
+  *NotifyHandle = NewNotify;\r
 \r
   return EFI_SUCCESS;\r
 }\r
 \r
-\r
 /**\r
   Remove a registered notification function from a particular keystroke.\r
 \r
@@ -399,10 +389,10 @@ TerminalConInUnregisterKeyNotify (
   IN VOID                               *NotificationHandle\r
   )\r
 {\r
-  TERMINAL_DEV                    *TerminalDevice;\r
-  LIST_ENTRY                      *Link;\r
-  TERMINAL_CONSOLE_IN_EX_NOTIFY   *CurrentNotify;\r
-  LIST_ENTRY                      *NotifyList;\r
+  TERMINAL_DEV                   *TerminalDevice;\r
+  LIST_ENTRY                     *Link;\r
+  TERMINAL_CONSOLE_IN_EX_NOTIFY  *CurrentNotify;\r
+  LIST_ENTRY                     *NotifyList;\r
 \r
   if (NotificationHandle == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
@@ -411,7 +401,7 @@ TerminalConInUnregisterKeyNotify (
   TerminalDevice = TERMINAL_CON_IN_EX_DEV_FROM_THIS (This);\r
 \r
   NotifyList = &TerminalDevice->NotifyList;\r
-  for (Link = GetFirstNode (NotifyList); !IsNull (NotifyList,Link); Link = GetNextNode (NotifyList,Link)) {\r
+  for (Link = GetFirstNode (NotifyList); !IsNull (NotifyList, Link); Link = GetNextNode (NotifyList, Link)) {\r
     CurrentNotify = CR (\r
                       Link,\r
                       TERMINAL_CONSOLE_IN_EX_NOTIFY,\r
@@ -444,37 +434,36 @@ TerminalConInUnregisterKeyNotify (
 **/\r
 VOID\r
 TranslateRawDataToEfiKey (\r
-  IN  TERMINAL_DEV      *TerminalDevice\r
+  IN  TERMINAL_DEV  *TerminalDevice\r
   )\r
 {\r
   switch (TerminalDevice->TerminalType) {\r
+    case TerminalTypePcAnsi:\r
+    case TerminalTypeVt100:\r
+    case TerminalTypeVt100Plus:\r
+    case TerminalTypeTtyTerm:\r
+    case TerminalTypeLinux:\r
+    case TerminalTypeXtermR6:\r
+    case TerminalTypeVt400:\r
+    case TerminalTypeSCO:\r
+      AnsiRawDataToUnicode (TerminalDevice);\r
+      UnicodeToEfiKey (TerminalDevice);\r
+      break;\r
 \r
-  case TerminalTypePcAnsi:\r
-  case TerminalTypeVt100:\r
-  case TerminalTypeVt100Plus:\r
-  case TerminalTypeTtyTerm:\r
-  case TerminalTypeLinux:\r
-  case TerminalTypeXtermR6:\r
-  case TerminalTypeVt400:\r
-  case TerminalTypeSCO:\r
-    AnsiRawDataToUnicode (TerminalDevice);\r
-    UnicodeToEfiKey (TerminalDevice);\r
-    break;\r
-\r
-  case TerminalTypeVtUtf8:\r
-    //\r
-    // Process all the raw data in the RawFIFO,\r
-    // put the processed key into UnicodeFIFO.\r
-    //\r
-    VTUTF8RawDataToUnicode (TerminalDevice);\r
+    case TerminalTypeVtUtf8:\r
+      //\r
+      // Process all the raw data in the RawFIFO,\r
+      // put the processed key into UnicodeFIFO.\r
+      //\r
+      VTUTF8RawDataToUnicode (TerminalDevice);\r
 \r
-    //\r
-    // Translate all the Unicode data in the UnicodeFIFO to Efi key,\r
-    // then put into EfiKeyFIFO.\r
-    //\r
-    UnicodeToEfiKey (TerminalDevice);\r
+      //\r
+      // Translate all the Unicode data in the UnicodeFIFO to Efi key,\r
+      // then put into EfiKeyFIFO.\r
+      //\r
+      UnicodeToEfiKey (TerminalDevice);\r
 \r
-    break;\r
+      break;\r
   }\r
 }\r
 \r
@@ -489,16 +478,15 @@ TranslateRawDataToEfiKey (
 VOID\r
 EFIAPI\r
 TerminalConInWaitForKey (\r
-  IN  EFI_EVENT       Event,\r
-  IN  VOID            *Context\r
+  IN  EFI_EVENT  Event,\r
+  IN  VOID       *Context\r
   )\r
 {\r
   //\r
   // Someone is waiting on the keystroke event, if there's\r
   // a key pending, signal the event\r
   //\r
-  if (!IsEfiKeyFiFoEmpty ((TERMINAL_DEV *) Context)) {\r
-\r
+  if (!IsEfiKeyFiFoEmpty ((TERMINAL_DEV *)Context)) {\r
     gBS->SignalEvent (Event);\r
   }\r
 }\r
@@ -512,8 +500,8 @@ TerminalConInWaitForKey (
 VOID\r
 EFIAPI\r
 TerminalConInTimerHandler (\r
-  IN EFI_EVENT            Event,\r
-  IN VOID                 *Context\r
+  IN EFI_EVENT  Event,\r
+  IN VOID       *Context\r
   )\r
 {\r
   EFI_STATUS              Status;\r
@@ -524,12 +512,13 @@ TerminalConInTimerHandler (
   EFI_SERIAL_IO_PROTOCOL  *SerialIo;\r
   UINTN                   SerialInTimeOut;\r
 \r
-  TerminalDevice  = (TERMINAL_DEV *) Context;\r
+  TerminalDevice = (TERMINAL_DEV *)Context;\r
 \r
-  SerialIo        = TerminalDevice->SerialIo;\r
+  SerialIo = TerminalDevice->SerialIo;\r
   if (SerialIo == NULL) {\r
-    return ;\r
+    return;\r
   }\r
+\r
   //\r
   //  if current timeout value for serial device is not identical with\r
   //  the value saved in TERMINAL_DEV structure, then recalculate the\r
@@ -537,24 +526,23 @@ TerminalConInTimerHandler (
   //\r
   Mode = SerialIo->Mode;\r
   if (Mode->Timeout != TerminalDevice->SerialInTimeOut) {\r
-\r
     SerialInTimeOut = 0;\r
     if (Mode->BaudRate != 0) {\r
       //\r
       // According to BAUD rate to calculate the timeout value.\r
       //\r
-      SerialInTimeOut = (1 + Mode->DataBits + Mode->StopBits) * 2 * 1000000 / (UINTN) Mode->BaudRate;\r
+      SerialInTimeOut = (1 + Mode->DataBits + Mode->StopBits) * 2 * 1000000 / (UINTN)Mode->BaudRate;\r
     }\r
 \r
     Status = SerialIo->SetAttributes (\r
-                        SerialIo,\r
-                        Mode->BaudRate,\r
-                        Mode->ReceiveFifoDepth,\r
-                        (UINT32) SerialInTimeOut,\r
-                        (EFI_PARITY_TYPE) (Mode->Parity),\r
-                        (UINT8) Mode->DataBits,\r
-                        (EFI_STOP_BITS_TYPE) (Mode->StopBits)\r
-                        );\r
+                         SerialIo,\r
+                         Mode->BaudRate,\r
+                         Mode->ReceiveFifoDepth,\r
+                         (UINT32)SerialInTimeOut,\r
+                         (EFI_PARITY_TYPE)(Mode->Parity),\r
+                         (UINT8)Mode->DataBits,\r
+                         (EFI_STOP_BITS_TYPE)(Mode->StopBits)\r
+                         );\r
 \r
     if (EFI_ERROR (Status)) {\r
       TerminalDevice->SerialInTimeOut = 0;\r
@@ -562,6 +550,7 @@ TerminalConInTimerHandler (
       TerminalDevice->SerialInTimeOut = SerialInTimeOut;\r
     }\r
   }\r
+\r
   //\r
   // Check whether serial buffer is empty.\r
   // Skip the key transfer loop only if the SerialIo protocol instance\r
@@ -574,7 +563,6 @@ TerminalConInTimerHandler (
     // and insert the byte stream into RawFIFO.\r
     //\r
     while (!IsRawFiFoFull (TerminalDevice)) {\r
-\r
       Status = GetOneKeyFromSerial (TerminalDevice->SerialIo, &Input);\r
 \r
       if (EFI_ERROR (Status)) {\r
@@ -585,6 +573,7 @@ TerminalConInTimerHandler (
             TerminalDevice->DevicePath\r
             );\r
         }\r
+\r
         break;\r
       }\r
 \r
@@ -608,20 +597,20 @@ TerminalConInTimerHandler (
 VOID\r
 EFIAPI\r
 KeyNotifyProcessHandler (\r
-  IN  EFI_EVENT                 Event,\r
-  IN  VOID                      *Context\r
+  IN  EFI_EVENT  Event,\r
+  IN  VOID       *Context\r
   )\r
 {\r
-  BOOLEAN                       HasKey;\r
-  TERMINAL_DEV                  *TerminalDevice;\r
-  EFI_INPUT_KEY                 Key;\r
-  EFI_KEY_DATA                  KeyData;\r
-  LIST_ENTRY                    *Link;\r
-  LIST_ENTRY                    *NotifyList;\r
-  TERMINAL_CONSOLE_IN_EX_NOTIFY *CurrentNotify;\r
-  EFI_TPL                       OldTpl;\r
+  BOOLEAN                        HasKey;\r
+  TERMINAL_DEV                   *TerminalDevice;\r
+  EFI_INPUT_KEY                  Key;\r
+  EFI_KEY_DATA                   KeyData;\r
+  LIST_ENTRY                     *Link;\r
+  LIST_ENTRY                     *NotifyList;\r
+  TERMINAL_CONSOLE_IN_EX_NOTIFY  *CurrentNotify;\r
+  EFI_TPL                        OldTpl;\r
 \r
-  TerminalDevice = (TERMINAL_DEV *) Context;\r
+  TerminalDevice = (TERMINAL_DEV *)Context;\r
 \r
   //\r
   // Invoke notification functions.\r
@@ -643,6 +632,7 @@ KeyNotifyProcessHandler (
     if (!HasKey) {\r
       break;\r
     }\r
+\r
     for (Link = GetFirstNode (NotifyList); !IsNull (NotifyList, Link); Link = GetNextNode (NotifyList, Link)) {\r
       CurrentNotify = CR (Link, TERMINAL_CONSOLE_IN_EX_NOTIFY, NotifyEntry, TERMINAL_CONSOLE_IN_EX_NOTIFY_SIGNATURE);\r
       if (IsKeyRegistered (&CurrentNotify->KeyData, &KeyData)) {\r
@@ -679,16 +669,14 @@ GetOneKeyFromSerial (
   //\r
   // Read one key from serial I/O device.\r
   //\r
-  Status  = SerialIo->Read (SerialIo, &Size, Output);\r
+  Status = SerialIo->Read (SerialIo, &Size, Output);\r
 \r
   if (EFI_ERROR (Status)) {\r
-\r
     if (Status == EFI_TIMEOUT) {\r
       return EFI_NOT_READY;\r
     }\r
 \r
     return EFI_DEVICE_ERROR;\r
-\r
   }\r
 \r
   if (*Output == 0) {\r
@@ -711,11 +699,11 @@ GetOneKeyFromSerial (
 **/\r
 BOOLEAN\r
 RawFiFoInsertOneKey (\r
-  TERMINAL_DEV      *TerminalDevice,\r
-  UINT8             Input\r
+  TERMINAL_DEV  *TerminalDevice,\r
+  UINT8         Input\r
   )\r
 {\r
-  UINT8 Tail;\r
+  UINT8  Tail;\r
 \r
   Tail = TerminalDevice->RawFiFo->Tail;\r
 \r
@@ -726,9 +714,9 @@ RawFiFoInsertOneKey (
     return FALSE;\r
   }\r
 \r
-  TerminalDevice->RawFiFo->Data[Tail]  = Input;\r
+  TerminalDevice->RawFiFo->Data[Tail] = Input;\r
 \r
-  TerminalDevice->RawFiFo->Tail        = (UINT8) ((Tail + 1) % (RAW_FIFO_MAX_NUMBER + 1));\r
+  TerminalDevice->RawFiFo->Tail = (UINT8)((Tail + 1) % (RAW_FIFO_MAX_NUMBER + 1));\r
 \r
   return TRUE;\r
 }\r
@@ -749,7 +737,7 @@ RawFiFoRemoveOneKey (
   UINT8         *Output\r
   )\r
 {\r
-  UINT8 Head;\r
+  UINT8  Head;\r
 \r
   Head = TerminalDevice->RawFiFo->Head;\r
 \r
@@ -761,9 +749,9 @@ RawFiFoRemoveOneKey (
     return FALSE;\r
   }\r
 \r
-  *Output                       = TerminalDevice->RawFiFo->Data[Head];\r
+  *Output = TerminalDevice->RawFiFo->Data[Head];\r
 \r
-  TerminalDevice->RawFiFo->Head  = (UINT8) ((Head + 1) % (RAW_FIFO_MAX_NUMBER + 1));\r
+  TerminalDevice->RawFiFo->Head = (UINT8)((Head + 1) % (RAW_FIFO_MAX_NUMBER + 1));\r
 \r
   return TRUE;\r
 }\r
@@ -803,14 +791,13 @@ IsRawFiFoFull (
   TERMINAL_DEV  *TerminalDevice\r
   )\r
 {\r
-  UINT8 Tail;\r
-  UINT8 Head;\r
+  UINT8  Tail;\r
+  UINT8  Head;\r
 \r
-  Tail  = TerminalDevice->RawFiFo->Tail;\r
-  Head  = TerminalDevice->RawFiFo->Head;\r
+  Tail = TerminalDevice->RawFiFo->Tail;\r
+  Head = TerminalDevice->RawFiFo->Head;\r
 \r
   if (((Tail + 1) % (RAW_FIFO_MAX_NUMBER + 1)) == Head) {\r
-\r
     return TRUE;\r
   }\r
 \r
@@ -830,11 +817,11 @@ IsRawFiFoFull (
 **/\r
 BOOLEAN\r
 EfiKeyFiFoForNotifyInsertOneKey (\r
-  EFI_KEY_FIFO                  *EfiKeyFiFo,\r
-  EFI_INPUT_KEY                 *Input\r
+  EFI_KEY_FIFO   *EfiKeyFiFo,\r
+  EFI_INPUT_KEY  *Input\r
   )\r
 {\r
-  UINT8                         Tail;\r
+  UINT8  Tail;\r
 \r
   Tail = EfiKeyFiFo->Tail;\r
 \r
@@ -847,7 +834,7 @@ EfiKeyFiFoForNotifyInsertOneKey (
 \r
   CopyMem (&EfiKeyFiFo->Data[Tail], Input, sizeof (EFI_INPUT_KEY));\r
 \r
-  EfiKeyFiFo->Tail = (UINT8) ((Tail + 1) % (FIFO_MAX_NUMBER + 1));\r
+  EfiKeyFiFo->Tail = (UINT8)((Tail + 1) % (FIFO_MAX_NUMBER + 1));\r
 \r
   return TRUE;\r
 }\r
@@ -864,11 +851,11 @@ EfiKeyFiFoForNotifyInsertOneKey (
 **/\r
 BOOLEAN\r
 EfiKeyFiFoForNotifyRemoveOneKey (\r
-  EFI_KEY_FIFO                  *EfiKeyFiFo,\r
-  EFI_INPUT_KEY                 *Output\r
+  EFI_KEY_FIFO   *EfiKeyFiFo,\r
+  EFI_INPUT_KEY  *Output\r
   )\r
 {\r
-  UINT8                         Head;\r
+  UINT8  Head;\r
 \r
   Head = EfiKeyFiFo->Head;\r
   ASSERT (Head < FIFO_MAX_NUMBER + 1);\r
@@ -884,7 +871,7 @@ EfiKeyFiFoForNotifyRemoveOneKey (
 \r
   CopyMem (Output, &EfiKeyFiFo->Data[Head], sizeof (EFI_INPUT_KEY));\r
 \r
-  EfiKeyFiFo->Head = (UINT8) ((Head + 1) % (FIFO_MAX_NUMBER + 1));\r
+  EfiKeyFiFo->Head = (UINT8)((Head + 1) % (FIFO_MAX_NUMBER + 1));\r
 \r
   return TRUE;\r
 }\r
@@ -900,7 +887,7 @@ EfiKeyFiFoForNotifyRemoveOneKey (
 **/\r
 BOOLEAN\r
 IsEfiKeyFiFoForNotifyEmpty (\r
-  EFI_KEY_FIFO                  *EfiKeyFiFo\r
+  EFI_KEY_FIFO  *EfiKeyFiFo\r
   )\r
 {\r
   if (EfiKeyFiFo->Head == EfiKeyFiFo->Tail) {\r
@@ -921,11 +908,11 @@ IsEfiKeyFiFoForNotifyEmpty (
 **/\r
 BOOLEAN\r
 IsEfiKeyFiFoForNotifyFull (\r
-  EFI_KEY_FIFO                  *EfiKeyFiFo\r
+  EFI_KEY_FIFO  *EfiKeyFiFo\r
   )\r
 {\r
-  UINT8                         Tail;\r
-  UINT8                         Head;\r
+  UINT8  Tail;\r
+  UINT8  Head;\r
 \r
   Tail = EfiKeyFiFo->Tail;\r
   Head = EfiKeyFiFo->Head;\r
@@ -950,15 +937,15 @@ IsEfiKeyFiFoForNotifyFull (
 **/\r
 BOOLEAN\r
 EfiKeyFiFoInsertOneKey (\r
-  TERMINAL_DEV                    *TerminalDevice,\r
-  EFI_INPUT_KEY                   *Key\r
+  TERMINAL_DEV   *TerminalDevice,\r
+  EFI_INPUT_KEY  *Key\r
   )\r
 {\r
-  UINT8                           Tail;\r
-  LIST_ENTRY                      *Link;\r
-  LIST_ENTRY                      *NotifyList;\r
-  TERMINAL_CONSOLE_IN_EX_NOTIFY   *CurrentNotify;\r
-  EFI_KEY_DATA                    KeyData;\r
+  UINT8                          Tail;\r
+  LIST_ENTRY                     *Link;\r
+  LIST_ENTRY                     *NotifyList;\r
+  TERMINAL_CONSOLE_IN_EX_NOTIFY  *CurrentNotify;\r
+  EFI_KEY_DATA                   KeyData;\r
 \r
   Tail = TerminalDevice->EfiKeyFiFo->Tail;\r
 \r
@@ -970,7 +957,7 @@ EfiKeyFiFoInsertOneKey (
   // Signal KeyNotify process event if this key pressed matches any key registered.\r
   //\r
   NotifyList = &TerminalDevice->NotifyList;\r
-  for (Link = GetFirstNode (NotifyList); !IsNull (NotifyList,Link); Link = GetNextNode (NotifyList,Link)) {\r
+  for (Link = GetFirstNode (NotifyList); !IsNull (NotifyList, Link); Link = GetNextNode (NotifyList, Link)) {\r
     CurrentNotify = CR (\r
                       Link,\r
                       TERMINAL_CONSOLE_IN_EX_NOTIFY,\r
@@ -988,6 +975,7 @@ EfiKeyFiFoInsertOneKey (
       break;\r
     }\r
   }\r
+\r
   if (IsEfiKeyFiFoFull (TerminalDevice)) {\r
     //\r
     // Efi Key FIFO is full\r
@@ -997,7 +985,7 @@ EfiKeyFiFoInsertOneKey (
 \r
   CopyMem (&TerminalDevice->EfiKeyFiFo->Data[Tail], Key, sizeof (EFI_INPUT_KEY));\r
 \r
-  TerminalDevice->EfiKeyFiFo->Tail = (UINT8) ((Tail + 1) % (FIFO_MAX_NUMBER + 1));\r
+  TerminalDevice->EfiKeyFiFo->Tail = (UINT8)((Tail + 1) % (FIFO_MAX_NUMBER + 1));\r
 \r
   return TRUE;\r
 }\r
@@ -1014,11 +1002,11 @@ EfiKeyFiFoInsertOneKey (
 **/\r
 BOOLEAN\r
 EfiKeyFiFoRemoveOneKey (\r
-  TERMINAL_DEV  *TerminalDevice,\r
-  EFI_INPUT_KEY *Output\r
+  TERMINAL_DEV   *TerminalDevice,\r
+  EFI_INPUT_KEY  *Output\r
   )\r
 {\r
-  UINT8 Head;\r
+  UINT8  Head;\r
 \r
   Head = TerminalDevice->EfiKeyFiFo->Head;\r
   ASSERT (Head < FIFO_MAX_NUMBER + 1);\r
@@ -1034,7 +1022,7 @@ EfiKeyFiFoRemoveOneKey (
 \r
   CopyMem (Output, &TerminalDevice->EfiKeyFiFo->Data[Head], sizeof (EFI_INPUT_KEY));\r
 \r
-  TerminalDevice->EfiKeyFiFo->Head = (UINT8) ((Head + 1) % (FIFO_MAX_NUMBER + 1));\r
+  TerminalDevice->EfiKeyFiFo->Head = (UINT8)((Head + 1) % (FIFO_MAX_NUMBER + 1));\r
 \r
   return TRUE;\r
 }\r
@@ -1074,14 +1062,13 @@ IsEfiKeyFiFoFull (
   TERMINAL_DEV  *TerminalDevice\r
   )\r
 {\r
-  UINT8 Tail;\r
-  UINT8 Head;\r
+  UINT8  Tail;\r
+  UINT8  Head;\r
 \r
-  Tail  = TerminalDevice->EfiKeyFiFo->Tail;\r
-  Head  = TerminalDevice->EfiKeyFiFo->Head;\r
+  Tail = TerminalDevice->EfiKeyFiFo->Tail;\r
+  Head = TerminalDevice->EfiKeyFiFo->Head;\r
 \r
   if (((Tail + 1) % (FIFO_MAX_NUMBER + 1)) == Head) {\r
-\r
     return TRUE;\r
   }\r
 \r
@@ -1101,16 +1088,15 @@ IsEfiKeyFiFoFull (
 **/\r
 BOOLEAN\r
 UnicodeFiFoInsertOneKey (\r
-  TERMINAL_DEV      *TerminalDevice,\r
-  UINT16            Input\r
+  TERMINAL_DEV  *TerminalDevice,\r
+  UINT16        Input\r
   )\r
 {\r
-  UINT8 Tail;\r
+  UINT8  Tail;\r
 \r
   Tail = TerminalDevice->UnicodeFiFo->Tail;\r
   ASSERT (Tail < FIFO_MAX_NUMBER + 1);\r
 \r
-\r
   if (IsUnicodeFiFoFull (TerminalDevice)) {\r
     //\r
     // Unicode FIFO is full\r
@@ -1118,9 +1104,9 @@ UnicodeFiFoInsertOneKey (
     return FALSE;\r
   }\r
 \r
-  TerminalDevice->UnicodeFiFo->Data[Tail]  = Input;\r
+  TerminalDevice->UnicodeFiFo->Data[Tail] = Input;\r
 \r
-  TerminalDevice->UnicodeFiFo->Tail        = (UINT8) ((Tail + 1) % (FIFO_MAX_NUMBER + 1));\r
+  TerminalDevice->UnicodeFiFo->Tail = (UINT8)((Tail + 1) % (FIFO_MAX_NUMBER + 1));\r
 \r
   return TRUE;\r
 }\r
@@ -1140,14 +1126,14 @@ UnicodeFiFoRemoveOneKey (
   UINT16        *Output\r
   )\r
 {\r
-  UINT8 Head;\r
+  UINT8  Head;\r
 \r
   Head = TerminalDevice->UnicodeFiFo->Head;\r
   ASSERT (Head < FIFO_MAX_NUMBER + 1);\r
 \r
   *Output = TerminalDevice->UnicodeFiFo->Data[Head];\r
 \r
-  TerminalDevice->UnicodeFiFo->Head = (UINT8) ((Head + 1) % (FIFO_MAX_NUMBER + 1));\r
+  TerminalDevice->UnicodeFiFo->Head = (UINT8)((Head + 1) % (FIFO_MAX_NUMBER + 1));\r
 }\r
 \r
 /**\r
@@ -1185,21 +1171,19 @@ IsUnicodeFiFoFull (
   TERMINAL_DEV  *TerminalDevice\r
   )\r
 {\r
-  UINT8 Tail;\r
-  UINT8 Head;\r
+  UINT8  Tail;\r
+  UINT8  Head;\r
 \r
-  Tail  = TerminalDevice->UnicodeFiFo->Tail;\r
-  Head  = TerminalDevice->UnicodeFiFo->Head;\r
+  Tail = TerminalDevice->UnicodeFiFo->Tail;\r
+  Head = TerminalDevice->UnicodeFiFo->Head;\r
 \r
   if (((Tail + 1) % (FIFO_MAX_NUMBER + 1)) == Head) {\r
-\r
     return TRUE;\r
   }\r
 \r
   return FALSE;\r
 }\r
 \r
-\r
 /**\r
   Update the Unicode characters from a terminal input device into EFI Keys FIFO.\r
 \r
@@ -1208,11 +1192,11 @@ IsUnicodeFiFoFull (
 **/\r
 VOID\r
 UnicodeToEfiKeyFlushState (\r
-  IN  TERMINAL_DEV    *TerminalDevice\r
+  IN  TERMINAL_DEV  *TerminalDevice\r
   )\r
 {\r
-  EFI_INPUT_KEY Key;\r
-  UINT32        InputState;\r
+  EFI_INPUT_KEY  Key;\r
+  UINT32         InputState;\r
 \r
   InputState = TerminalDevice->InputState;\r
 \r
@@ -1254,15 +1238,14 @@ UnicodeToEfiKeyFlushState (
   // Cancel the timer.\r
   //\r
   gBS->SetTimer (\r
-        TerminalDevice->TwoSecondTimeOut,\r
-        TimerCancel,\r
-        0\r
-        );\r
+         TerminalDevice->TwoSecondTimeOut,\r
+         TimerCancel,\r
+         0\r
+         );\r
 \r
   TerminalDevice->InputState = INPUT_STATE_DEFAULT;\r
 }\r
 \r
-\r
 /**\r
   Converts a stream of Unicode characters from a terminal input device into EFI Keys that\r
   can be read through the Simple Input Protocol.\r
@@ -1353,14 +1336,14 @@ Putty function key map:
 **/\r
 VOID\r
 UnicodeToEfiKey (\r
-  IN  TERMINAL_DEV    *TerminalDevice\r
+  IN  TERMINAL_DEV  *TerminalDevice\r
   )\r
 {\r
-  EFI_STATUS          Status;\r
-  EFI_STATUS          TimerStatus;\r
-  UINT16              UnicodeChar;\r
-  EFI_INPUT_KEY       Key;\r
-  BOOLEAN             SetDefaultResetState;\r
+  EFI_STATUS     Status;\r
+  EFI_STATUS     TimerStatus;\r
+  UINT16         UnicodeChar;\r
+  EFI_INPUT_KEY  Key;\r
+  BOOLEAN        SetDefaultResetState;\r
 \r
   TimerStatus = gBS->CheckEvent (TerminalDevice->TwoSecondTimeOut);\r
 \r
@@ -1370,7 +1353,6 @@ UnicodeToEfiKey (
   }\r
 \r
   while (!IsUnicodeFiFoEmpty (TerminalDevice) && !IsEfiKeyFiFoFull (TerminalDevice)) {\r
-\r
     if (TerminalDevice->InputState != INPUT_STATE_DEFAULT) {\r
       //\r
       // Check to see if the 2 seconds timer has expired\r
@@ -1390,666 +1372,714 @@ UnicodeToEfiKey (
     SetDefaultResetState = TRUE;\r
 \r
     switch (TerminalDevice->InputState) {\r
-    case INPUT_STATE_DEFAULT:\r
+      case INPUT_STATE_DEFAULT:\r
 \r
-      break;\r
+        break;\r
 \r
-    case INPUT_STATE_ESC:\r
+      case INPUT_STATE_ESC:\r
 \r
-      if (UnicodeChar == LEFTOPENBRACKET) {\r
-        TerminalDevice->InputState |= INPUT_STATE_LEFTOPENBRACKET;\r
-        TerminalDevice->ResetState = RESET_STATE_DEFAULT;\r
-        continue;\r
-      }\r
+        if (UnicodeChar == LEFTOPENBRACKET) {\r
+          TerminalDevice->InputState |= INPUT_STATE_LEFTOPENBRACKET;\r
+          TerminalDevice->ResetState  = RESET_STATE_DEFAULT;\r
+          continue;\r
+        }\r
 \r
-      if (UnicodeChar == 'O' && (TerminalDevice->TerminalType == TerminalTypeVt100 ||\r
-                                 TerminalDevice->TerminalType == TerminalTypeTtyTerm ||\r
-                                 TerminalDevice->TerminalType == TerminalTypeXtermR6 ||\r
-                                 TerminalDevice->TerminalType == TerminalTypeVt100Plus)) {\r
-        TerminalDevice->InputState |= INPUT_STATE_O;\r
-        TerminalDevice->ResetState = RESET_STATE_DEFAULT;\r
-        continue;\r
-      }\r
+        if ((UnicodeChar == 'O') && ((TerminalDevice->TerminalType == TerminalTypeVt100) ||\r
+                                     (TerminalDevice->TerminalType == TerminalTypeTtyTerm) ||\r
+                                     (TerminalDevice->TerminalType == TerminalTypeXtermR6) ||\r
+                                     (TerminalDevice->TerminalType == TerminalTypeVt100Plus)))\r
+        {\r
+          TerminalDevice->InputState |= INPUT_STATE_O;\r
+          TerminalDevice->ResetState  = RESET_STATE_DEFAULT;\r
+          continue;\r
+        }\r
 \r
-      Key.ScanCode = SCAN_NULL;\r
+        Key.ScanCode = SCAN_NULL;\r
+\r
+        if ((TerminalDevice->TerminalType == TerminalTypeVt100Plus) ||\r
+            (TerminalDevice->TerminalType == TerminalTypeVtUtf8))\r
+        {\r
+          switch (UnicodeChar) {\r
+            case '1':\r
+              Key.ScanCode = SCAN_F1;\r
+              break;\r
+            case '2':\r
+              Key.ScanCode = SCAN_F2;\r
+              break;\r
+            case '3':\r
+              Key.ScanCode = SCAN_F3;\r
+              break;\r
+            case '4':\r
+              Key.ScanCode = SCAN_F4;\r
+              break;\r
+            case '5':\r
+              Key.ScanCode = SCAN_F5;\r
+              break;\r
+            case '6':\r
+              Key.ScanCode = SCAN_F6;\r
+              break;\r
+            case '7':\r
+              Key.ScanCode = SCAN_F7;\r
+              break;\r
+            case '8':\r
+              Key.ScanCode = SCAN_F8;\r
+              break;\r
+            case '9':\r
+              Key.ScanCode = SCAN_F9;\r
+              break;\r
+            case '0':\r
+              Key.ScanCode = SCAN_F10;\r
+              break;\r
+            case '!':\r
+              Key.ScanCode = SCAN_F11;\r
+              break;\r
+            case '@':\r
+              Key.ScanCode = SCAN_F12;\r
+              break;\r
+            case 'h':\r
+              Key.ScanCode = SCAN_HOME;\r
+              break;\r
+            case 'k':\r
+              Key.ScanCode = SCAN_END;\r
+              break;\r
+            case '+':\r
+              Key.ScanCode = SCAN_INSERT;\r
+              break;\r
+            case '-':\r
+              Key.ScanCode = SCAN_DELETE;\r
+              break;\r
+            case '/':\r
+              Key.ScanCode = SCAN_PAGE_DOWN;\r
+              break;\r
+            case '?':\r
+              Key.ScanCode = SCAN_PAGE_UP;\r
+              break;\r
+            default:\r
+              break;\r
+          }\r
+        }\r
 \r
-      if (TerminalDevice->TerminalType == TerminalTypeVt100Plus ||\r
-          TerminalDevice->TerminalType == TerminalTypeVtUtf8) {\r
         switch (UnicodeChar) {\r
-        case '1':\r
-          Key.ScanCode = SCAN_F1;\r
-          break;\r
-        case '2':\r
-          Key.ScanCode = SCAN_F2;\r
-          break;\r
-        case '3':\r
-          Key.ScanCode = SCAN_F3;\r
-          break;\r
-        case '4':\r
-          Key.ScanCode = SCAN_F4;\r
-          break;\r
-        case '5':\r
-          Key.ScanCode = SCAN_F5;\r
-          break;\r
-        case '6':\r
-          Key.ScanCode = SCAN_F6;\r
-          break;\r
-        case '7':\r
-          Key.ScanCode = SCAN_F7;\r
-          break;\r
-        case '8':\r
-          Key.ScanCode = SCAN_F8;\r
-          break;\r
-        case '9':\r
-          Key.ScanCode = SCAN_F9;\r
-          break;\r
-        case '0':\r
-          Key.ScanCode = SCAN_F10;\r
-          break;\r
-        case '!':\r
-          Key.ScanCode = SCAN_F11;\r
-          break;\r
-        case '@':\r
-          Key.ScanCode = SCAN_F12;\r
-          break;\r
-        case 'h':\r
-          Key.ScanCode = SCAN_HOME;\r
-          break;\r
-        case 'k':\r
-          Key.ScanCode = SCAN_END;\r
-          break;\r
-        case '+':\r
-          Key.ScanCode = SCAN_INSERT;\r
-          break;\r
-        case '-':\r
-          Key.ScanCode = SCAN_DELETE;\r
-          break;\r
-        case '/':\r
-          Key.ScanCode = SCAN_PAGE_DOWN;\r
-          break;\r
-        case '?':\r
-          Key.ScanCode = SCAN_PAGE_UP;\r
-          break;\r
-        default :\r
-          break;\r
+          case 'R':\r
+            if (TerminalDevice->ResetState == RESET_STATE_DEFAULT) {\r
+              TerminalDevice->ResetState = RESET_STATE_ESC_R;\r
+              SetDefaultResetState       = FALSE;\r
+            } else if (TerminalDevice->ResetState == RESET_STATE_ESC_R_ESC_R) {\r
+              gRT->ResetSystem (EfiResetWarm, EFI_SUCCESS, 0, NULL);\r
+            }\r
+\r
+            Key.ScanCode = SCAN_NULL;\r
+            break;\r
+          case 'r':\r
+            if (TerminalDevice->ResetState == RESET_STATE_ESC_R) {\r
+              TerminalDevice->ResetState = RESET_STATE_ESC_R_ESC_R;\r
+              SetDefaultResetState       = FALSE;\r
+            }\r
+\r
+            Key.ScanCode = SCAN_NULL;\r
+            break;\r
+          default:\r
+            break;\r
         }\r
-      }\r
 \r
-      switch (UnicodeChar) {\r
-      case 'R':\r
-        if (TerminalDevice->ResetState == RESET_STATE_DEFAULT) {\r
-          TerminalDevice->ResetState = RESET_STATE_ESC_R;\r
-          SetDefaultResetState = FALSE;\r
-        } else if (TerminalDevice->ResetState == RESET_STATE_ESC_R_ESC_R) {\r
-          gRT->ResetSystem (EfiResetWarm, EFI_SUCCESS, 0, NULL);\r
+        if (SetDefaultResetState) {\r
+          TerminalDevice->ResetState = RESET_STATE_DEFAULT;\r
         }\r
-        Key.ScanCode = SCAN_NULL;\r
-        break;\r
-      case 'r':\r
-        if (TerminalDevice->ResetState == RESET_STATE_ESC_R) {\r
-          TerminalDevice->ResetState = RESET_STATE_ESC_R_ESC_R;\r
-          SetDefaultResetState = FALSE;\r
+\r
+        if (Key.ScanCode != SCAN_NULL) {\r
+          Key.UnicodeChar = 0;\r
+          EfiKeyFiFoInsertOneKey (TerminalDevice, &Key);\r
+          TerminalDevice->InputState = INPUT_STATE_DEFAULT;\r
+          UnicodeToEfiKeyFlushState (TerminalDevice);\r
+          continue;\r
         }\r
-        Key.ScanCode = SCAN_NULL;\r
-        break;\r
-      default :\r
+\r
+        UnicodeToEfiKeyFlushState (TerminalDevice);\r
+\r
         break;\r
-      }\r
 \r
-      if (SetDefaultResetState) {\r
+      case INPUT_STATE_ESC | INPUT_STATE_O:\r
+\r
         TerminalDevice->ResetState = RESET_STATE_DEFAULT;\r
-      }\r
 \r
-      if (Key.ScanCode != SCAN_NULL) {\r
-        Key.UnicodeChar = 0;\r
-        EfiKeyFiFoInsertOneKey (TerminalDevice, &Key);\r
-        TerminalDevice->InputState = INPUT_STATE_DEFAULT;\r
-        UnicodeToEfiKeyFlushState (TerminalDevice);\r
-        continue;\r
-      }\r
+        Key.ScanCode = SCAN_NULL;\r
 \r
-      UnicodeToEfiKeyFlushState (TerminalDevice);\r
+        if (TerminalDevice->TerminalType == TerminalTypeVt100) {\r
+          switch (UnicodeChar) {\r
+            case 'P':\r
+              Key.ScanCode = SCAN_F1;\r
+              break;\r
+            case 'Q':\r
+              Key.ScanCode = SCAN_F2;\r
+              break;\r
+            case 'w':\r
+              Key.ScanCode = SCAN_F3;\r
+              break;\r
+            case 'x':\r
+              Key.ScanCode = SCAN_F4;\r
+              break;\r
+            case 't':\r
+              Key.ScanCode = SCAN_F5;\r
+              break;\r
+            case 'u':\r
+              Key.ScanCode = SCAN_F6;\r
+              break;\r
+            case 'q':\r
+              Key.ScanCode = SCAN_F7;\r
+              break;\r
+            case 'r':\r
+              Key.ScanCode = SCAN_F8;\r
+              break;\r
+            case 'p':\r
+              Key.ScanCode = SCAN_F9;\r
+              break;\r
+            case 'M':\r
+              Key.ScanCode = SCAN_F10;\r
+              break;\r
+            default:\r
+              break;\r
+          }\r
+        } else if (TerminalDevice->TerminalType == TerminalTypeTtyTerm) {\r
+          /* Also accept VT100 escape codes for F1-F4, HOME and END for TTY term */\r
+          switch (UnicodeChar) {\r
+            case 'P':\r
+              Key.ScanCode = SCAN_F1;\r
+              break;\r
+            case 'Q':\r
+              Key.ScanCode = SCAN_F2;\r
+              break;\r
+            case 'R':\r
+              Key.ScanCode = SCAN_F3;\r
+              break;\r
+            case 'S':\r
+              Key.ScanCode = SCAN_F4;\r
+              break;\r
+            case 'H':\r
+              Key.ScanCode = SCAN_HOME;\r
+              break;\r
+            case 'F':\r
+              Key.ScanCode = SCAN_END;\r
+              break;\r
+          }\r
+        } else if (TerminalDevice->TerminalType == TerminalTypeVt100Plus) {\r
+          switch (UnicodeChar) {\r
+            case 'P':\r
+              Key.ScanCode = SCAN_F1;\r
+              break;\r
+            case 'Q':\r
+              Key.ScanCode = SCAN_F2;\r
+              break;\r
+            case 'R':\r
+              Key.ScanCode = SCAN_F3;\r
+              break;\r
+            case 'S':\r
+              Key.ScanCode = SCAN_F4;\r
+              break;\r
+            case 'T':\r
+              Key.ScanCode = SCAN_F5;\r
+              break;\r
+            case 'U':\r
+              Key.ScanCode = SCAN_F6;\r
+              break;\r
+            case 'V':\r
+              Key.ScanCode = SCAN_F7;\r
+              break;\r
+            case 'W':\r
+              Key.ScanCode = SCAN_F8;\r
+              break;\r
+            case 'X':\r
+              Key.ScanCode = SCAN_F9;\r
+              break;\r
+            case 'Y':\r
+              Key.ScanCode = SCAN_F10;\r
+              break;\r
+            case 'Z':\r
+              Key.ScanCode = SCAN_F11;\r
+              break;\r
+            case '[':\r
+              Key.ScanCode = SCAN_F12;\r
+              break;\r
+          }\r
+        } else if (TerminalDevice->TerminalType == TerminalTypeXtermR6) {\r
+          switch (UnicodeChar) {\r
+            case 'P':\r
+              Key.ScanCode = SCAN_F1;\r
+              break;\r
+            case 'Q':\r
+              Key.ScanCode = SCAN_F2;\r
+              break;\r
+            case 'R':\r
+              Key.ScanCode = SCAN_F3;\r
+              break;\r
+            case 'S':\r
+              Key.ScanCode = SCAN_F4;\r
+              break;\r
+          }\r
+        }\r
 \r
-      break;\r
+        if (Key.ScanCode != SCAN_NULL) {\r
+          Key.UnicodeChar = 0;\r
+          EfiKeyFiFoInsertOneKey (TerminalDevice, &Key);\r
+          TerminalDevice->InputState = INPUT_STATE_DEFAULT;\r
+          UnicodeToEfiKeyFlushState (TerminalDevice);\r
+          continue;\r
+        }\r
 \r
-    case INPUT_STATE_ESC | INPUT_STATE_O:\r
+        UnicodeToEfiKeyFlushState (TerminalDevice);\r
 \r
-      TerminalDevice->ResetState = RESET_STATE_DEFAULT;\r
+        break;\r
 \r
-      Key.ScanCode = SCAN_NULL;\r
+      case INPUT_STATE_ESC | INPUT_STATE_LEFTOPENBRACKET:\r
 \r
-      if (TerminalDevice->TerminalType == TerminalTypeVt100) {\r
-        switch (UnicodeChar) {\r
-        case 'P':\r
-          Key.ScanCode = SCAN_F1;\r
-          break;\r
-        case 'Q':\r
-          Key.ScanCode = SCAN_F2;\r
-          break;\r
-        case 'w':\r
-          Key.ScanCode = SCAN_F3;\r
-          break;\r
-        case 'x':\r
-          Key.ScanCode = SCAN_F4;\r
-          break;\r
-        case 't':\r
-          Key.ScanCode = SCAN_F5;\r
-          break;\r
-        case 'u':\r
-          Key.ScanCode = SCAN_F6;\r
-          break;\r
-        case 'q':\r
-          Key.ScanCode = SCAN_F7;\r
-          break;\r
-        case 'r':\r
-          Key.ScanCode = SCAN_F8;\r
-          break;\r
-        case 'p':\r
-          Key.ScanCode = SCAN_F9;\r
-          break;\r
-        case 'M':\r
-          Key.ScanCode = SCAN_F10;\r
-          break;\r
-        default :\r
-          break;\r
-        }\r
-      } else if (TerminalDevice->TerminalType == TerminalTypeTtyTerm) {\r
-        /* Also accept VT100 escape codes for F1-F4, HOME and END for TTY term */\r
-        switch (UnicodeChar) {\r
-        case 'P':\r
-          Key.ScanCode = SCAN_F1;\r
-          break;\r
-        case 'Q':\r
-          Key.ScanCode = SCAN_F2;\r
-          break;\r
-        case 'R':\r
-          Key.ScanCode = SCAN_F3;\r
-          break;\r
-        case 'S':\r
-          Key.ScanCode = SCAN_F4;\r
-          break;\r
-        case 'H':\r
-          Key.ScanCode = SCAN_HOME;\r
-          break;\r
-        case 'F':\r
-          Key.ScanCode = SCAN_END;\r
-          break;\r
+        if ((UnicodeChar == '1') && ((TerminalDevice->TerminalType == TerminalTypeXtermR6) ||\r
+                                     (TerminalDevice->TerminalType == TerminalTypeVt400) ||\r
+                                     (TerminalDevice->TerminalType == TerminalTypeLinux)))\r
+        {\r
+          TerminalDevice->InputState |= INPUT_STATE_1;\r
+          continue;\r
         }\r
-      } else if (TerminalDevice->TerminalType == TerminalTypeVt100Plus) {\r
-        switch (UnicodeChar) {\r
-        case 'P':\r
-          Key.ScanCode = SCAN_F1;\r
-          break;\r
-        case 'Q':\r
-          Key.ScanCode = SCAN_F2;\r
-          break;\r
-        case 'R':\r
-          Key.ScanCode = SCAN_F3;\r
-          break;\r
-        case 'S':\r
-          Key.ScanCode = SCAN_F4;\r
-          break;\r
-        case 'T':\r
-          Key.ScanCode = SCAN_F5;\r
-          break;\r
-        case 'U':\r
-          Key.ScanCode = SCAN_F6;\r
-          break;\r
-        case 'V':\r
-          Key.ScanCode = SCAN_F7;\r
-          break;\r
-        case 'W':\r
-          Key.ScanCode = SCAN_F8;\r
-          break;\r
-        case 'X':\r
-          Key.ScanCode = SCAN_F9;\r
-          break;\r
-        case 'Y':\r
-          Key.ScanCode = SCAN_F10;\r
-          break;\r
-        case 'Z':\r
-          Key.ScanCode = SCAN_F11;\r
-          break;\r
-        case '[':\r
-          Key.ScanCode = SCAN_F12;\r
-          break;\r
+\r
+        if ((UnicodeChar == '2') && ((TerminalDevice->TerminalType == TerminalTypeXtermR6) ||\r
+                                     (TerminalDevice->TerminalType == TerminalTypeVt400) ||\r
+                                     (TerminalDevice->TerminalType == TerminalTypeLinux)))\r
+        {\r
+          TerminalDevice->InputState |= INPUT_STATE_2;\r
+          continue;\r
         }\r
-      } else if (TerminalDevice->TerminalType == TerminalTypeXtermR6) {\r
-        switch (UnicodeChar) {\r
-        case 'P':\r
-          Key.ScanCode = SCAN_F1;\r
-          break;\r
-        case 'Q':\r
-          Key.ScanCode = SCAN_F2;\r
-          break;\r
-        case 'R':\r
-          Key.ScanCode = SCAN_F3;\r
-          break;\r
-        case 'S':\r
-          Key.ScanCode = SCAN_F4;\r
-          break;\r
+\r
+        if ((UnicodeChar == LEFTOPENBRACKET) && (TerminalDevice->TerminalType == TerminalTypeLinux)) {\r
+          TerminalDevice->InputState |= INPUT_STATE_LEFTOPENBRACKET_2ND;\r
+          continue;\r
         }\r
-      }\r
 \r
-      if (Key.ScanCode != SCAN_NULL) {\r
-        Key.UnicodeChar = 0;\r
-        EfiKeyFiFoInsertOneKey (TerminalDevice, &Key);\r
-        TerminalDevice->InputState = INPUT_STATE_DEFAULT;\r
-        UnicodeToEfiKeyFlushState (TerminalDevice);\r
-        continue;\r
-      }\r
+        TerminalDevice->ResetState = RESET_STATE_DEFAULT;\r
 \r
-      UnicodeToEfiKeyFlushState (TerminalDevice);\r
+        Key.ScanCode = SCAN_NULL;\r
 \r
-      break;\r
+        if ((TerminalDevice->TerminalType == TerminalTypePcAnsi) ||\r
+            (TerminalDevice->TerminalType == TerminalTypeVt100) ||\r
+            (TerminalDevice->TerminalType == TerminalTypeVt100Plus) ||\r
+            (TerminalDevice->TerminalType == TerminalTypeVtUtf8) ||\r
+            (TerminalDevice->TerminalType == TerminalTypeTtyTerm) ||\r
+            (TerminalDevice->TerminalType == TerminalTypeLinux) ||\r
+            (TerminalDevice->TerminalType == TerminalTypeXtermR6) ||\r
+            (TerminalDevice->TerminalType == TerminalTypeVt400) ||\r
+            (TerminalDevice->TerminalType == TerminalTypeSCO))\r
+        {\r
+          switch (UnicodeChar) {\r
+            case 'A':\r
+              Key.ScanCode = SCAN_UP;\r
+              break;\r
+            case 'B':\r
+              Key.ScanCode = SCAN_DOWN;\r
+              break;\r
+            case 'C':\r
+              Key.ScanCode = SCAN_RIGHT;\r
+              break;\r
+            case 'D':\r
+              Key.ScanCode = SCAN_LEFT;\r
+              break;\r
+            case 'H':\r
+              if ((TerminalDevice->TerminalType == TerminalTypePcAnsi) ||\r
+                  (TerminalDevice->TerminalType == TerminalTypeVt100) ||\r
+                  (TerminalDevice->TerminalType == TerminalTypeTtyTerm))\r
+              {\r
+                Key.ScanCode = SCAN_HOME;\r
+              }\r
 \r
-    case INPUT_STATE_ESC | INPUT_STATE_LEFTOPENBRACKET:\r
+              break;\r
+            case 'F':\r
+              if ((TerminalDevice->TerminalType == TerminalTypePcAnsi) ||\r
+                  (TerminalDevice->TerminalType == TerminalTypeTtyTerm))\r
+              {\r
+                Key.ScanCode = SCAN_END;\r
+              }\r
 \r
-      if (UnicodeChar == '1' && (TerminalDevice->TerminalType == TerminalTypeXtermR6 ||\r
-                                  TerminalDevice->TerminalType == TerminalTypeVt400 ||\r
-                                  TerminalDevice->TerminalType == TerminalTypeLinux)) {\r
-        TerminalDevice->InputState |= INPUT_STATE_1;\r
-        continue;\r
-      }\r
+              break;\r
+            case 'K':\r
+              if (TerminalDevice->TerminalType == TerminalTypeVt100) {\r
+                Key.ScanCode = SCAN_END;\r
+              }\r
 \r
-      if (UnicodeChar == '2' && (TerminalDevice->TerminalType == TerminalTypeXtermR6 ||\r
-                                  TerminalDevice->TerminalType == TerminalTypeVt400 ||\r
-                                  TerminalDevice->TerminalType == TerminalTypeLinux)) {\r
-        TerminalDevice->InputState |= INPUT_STATE_2;\r
-        continue;\r
-      }\r
+              break;\r
+            case 'L':\r
+            case '@':\r
+              if ((TerminalDevice->TerminalType == TerminalTypePcAnsi) ||\r
+                  (TerminalDevice->TerminalType == TerminalTypeVt100))\r
+              {\r
+                Key.ScanCode = SCAN_INSERT;\r
+              }\r
 \r
-      if (UnicodeChar == LEFTOPENBRACKET && TerminalDevice->TerminalType == TerminalTypeLinux) {\r
-        TerminalDevice->InputState |= INPUT_STATE_LEFTOPENBRACKET_2ND;\r
-        continue;\r
-      }\r
+              break;\r
+            case 'X':\r
+              if (TerminalDevice->TerminalType == TerminalTypePcAnsi) {\r
+                Key.ScanCode = SCAN_DELETE;\r
+              } else if (TerminalDevice->TerminalType == TerminalTypeSCO) {\r
+                Key.ScanCode = SCAN_F12;\r
+              }\r
 \r
-      TerminalDevice->ResetState = RESET_STATE_DEFAULT;\r
+              break;\r
+            case 'P':\r
+              if (TerminalDevice->TerminalType == TerminalTypeVt100) {\r
+                Key.ScanCode = SCAN_DELETE;\r
+              } else if ((TerminalDevice->TerminalType == TerminalTypePcAnsi) ||\r
+                         (TerminalDevice->TerminalType == TerminalTypeSCO))\r
+              {\r
+                Key.ScanCode = SCAN_F4;\r
+              }\r
 \r
-      Key.ScanCode = SCAN_NULL;\r
-\r
-      if (TerminalDevice->TerminalType == TerminalTypePcAnsi    ||\r
-          TerminalDevice->TerminalType == TerminalTypeVt100     ||\r
-          TerminalDevice->TerminalType == TerminalTypeVt100Plus ||\r
-          TerminalDevice->TerminalType == TerminalTypeVtUtf8    ||\r
-          TerminalDevice->TerminalType == TerminalTypeTtyTerm   ||\r
-          TerminalDevice->TerminalType == TerminalTypeLinux     ||\r
-          TerminalDevice->TerminalType == TerminalTypeXtermR6   ||\r
-          TerminalDevice->TerminalType == TerminalTypeVt400     ||\r
-          TerminalDevice->TerminalType == TerminalTypeSCO) {\r
-        switch (UnicodeChar) {\r
-        case 'A':\r
-          Key.ScanCode = SCAN_UP;\r
-          break;\r
-        case 'B':\r
-          Key.ScanCode = SCAN_DOWN;\r
-          break;\r
-        case 'C':\r
-          Key.ScanCode = SCAN_RIGHT;\r
-          break;\r
-        case 'D':\r
-          Key.ScanCode = SCAN_LEFT;\r
-          break;\r
-        case 'H':\r
-          if (TerminalDevice->TerminalType == TerminalTypePcAnsi ||\r
-              TerminalDevice->TerminalType == TerminalTypeVt100  ||\r
-              TerminalDevice->TerminalType == TerminalTypeTtyTerm) {\r
-            Key.ScanCode = SCAN_HOME;\r
-          }\r
-          break;\r
-        case 'F':\r
-          if (TerminalDevice->TerminalType == TerminalTypePcAnsi ||\r
-              TerminalDevice->TerminalType == TerminalTypeTtyTerm) {\r
-            Key.ScanCode = SCAN_END;\r
-          }\r
-          break;\r
-        case 'K':\r
-          if (TerminalDevice->TerminalType == TerminalTypeVt100) {\r
-            Key.ScanCode = SCAN_END;\r
-          }\r
-          break;\r
-        case 'L':\r
-        case '@':\r
-          if (TerminalDevice->TerminalType == TerminalTypePcAnsi ||\r
-              TerminalDevice->TerminalType == TerminalTypeVt100) {\r
-            Key.ScanCode = SCAN_INSERT;\r
-          }\r
-          break;\r
-        case 'X':\r
-          if (TerminalDevice->TerminalType == TerminalTypePcAnsi) {\r
-            Key.ScanCode = SCAN_DELETE;\r
-          } else if (TerminalDevice->TerminalType == TerminalTypeSCO) {\r
-            Key.ScanCode = SCAN_F12;\r
-          }\r
-          break;\r
-        case 'P':\r
-          if (TerminalDevice->TerminalType == TerminalTypeVt100) {\r
-            Key.ScanCode = SCAN_DELETE;\r
-          } else if (TerminalDevice->TerminalType == TerminalTypePcAnsi ||\r
-                      TerminalDevice->TerminalType == TerminalTypeSCO) {\r
-            Key.ScanCode = SCAN_F4;\r
-          }\r
-          break;\r
-        case 'I':\r
-          if (TerminalDevice->TerminalType == TerminalTypePcAnsi) {\r
-            Key.ScanCode = SCAN_PAGE_UP;\r
-          }\r
-          break;\r
-        case 'V':\r
-          if (TerminalDevice->TerminalType == TerminalTypePcAnsi ||\r
-              TerminalDevice->TerminalType == TerminalTypeSCO) {\r
-            Key.ScanCode = SCAN_F10;\r
-          }\r
-          break;\r
-        case '?':\r
-          if (TerminalDevice->TerminalType == TerminalTypeVt100) {\r
-            Key.ScanCode = SCAN_PAGE_UP;\r
-          }\r
-          break;\r
-        case 'G':\r
-          if (TerminalDevice->TerminalType == TerminalTypePcAnsi) {\r
-            Key.ScanCode = SCAN_PAGE_DOWN;\r
-          }\r
-          break;\r
-        case 'U':\r
-          if (TerminalDevice->TerminalType == TerminalTypePcAnsi ||\r
-              TerminalDevice->TerminalType == TerminalTypeSCO) {\r
-            Key.ScanCode = SCAN_F9;\r
-          }\r
-          break;\r
-        case '/':\r
-          if (TerminalDevice->TerminalType == TerminalTypeVt100) {\r
-            Key.ScanCode = SCAN_PAGE_DOWN;\r
-          }\r
-          break;\r
-        case 'M':\r
-          if (TerminalDevice->TerminalType == TerminalTypePcAnsi ||\r
-              TerminalDevice->TerminalType == TerminalTypeSCO) {\r
-            Key.ScanCode = SCAN_F1;\r
-          }\r
-          break;\r
-        case 'N':\r
-          if (TerminalDevice->TerminalType == TerminalTypePcAnsi ||\r
-              TerminalDevice->TerminalType == TerminalTypeSCO) {\r
-            Key.ScanCode = SCAN_F2;\r
-          }\r
-          break;\r
-        case 'O':\r
-          if (TerminalDevice->TerminalType == TerminalTypePcAnsi ||\r
-              TerminalDevice->TerminalType == TerminalTypeSCO) {\r
-            Key.ScanCode = SCAN_F3;\r
-          }\r
-          break;\r
-        case 'Q':\r
-          if (TerminalDevice->TerminalType == TerminalTypePcAnsi ||\r
-              TerminalDevice->TerminalType == TerminalTypeSCO) {\r
-            Key.ScanCode = SCAN_F5;\r
-          }\r
-          break;\r
-        case 'R':\r
-          if (TerminalDevice->TerminalType == TerminalTypePcAnsi ||\r
-              TerminalDevice->TerminalType == TerminalTypeSCO) {\r
-            Key.ScanCode = SCAN_F6;\r
-          }\r
-          break;\r
-        case 'S':\r
-          if (TerminalDevice->TerminalType == TerminalTypePcAnsi ||\r
-              TerminalDevice->TerminalType == TerminalTypeSCO) {\r
-            Key.ScanCode = SCAN_F7;\r
-          }\r
-          break;\r
-        case 'T':\r
-          if (TerminalDevice->TerminalType == TerminalTypePcAnsi ||\r
-              TerminalDevice->TerminalType == TerminalTypeSCO) {\r
-            Key.ScanCode = SCAN_F8;\r
-          }\r
-          break;\r
-        case 'W':\r
-          if (TerminalDevice->TerminalType == TerminalTypeSCO) {\r
-            Key.ScanCode = SCAN_F11;\r
-          }\r
-          break;\r
-        default :\r
-          break;\r
-        }\r
-      }\r
+              break;\r
+            case 'I':\r
+              if (TerminalDevice->TerminalType == TerminalTypePcAnsi) {\r
+                Key.ScanCode = SCAN_PAGE_UP;\r
+              }\r
 \r
-      /*\r
-       * The VT220 escape codes that the TTY terminal accepts all have\r
-       * numeric codes, and there are no ambiguous prefixes shared with\r
-       * other terminal types.\r
-       */\r
-      if (TerminalDevice->TerminalType == TerminalTypeTtyTerm &&\r
-          Key.ScanCode == SCAN_NULL &&\r
-          UnicodeChar >= '0' &&\r
-          UnicodeChar <= '9') {\r
-        TerminalDevice->TtyEscapeStr[0] = UnicodeChar;\r
-        TerminalDevice->TtyEscapeIndex = 1;\r
-        TerminalDevice->InputState |= INPUT_STATE_LEFTOPENBRACKET_TTY;\r
-        continue;\r
-      }\r
+              break;\r
+            case 'V':\r
+              if ((TerminalDevice->TerminalType == TerminalTypePcAnsi) ||\r
+                  (TerminalDevice->TerminalType == TerminalTypeSCO))\r
+              {\r
+                Key.ScanCode = SCAN_F10;\r
+              }\r
 \r
-      if (Key.ScanCode != SCAN_NULL) {\r
-        Key.UnicodeChar = 0;\r
-        EfiKeyFiFoInsertOneKey (TerminalDevice, &Key);\r
-        TerminalDevice->InputState = INPUT_STATE_DEFAULT;\r
-        UnicodeToEfiKeyFlushState (TerminalDevice);\r
-        continue;\r
-      }\r
+              break;\r
+            case '?':\r
+              if (TerminalDevice->TerminalType == TerminalTypeVt100) {\r
+                Key.ScanCode = SCAN_PAGE_UP;\r
+              }\r
 \r
-      UnicodeToEfiKeyFlushState (TerminalDevice);\r
+              break;\r
+            case 'G':\r
+              if (TerminalDevice->TerminalType == TerminalTypePcAnsi) {\r
+                Key.ScanCode = SCAN_PAGE_DOWN;\r
+              }\r
 \r
-      break;\r
+              break;\r
+            case 'U':\r
+              if ((TerminalDevice->TerminalType == TerminalTypePcAnsi) ||\r
+                  (TerminalDevice->TerminalType == TerminalTypeSCO))\r
+              {\r
+                Key.ScanCode = SCAN_F9;\r
+              }\r
 \r
-    case INPUT_STATE_ESC | INPUT_STATE_LEFTOPENBRACKET | INPUT_STATE_1:\r
+              break;\r
+            case '/':\r
+              if (TerminalDevice->TerminalType == TerminalTypeVt100) {\r
+                Key.ScanCode = SCAN_PAGE_DOWN;\r
+              }\r
 \r
-      TerminalDevice->ResetState = RESET_STATE_DEFAULT;\r
+              break;\r
+            case 'M':\r
+              if ((TerminalDevice->TerminalType == TerminalTypePcAnsi) ||\r
+                  (TerminalDevice->TerminalType == TerminalTypeSCO))\r
+              {\r
+                Key.ScanCode = SCAN_F1;\r
+              }\r
 \r
-      Key.ScanCode = SCAN_NULL;\r
+              break;\r
+            case 'N':\r
+              if ((TerminalDevice->TerminalType == TerminalTypePcAnsi) ||\r
+                  (TerminalDevice->TerminalType == TerminalTypeSCO))\r
+              {\r
+                Key.ScanCode = SCAN_F2;\r
+              }\r
 \r
-      if (TerminalDevice->TerminalType == TerminalTypeXtermR6 ||\r
-          TerminalDevice->TerminalType == TerminalTypeVt400 ||\r
-          TerminalDevice->TerminalType == TerminalTypeLinux) {\r
-        switch (UnicodeChar) {\r
-        case '1':\r
-          if (TerminalDevice->TerminalType == TerminalTypeVt400) {\r
-            Key.ScanCode = SCAN_F1;\r
-          }\r
-          break;\r
-        case '2':\r
-          if (TerminalDevice->TerminalType == TerminalTypeVt400) {\r
-            Key.ScanCode = SCAN_F2;\r
-          }\r
-          break;\r
-        case '3':\r
-          if (TerminalDevice->TerminalType == TerminalTypeVt400) {\r
-            Key.ScanCode = SCAN_F3;\r
-          }\r
-          break;\r
-        case '4':\r
-          if (TerminalDevice->TerminalType == TerminalTypeVt400) {\r
-            Key.ScanCode = SCAN_F4;\r
-          }\r
-          break;\r
-        case '5':\r
-          if (TerminalDevice->TerminalType == TerminalTypeXtermR6 ||\r
-              TerminalDevice->TerminalType == TerminalTypeVt400) {\r
-            Key.ScanCode = SCAN_F5;\r
+              break;\r
+            case 'O':\r
+              if ((TerminalDevice->TerminalType == TerminalTypePcAnsi) ||\r
+                  (TerminalDevice->TerminalType == TerminalTypeSCO))\r
+              {\r
+                Key.ScanCode = SCAN_F3;\r
+              }\r
+\r
+              break;\r
+            case 'Q':\r
+              if ((TerminalDevice->TerminalType == TerminalTypePcAnsi) ||\r
+                  (TerminalDevice->TerminalType == TerminalTypeSCO))\r
+              {\r
+                Key.ScanCode = SCAN_F5;\r
+              }\r
+\r
+              break;\r
+            case 'R':\r
+              if ((TerminalDevice->TerminalType == TerminalTypePcAnsi) ||\r
+                  (TerminalDevice->TerminalType == TerminalTypeSCO))\r
+              {\r
+                Key.ScanCode = SCAN_F6;\r
+              }\r
+\r
+              break;\r
+            case 'S':\r
+              if ((TerminalDevice->TerminalType == TerminalTypePcAnsi) ||\r
+                  (TerminalDevice->TerminalType == TerminalTypeSCO))\r
+              {\r
+                Key.ScanCode = SCAN_F7;\r
+              }\r
+\r
+              break;\r
+            case 'T':\r
+              if ((TerminalDevice->TerminalType == TerminalTypePcAnsi) ||\r
+                  (TerminalDevice->TerminalType == TerminalTypeSCO))\r
+              {\r
+                Key.ScanCode = SCAN_F8;\r
+              }\r
+\r
+              break;\r
+            case 'W':\r
+              if (TerminalDevice->TerminalType == TerminalTypeSCO) {\r
+                Key.ScanCode = SCAN_F11;\r
+              }\r
+\r
+              break;\r
+            default:\r
+              break;\r
           }\r
-          break;\r
-        case '7':\r
-          Key.ScanCode = SCAN_F6;\r
-          break;\r
-        case '8':\r
-          Key.ScanCode = SCAN_F7;\r
-          break;\r
-        case '9':\r
-          Key.ScanCode = SCAN_F8;\r
-          break;\r
         }\r
-      }\r
 \r
-      if (Key.ScanCode != SCAN_NULL) {\r
-        Key.UnicodeChar = 0;\r
-        EfiKeyFiFoInsertOneKey (TerminalDevice, &Key);\r
-        TerminalDevice->InputState = INPUT_STATE_DEFAULT;\r
+        /*\r
+         * The VT220 escape codes that the TTY terminal accepts all have\r
+         * numeric codes, and there are no ambiguous prefixes shared with\r
+         * other terminal types.\r
+         */\r
+        if ((TerminalDevice->TerminalType == TerminalTypeTtyTerm) &&\r
+            (Key.ScanCode == SCAN_NULL) &&\r
+            (UnicodeChar >= '0') &&\r
+            (UnicodeChar <= '9'))\r
+        {\r
+          TerminalDevice->TtyEscapeStr[0] = UnicodeChar;\r
+          TerminalDevice->TtyEscapeIndex  = 1;\r
+          TerminalDevice->InputState     |= INPUT_STATE_LEFTOPENBRACKET_TTY;\r
+          continue;\r
+        }\r
+\r
+        if (Key.ScanCode != SCAN_NULL) {\r
+          Key.UnicodeChar = 0;\r
+          EfiKeyFiFoInsertOneKey (TerminalDevice, &Key);\r
+          TerminalDevice->InputState = INPUT_STATE_DEFAULT;\r
+          UnicodeToEfiKeyFlushState (TerminalDevice);\r
+          continue;\r
+        }\r
+\r
         UnicodeToEfiKeyFlushState (TerminalDevice);\r
-        continue;\r
-      }\r
 \r
-      UnicodeToEfiKeyFlushState (TerminalDevice);\r
+        break;\r
 \r
-      break;\r
+      case INPUT_STATE_ESC | INPUT_STATE_LEFTOPENBRACKET | INPUT_STATE_1:\r
 \r
-    case INPUT_STATE_ESC | INPUT_STATE_LEFTOPENBRACKET | INPUT_STATE_2:\r
+        TerminalDevice->ResetState = RESET_STATE_DEFAULT;\r
 \r
-      TerminalDevice->InputState = INPUT_STATE_DEFAULT;\r
-      Key.ScanCode = SCAN_NULL;\r
-      if (TerminalDevice->TerminalType == TerminalTypeXtermR6 ||\r
-          TerminalDevice->TerminalType == TerminalTypeVt400 ||\r
-          TerminalDevice->TerminalType == TerminalTypeLinux) {\r
-        switch (UnicodeChar) {\r
-        case '0':\r
-          Key.ScanCode = SCAN_F9;\r
-          break;\r
-        case '1':\r
-          Key.ScanCode = SCAN_F10;\r
-          break;\r
-        case '3':\r
-          Key.ScanCode = SCAN_F11;\r
-          break;\r
-        case '4':\r
-          Key.ScanCode = SCAN_F12;\r
-          break;\r
-        }\r
-      }\r
+        Key.ScanCode = SCAN_NULL;\r
 \r
-      if (Key.ScanCode != SCAN_NULL) {\r
-        Key.UnicodeChar = 0;\r
-        EfiKeyFiFoInsertOneKey (TerminalDevice, &Key);\r
-        TerminalDevice->InputState = INPUT_STATE_DEFAULT;\r
-        UnicodeToEfiKeyFlushState (TerminalDevice);\r
-        continue;\r
-      }\r
+        if ((TerminalDevice->TerminalType == TerminalTypeXtermR6) ||\r
+            (TerminalDevice->TerminalType == TerminalTypeVt400) ||\r
+            (TerminalDevice->TerminalType == TerminalTypeLinux))\r
+        {\r
+          switch (UnicodeChar) {\r
+            case '1':\r
+              if (TerminalDevice->TerminalType == TerminalTypeVt400) {\r
+                Key.ScanCode = SCAN_F1;\r
+              }\r
 \r
-      UnicodeToEfiKeyFlushState (TerminalDevice);\r
+              break;\r
+            case '2':\r
+              if (TerminalDevice->TerminalType == TerminalTypeVt400) {\r
+                Key.ScanCode = SCAN_F2;\r
+              }\r
 \r
-      break;\r
+              break;\r
+            case '3':\r
+              if (TerminalDevice->TerminalType == TerminalTypeVt400) {\r
+                Key.ScanCode = SCAN_F3;\r
+              }\r
 \r
-    case INPUT_STATE_ESC | INPUT_STATE_LEFTOPENBRACKET | INPUT_STATE_LEFTOPENBRACKET_2ND:\r
+              break;\r
+            case '4':\r
+              if (TerminalDevice->TerminalType == TerminalTypeVt400) {\r
+                Key.ScanCode = SCAN_F4;\r
+              }\r
 \r
-      TerminalDevice->InputState = INPUT_STATE_DEFAULT;\r
-      Key.ScanCode = SCAN_NULL;\r
+              break;\r
+            case '5':\r
+              if ((TerminalDevice->TerminalType == TerminalTypeXtermR6) ||\r
+                  (TerminalDevice->TerminalType == TerminalTypeVt400))\r
+              {\r
+                Key.ScanCode = SCAN_F5;\r
+              }\r
 \r
-      if (TerminalDevice->TerminalType == TerminalTypeLinux) {\r
-        switch (UnicodeChar) {\r
-        case 'A':\r
-          Key.ScanCode = SCAN_F1;\r
-          break;\r
-        case 'B':\r
-          Key.ScanCode = SCAN_F2;\r
-          break;\r
-        case 'C':\r
-          Key.ScanCode = SCAN_F3;\r
-          break;\r
-        case 'D':\r
-          Key.ScanCode = SCAN_F4;\r
-          break;\r
-        case 'E':\r
-          Key.ScanCode = SCAN_F5;\r
-          break;\r
+              break;\r
+            case '7':\r
+              Key.ScanCode = SCAN_F6;\r
+              break;\r
+            case '8':\r
+              Key.ScanCode = SCAN_F7;\r
+              break;\r
+            case '9':\r
+              Key.ScanCode = SCAN_F8;\r
+              break;\r
+          }\r
         }\r
-      }\r
 \r
-      if (Key.ScanCode != SCAN_NULL) {\r
-        Key.UnicodeChar = 0;\r
-        EfiKeyFiFoInsertOneKey (TerminalDevice, &Key);\r
+        if (Key.ScanCode != SCAN_NULL) {\r
+          Key.UnicodeChar = 0;\r
+          EfiKeyFiFoInsertOneKey (TerminalDevice, &Key);\r
+          TerminalDevice->InputState = INPUT_STATE_DEFAULT;\r
+          UnicodeToEfiKeyFlushState (TerminalDevice);\r
+          continue;\r
+        }\r
+\r
+        UnicodeToEfiKeyFlushState (TerminalDevice);\r
+\r
+        break;\r
+\r
+      case INPUT_STATE_ESC | INPUT_STATE_LEFTOPENBRACKET | INPUT_STATE_2:\r
+\r
         TerminalDevice->InputState = INPUT_STATE_DEFAULT;\r
+        Key.ScanCode               = SCAN_NULL;\r
+        if ((TerminalDevice->TerminalType == TerminalTypeXtermR6) ||\r
+            (TerminalDevice->TerminalType == TerminalTypeVt400) ||\r
+            (TerminalDevice->TerminalType == TerminalTypeLinux))\r
+        {\r
+          switch (UnicodeChar) {\r
+            case '0':\r
+              Key.ScanCode = SCAN_F9;\r
+              break;\r
+            case '1':\r
+              Key.ScanCode = SCAN_F10;\r
+              break;\r
+            case '3':\r
+              Key.ScanCode = SCAN_F11;\r
+              break;\r
+            case '4':\r
+              Key.ScanCode = SCAN_F12;\r
+              break;\r
+          }\r
+        }\r
+\r
+        if (Key.ScanCode != SCAN_NULL) {\r
+          Key.UnicodeChar = 0;\r
+          EfiKeyFiFoInsertOneKey (TerminalDevice, &Key);\r
+          TerminalDevice->InputState = INPUT_STATE_DEFAULT;\r
+          UnicodeToEfiKeyFlushState (TerminalDevice);\r
+          continue;\r
+        }\r
+\r
         UnicodeToEfiKeyFlushState (TerminalDevice);\r
-        continue;\r
-      }\r
 \r
-      UnicodeToEfiKeyFlushState (TerminalDevice);\r
+        break;\r
 \r
-      break;\r
+      case INPUT_STATE_ESC | INPUT_STATE_LEFTOPENBRACKET | INPUT_STATE_LEFTOPENBRACKET_2ND:\r
 \r
-    case INPUT_STATE_ESC | INPUT_STATE_LEFTOPENBRACKET | INPUT_STATE_LEFTOPENBRACKET_TTY:\r
-      /*\r
-       * Here we handle the VT220 escape codes that we accept.  This\r
-       * state is only used by the TTY terminal type.\r
-       */\r
-      Key.ScanCode = SCAN_NULL;\r
-      if (TerminalDevice->TerminalType == TerminalTypeTtyTerm) {\r
+        TerminalDevice->InputState = INPUT_STATE_DEFAULT;\r
+        Key.ScanCode               = SCAN_NULL;\r
 \r
-        if (UnicodeChar == '~' && TerminalDevice->TtyEscapeIndex <= 2) {\r
-          UINT16 EscCode;\r
-          TerminalDevice->TtyEscapeStr[TerminalDevice->TtyEscapeIndex] = 0; /* Terminate string */\r
-          EscCode = (UINT16) StrDecimalToUintn(TerminalDevice->TtyEscapeStr);\r
-          switch (EscCode) {\r
-          case 2:\r
-              Key.ScanCode = SCAN_INSERT;\r
+        if (TerminalDevice->TerminalType == TerminalTypeLinux) {\r
+          switch (UnicodeChar) {\r
+            case 'A':\r
+              Key.ScanCode = SCAN_F1;\r
               break;\r
-          case 3:\r
-              Key.ScanCode = SCAN_DELETE;\r
+            case 'B':\r
+              Key.ScanCode = SCAN_F2;\r
               break;\r
-          case 5:\r
-              Key.ScanCode = SCAN_PAGE_UP;\r
+            case 'C':\r
+              Key.ScanCode = SCAN_F3;\r
               break;\r
-          case 6:\r
-              Key.ScanCode = SCAN_PAGE_DOWN;\r
+            case 'D':\r
+              Key.ScanCode = SCAN_F4;\r
+              break;\r
+            case 'E':\r
+              Key.ScanCode = SCAN_F5;\r
               break;\r
-          case 11:\r
-          case 12:\r
-          case 13:\r
-          case 14:\r
-          case 15:\r
-            Key.ScanCode = SCAN_F1 + EscCode - 11;\r
-            break;\r
-          case 17:\r
-          case 18:\r
-          case 19:\r
-          case 20:\r
-          case 21:\r
-            Key.ScanCode = SCAN_F6 + EscCode - 17;\r
-            break;\r
-          case 23:\r
-          case 24:\r
-            Key.ScanCode = SCAN_F11 + EscCode - 23;\r
-            break;\r
-          default:\r
-            break;\r
           }\r
-        } else if (TerminalDevice->TtyEscapeIndex == 1){\r
-          /* 2 character escape code   */\r
-          TerminalDevice->TtyEscapeStr[TerminalDevice->TtyEscapeIndex++] = UnicodeChar;\r
-          continue;\r
         }\r
-        else {\r
-          DEBUG ((DEBUG_ERROR, "Unexpected state in escape2\n"));\r
+\r
+        if (Key.ScanCode != SCAN_NULL) {\r
+          Key.UnicodeChar = 0;\r
+          EfiKeyFiFoInsertOneKey (TerminalDevice, &Key);\r
+          TerminalDevice->InputState = INPUT_STATE_DEFAULT;\r
+          UnicodeToEfiKeyFlushState (TerminalDevice);\r
+          continue;\r
         }\r
-      }\r
-      TerminalDevice->ResetState = RESET_STATE_DEFAULT;\r
 \r
-      if (Key.ScanCode != SCAN_NULL) {\r
-        Key.UnicodeChar = 0;\r
-        EfiKeyFiFoInsertOneKey (TerminalDevice, &Key);\r
-        TerminalDevice->InputState = INPUT_STATE_DEFAULT;\r
         UnicodeToEfiKeyFlushState (TerminalDevice);\r
-        continue;\r
-      }\r
 \r
-      UnicodeToEfiKeyFlushState (TerminalDevice);\r
-      break;\r
+        break;\r
 \r
-    default:\r
-      //\r
-      // Invalid state. This should never happen.\r
-      //\r
-      ASSERT (FALSE);\r
+      case INPUT_STATE_ESC | INPUT_STATE_LEFTOPENBRACKET | INPUT_STATE_LEFTOPENBRACKET_TTY:\r
+        /*\r
+         * Here we handle the VT220 escape codes that we accept.  This\r
+         * state is only used by the TTY terminal type.\r
+         */\r
+        Key.ScanCode = SCAN_NULL;\r
+        if (TerminalDevice->TerminalType == TerminalTypeTtyTerm) {\r
+          if ((UnicodeChar == '~') && (TerminalDevice->TtyEscapeIndex <= 2)) {\r
+            UINT16  EscCode;\r
+            TerminalDevice->TtyEscapeStr[TerminalDevice->TtyEscapeIndex] = 0; /* Terminate string */\r
+            EscCode                                                      = (UINT16)StrDecimalToUintn (TerminalDevice->TtyEscapeStr);\r
+            switch (EscCode) {\r
+              case 2:\r
+                Key.ScanCode = SCAN_INSERT;\r
+                break;\r
+              case 3:\r
+                Key.ScanCode = SCAN_DELETE;\r
+                break;\r
+              case 5:\r
+                Key.ScanCode = SCAN_PAGE_UP;\r
+                break;\r
+              case 6:\r
+                Key.ScanCode = SCAN_PAGE_DOWN;\r
+                break;\r
+              case 11:\r
+              case 12:\r
+              case 13:\r
+              case 14:\r
+              case 15:\r
+                Key.ScanCode = SCAN_F1 + EscCode - 11;\r
+                break;\r
+              case 17:\r
+              case 18:\r
+              case 19:\r
+              case 20:\r
+              case 21:\r
+                Key.ScanCode = SCAN_F6 + EscCode - 17;\r
+                break;\r
+              case 23:\r
+              case 24:\r
+                Key.ScanCode = SCAN_F11 + EscCode - 23;\r
+                break;\r
+              default:\r
+                break;\r
+            }\r
+          } else if (TerminalDevice->TtyEscapeIndex == 1) {\r
+            /* 2 character escape code   */\r
+            TerminalDevice->TtyEscapeStr[TerminalDevice->TtyEscapeIndex++] = UnicodeChar;\r
+            continue;\r
+          } else {\r
+            DEBUG ((DEBUG_ERROR, "Unexpected state in escape2\n"));\r
+          }\r
+        }\r
 \r
-      UnicodeToEfiKeyFlushState (TerminalDevice);\r
+        TerminalDevice->ResetState = RESET_STATE_DEFAULT;\r
 \r
-      break;\r
+        if (Key.ScanCode != SCAN_NULL) {\r
+          Key.UnicodeChar = 0;\r
+          EfiKeyFiFoInsertOneKey (TerminalDevice, &Key);\r
+          TerminalDevice->InputState = INPUT_STATE_DEFAULT;\r
+          UnicodeToEfiKeyFlushState (TerminalDevice);\r
+          continue;\r
+        }\r
+\r
+        UnicodeToEfiKeyFlushState (TerminalDevice);\r
+        break;\r
+\r
+      default:\r
+        //\r
+        // Invalid state. This should never happen.\r
+        //\r
+        ASSERT (FALSE);\r
+\r
+        UnicodeToEfiKeyFlushState (TerminalDevice);\r
+\r
+        break;\r
     }\r
 \r
     if (UnicodeChar == ESC) {\r
@@ -2061,7 +2091,7 @@ UnicodeToEfiKey (
     }\r
 \r
     if (TerminalDevice->InputState != INPUT_STATE_DEFAULT) {\r
-      Status = gBS->SetTimer(\r
+      Status = gBS->SetTimer (\r
                       TerminalDevice->TwoSecondTimeOut,\r
                       TimerRelative,\r
                       (UINT64)20000000\r
@@ -2078,8 +2108,7 @@ UnicodeToEfiKey (
       if (TerminalDevice->TerminalType == TerminalTypeTtyTerm) {\r
         Key.ScanCode    = SCAN_NULL;\r
         Key.UnicodeChar = CHAR_BACKSPACE;\r
-      }\r
-      else {\r
+      } else {\r
         Key.ScanCode    = SCAN_DELETE;\r
         Key.UnicodeChar = 0;\r
       }\r