return TextModeData;\r
}\r
\r
+/**\r
+ Stop the terminal state machine.\r
+\r
+ @param TerminalDevice The terminal device.\r
+**/\r
+VOID\r
+StopTerminalStateMachine (\r
+ TERMINAL_DEV *TerminalDevice\r
+ )\r
+{\r
+ EFI_TPL OriginalTpl;\r
+\r
+ OriginalTpl = gBS->RaiseTPL (TPL_NOTIFY);\r
+\r
+ gBS->CloseEvent (TerminalDevice->TimerEvent);\r
+ gBS->CloseEvent (TerminalDevice->TwoSecondTimeOut);\r
+\r
+ gBS->RestoreTPL (OriginalTpl);\r
+}\r
+\r
+/**\r
+ Start the terminal state machine.\r
+\r
+ @param TerminalDevice The terminal device.\r
+**/\r
+VOID\r
+StartTerminalStateMachine (\r
+ TERMINAL_DEV *TerminalDevice\r
+ )\r
+{\r
+ EFI_STATUS Status;\r
+ Status = gBS->CreateEvent (\r
+ EVT_TIMER | EVT_NOTIFY_SIGNAL,\r
+ TPL_NOTIFY,\r
+ TerminalConInTimerHandler,\r
+ TerminalDevice,\r
+ &TerminalDevice->TimerEvent\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
+ Status = gBS->SetTimer (\r
+ TerminalDevice->TimerEvent,\r
+ TimerPeriodic,\r
+ KEYBOARD_TIMER_INTERVAL\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
+ Status = gBS->CreateEvent (\r
+ EVT_TIMER,\r
+ TPL_CALLBACK,\r
+ NULL,\r
+ NULL,\r
+ &TerminalDevice->TwoSecondTimeOut\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+}\r
+\r
/**\r
Initialize the controller name table.\r
\r
goto ReportError;\r
}\r
\r
- Status = gBS->CreateEvent (\r
- EVT_TIMER | EVT_NOTIFY_SIGNAL,\r
- TPL_NOTIFY,\r
- TerminalConInTimerHandler,\r
- TerminalDevice,\r
- &TerminalDevice->TimerEvent\r
- );\r
- ASSERT_EFI_ERROR (Status);\r
-\r
- Status = gBS->SetTimer (\r
- TerminalDevice->TimerEvent,\r
- TimerPeriodic,\r
- KEYBOARD_TIMER_INTERVAL\r
- );\r
- ASSERT_EFI_ERROR (Status);\r
-\r
- Status = gBS->CreateEvent (\r
- EVT_TIMER,\r
- TPL_CALLBACK,\r
- NULL,\r
- NULL,\r
- &TerminalDevice->TwoSecondTimeOut\r
- );\r
- ASSERT_EFI_ERROR (Status);\r
+ StartTerminalStateMachine (TerminalDevice);\r
\r
Status = gBS->CreateEvent (\r
EVT_NOTIFY_SIGNAL,\r
FreeUnicodeStringTable (TerminalDevice->ControllerNameTable);\r
}\r
\r
- gBS->CloseEvent (TerminalDevice->TimerEvent);\r
- gBS->CloseEvent (TerminalDevice->TwoSecondTimeOut);\r
+ StopTerminalStateMachine (TerminalDevice);\r
gBS->CloseEvent (TerminalDevice->SimpleInput.WaitForKey);\r
gBS->CloseEvent (TerminalDevice->SimpleInputEx.WaitForKeyEx);\r
gBS->CloseEvent (TerminalDevice->KeyNotifyProcessEvent);\r
{\r
VENDOR_DEVICE_PATH Node;\r
\r
- *TerminalDevicePath = NULL;\r
+ ASSERT (TerminalType < ARRAY_SIZE (mTerminalType));\r
Node.Header.Type = MESSAGING_DEVICE_PATH;\r
Node.Header.SubType = MSG_VENDOR_DP;\r
-\r
- //\r
- // Generate terminal device path node according to terminal type.\r
- //\r
- switch (TerminalType) {\r
-\r
- case TerminalTypePcAnsi:\r
- CopyGuid (&Node.Guid, &gEfiPcAnsiGuid);\r
- break;\r
-\r
- case TerminalTypeVt100:\r
- CopyGuid (&Node.Guid, &gEfiVT100Guid);\r
- break;\r
-\r
- case TerminalTypeVt100Plus:\r
- CopyGuid (&Node.Guid, &gEfiVT100PlusGuid);\r
- break;\r
-\r
- case TerminalTypeVtUtf8:\r
- CopyGuid (&Node.Guid, &gEfiVTUTF8Guid);\r
- break;\r
-\r
- case TerminalTypeTtyTerm:\r
- CopyGuid (&Node.Guid, &gEfiTtyTermGuid);\r
- break;\r
-\r
- default:\r
- return EFI_UNSUPPORTED;\r
- }\r
-\r
- //\r
- // Get VENDOR_DEVCIE_PATH size and put into Node.Header\r
- //\r
- SetDevicePathNodeLength (\r
- &Node.Header,\r
- sizeof (VENDOR_DEVICE_PATH)\r
- );\r
+ SetDevicePathNodeLength (&Node, sizeof (VENDOR_DEVICE_PATH));\r
+ CopyGuid (&Node.Guid, mTerminalType[TerminalType]);\r
\r
//\r
// Append the terminal node onto parent device path\r