]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c
Fix the comments to follow UEFI Spec regarding how to check an EFI_HANDLE is valid...
[mirror_edk2.git] / MdeModulePkg / Universal / Console / TerminalDxe / Terminal.c
index 7732db8b38627a8ad00b34db775ac8e917ae8f51..9574390eb0908b76f37800315ac5b55b1f76cf8a 100644 (file)
@@ -2,7 +2,7 @@
   Produces Simple Text Input Protocol, Simple Text Input Extended Protocol and\r
   Simple Text Output Protocol upon Serial IO Protocol.\r
 \r
-Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>\r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at\r
@@ -75,6 +75,7 @@ TERMINAL_DEV  mTerminalDevTemplate = {
   NULL, // EfiKeyFiFo\r
 \r
   NULL, // ControllerNameTable\r
+  NULL, // TimerEvent\r
   NULL, // TwoSecondTimeOut\r
   INPUT_STATE_DEFAULT,\r
   RESET_STATE_DEFAULT,\r
@@ -648,7 +649,7 @@ TerminalDriverBindingStart (
                     EVT_NOTIFY_WAIT,\r
                     TPL_NOTIFY,\r
                     TerminalConInWaitForKeyEx,\r
-                    &TerminalDevice->SimpleInputEx,\r
+                    TerminalDevice,\r
                     &TerminalDevice->SimpleInputEx.WaitForKeyEx\r
                     );\r
     if (EFI_ERROR (Status)) {\r
@@ -659,7 +660,7 @@ TerminalDriverBindingStart (
                     EVT_NOTIFY_WAIT,\r
                     TPL_NOTIFY,\r
                     TerminalConInWaitForKey,\r
-                    &TerminalDevice->SimpleInput,\r
+                    TerminalDevice,\r
                     &TerminalDevice->SimpleInput.WaitForKey\r
                     );\r
     if (EFI_ERROR (Status)) {\r
@@ -724,7 +725,7 @@ TerminalDriverBindingStart (
                          );\r
     SimpleTextOutput->Mode = &TerminalDevice->SimpleTextOutputMode;\r
 \r
-    TerminalDevice->SimpleTextOutputMode.MaxMode = 3;\r
+    TerminalDevice->SimpleTextOutputMode.MaxMode = TERMINAL_MAX_MODE;\r
     //\r
     // For terminal devices, cursor is always visible\r
     //\r
@@ -737,29 +738,6 @@ TerminalDriverBindingStart (
       goto ReportError;\r
     }\r
 \r
-    Status = TerminalConOutReset (SimpleTextOutput, FALSE);\r
-    if (EFI_ERROR (Status)) {\r
-      goto ReportError;\r
-    }\r
-\r
-    Status = TerminalConOutSetMode (SimpleTextOutput, 0);\r
-    if (EFI_ERROR (Status)) {\r
-      goto ReportError;\r
-    }\r
-\r
-    Status = TerminalConOutEnableCursor (SimpleTextOutput, TRUE);\r
-    if (EFI_ERROR (Status)) {\r
-      goto ReportError;\r
-    }\r
-\r
-    Status = gBS->CreateEvent (\r
-                    EVT_TIMER,\r
-                    TPL_CALLBACK,\r
-                    NULL,\r
-                    NULL,\r
-                    &TerminalDevice->TwoSecondTimeOut\r
-                    );\r
-\r
     //\r
     // Build the component name for the child device\r
     //\r
@@ -850,6 +828,46 @@ TerminalDriverBindingStart (
       goto Error;\r
     }\r
 \r
+    Status = TerminalConOutReset (SimpleTextOutput, FALSE);\r
+    if (EFI_ERROR (Status)) {\r
+      goto ReportError;\r
+    }\r
+\r
+    Status = TerminalConOutSetMode (SimpleTextOutput, 0);\r
+    if (EFI_ERROR (Status)) {\r
+      goto ReportError;\r
+    }\r
+\r
+    Status = TerminalConOutEnableCursor (SimpleTextOutput, TRUE);\r
+    if (EFI_ERROR (Status)) {\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
+\r
     Status = gBS->InstallProtocolInterface (\r
                     &TerminalDevice->Handle,\r
                     &gEfiDevicePathProtocolGuid,\r
@@ -1052,6 +1070,10 @@ Error:
         gBS->CloseEvent (TerminalDevice->TwoSecondTimeOut);\r
       }\r
 \r
+      if (TerminalDevice->TimerEvent != NULL) {\r
+        gBS->CloseEvent (TerminalDevice->TimerEvent);\r
+      }\r
+\r
       if (TerminalDevice->SimpleInput.WaitForKey != NULL) {\r
         gBS->CloseEvent (TerminalDevice->SimpleInput.WaitForKey);\r
       }\r
@@ -1245,6 +1267,7 @@ TerminalDriverBindingStop (
           FreeUnicodeStringTable (TerminalDevice->ControllerNameTable);\r
         }\r
 \r
+        gBS->CloseEvent (TerminalDevice->TimerEvent);\r
         gBS->CloseEvent (TerminalDevice->TwoSecondTimeOut);\r
         gBS->CloseEvent (TerminalDevice->SimpleInput.WaitForKey);\r
         gBS->CloseEvent (TerminalDevice->SimpleInputEx.WaitForKeyEx);\r