]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Bus/Usb/UsbKbDxe/EfiKey.c
Code Scrub for UsbKbDxe module.
[mirror_edk2.git] / MdeModulePkg / Bus / Usb / UsbKbDxe / EfiKey.c
index 79f163301c51ac938d1741cb427ddea29839648d..d889b974d6d8e221c26f02ff69086ff4f806bd60 100644 (file)
@@ -1,5 +1,6 @@
 /** @file\r
-  USB Keyboard Driver that includes the implementation of interface.\r
+  USB Keyboard Driver that manages USB keyboard and produces Simple Text Input\r
+  Protocol and Simple Text Input Ex Protocol.\r
 \r
 Copyright (c) 2004 - 2008, Intel Corporation\r
 All rights reserved. This program and the accompanying materials\r
@@ -99,8 +100,8 @@ USBKeyboardDriverBindingSupported (
   }\r
 \r
   //\r
-  // Use the USB I/O Protocol interface to check whether the Controller is\r
-  // the Keyboard controller that can be managed by this driver.\r
+  // Use the USB I/O Protocol interface to check whether Controller is\r
+  // a keyboard device that can be managed by this driver.\r
   //\r
   Status = EFI_SUCCESS;\r
 \r
@@ -119,7 +120,11 @@ USBKeyboardDriverBindingSupported (
 }\r
 \r
 /**\r
-  Start running driver on the controller.\r
+  Starts the device with this driver.\r
+\r
+  This function produces Simple Text Input Protocol and Simple Text Input Ex Protocol,\r
+  initializes the keyboard device, and submit Asynchronous Interrupt Transfer to manage\r
+  this keyboard device.\r
 \r
   @param  This                   The USB keyboard driver binding instance.\r
   @param  Controller             Handle of device to bind driver to.\r
@@ -128,7 +133,7 @@ USBKeyboardDriverBindingSupported (
 \r
   @retval EFI_SUCCESS            The controller is controlled by the usb keyboard driver.\r
   @retval EFI_UNSUPPORTED        No interrupt endpoint can be found.\r
-  @retval Other                  The keyboard driver cannot support this controller.\r
+  @retval Other                  This controller cannot be started.\r
 \r
 **/\r
 EFI_STATUS\r
@@ -201,9 +206,6 @@ USBKeyboardDriverBindingStart (
     UsbKeyboardDevice->DevicePath\r
     );\r
 \r
-  //\r
-  // Initialize UsbKeyboardDevice\r
-  //\r
   UsbKeyboardDevice->UsbIo = UsbIo;\r
 \r
   //\r
@@ -405,17 +407,18 @@ ErrorExit:
 \r
 \r
 /**\r
-  Stop handling the controller by this USB keyboard driver.\r
+  Stop the USB keyboard device handled by this driver.\r
 \r
   @param  This                   The USB keyboard driver binding protocol.\r
   @param  Controller             The controller to release.\r
   @param  NumberOfChildren       The number of handles in ChildHandleBuffer.\r
   @param  ChildHandleBuffer      The array of child handle.\r
 \r
-  @retval EFI_SUCCESS            The controller or children are stopped.\r
+  @retval EFI_SUCCESS            The device was stopped.\r
   @retval EFI_UNSUPPORTED        Simple Text In Protocol or Simple Text In Ex Protocol\r
                                  is not installed on Controller.\r
-  @retval EFI_DEVICE_ERROR       Failed to stop the driver.\r
+  @retval EFI_DEVICE_ERROR       The device could not be stopped due to a device error.\r
+  @retval Others                 Fail to uninstall protocols attached on the device.\r
 \r
 **/\r
 EFI_STATUS\r
@@ -454,9 +457,7 @@ USBKeyboardDriverBindingStop (
   if (EFI_ERROR (Status)) {\r
     return EFI_UNSUPPORTED;\r
   }\r
-  //\r
-  // Get USB_KB_DEV instance.\r
-  //\r
+\r
   UsbKeyboardDevice = USB_KB_DEV_FROM_THIS (SimpleInput);\r
 \r
   //\r
@@ -520,28 +521,29 @@ USBKeyboardDriverBindingStop (
 }\r
 \r
 /**\r
-  Internal function to read the next keystroke from the input device.\r
+  Internal function to read the next keystroke from the keyboard buffer.\r
 \r
-  @param  UsbKeyboardDevice       Usb keyboard's private structure.\r
-  @param  KeyData                 A pointer to a buffer that is filled in with the keystroke\r
-                                  state data for the key that was pressed.\r
+  @param  UsbKeyboardDevice       USB keyboard's private structure.\r
+  @param  KeyData                 A pointer to buffer to hold the keystroke\r
+                                  data for the key that was pressed.\r
 \r
-  @return EFI_SUCCESS             The keystroke information was returned.\r
-  @return EFI_NOT_READY           There was no keystroke data availiable.\r
-  @return EFI_DEVICE_ERROR        The keystroke information was not returned due to\r
+  @retval EFI_SUCCESS             The keystroke information was returned.\r
+  @retval EFI_NOT_READY           There was no keystroke data availiable.\r
+  @retval EFI_DEVICE_ERROR        The keystroke information was not returned due to\r
                                   hardware errors.\r
-  @return EFI_INVALID_PARAMETER   KeyData is NULL.\r
+  @retval EFI_INVALID_PARAMETER   KeyData is NULL.\r
+  @retval Others                  Fail to translate keycode into EFI_INPUT_KEY\r
 \r
 **/\r
 EFI_STATUS\r
 EFIAPI\r
 USBKeyboardReadKeyStrokeWorker (\r
-  IN  USB_KB_DEV                        *UsbKeyboardDevice,\r
-  OUT EFI_KEY_DATA                      *KeyData\r
+  IN OUT USB_KB_DEV                 *UsbKeyboardDevice,\r
+     OUT EFI_KEY_DATA               *KeyData\r
   )\r
 {\r
   EFI_STATUS                        Status;\r
-  UINT8                             KeyChar;  \r
+  UINT8                             KeyCode;  \r
   LIST_ENTRY                        *Link;\r
   KEYBOARD_CONSOLE_IN_EX_NOTIFY     *CurrentNotify;  \r
   EFI_KEY_DATA                      OriginalKeyData;\r
@@ -551,10 +553,10 @@ USBKeyboardReadKeyStrokeWorker (
   }\r
 \r
   //\r
-  // If there is no saved ASCII byte, fetch it\r
+  // If there is no saved USB keycode, fetch it\r
   // by calling USBKeyboardCheckForKey().\r
   //\r
-  if (UsbKeyboardDevice->CurKeyChar == 0) {\r
+  if (UsbKeyboardDevice->CurKeyCode == 0) {\r
     Status = USBKeyboardCheckForKey (UsbKeyboardDevice);\r
     if (EFI_ERROR (Status)) {\r
       return EFI_NOT_READY;\r
@@ -565,15 +567,15 @@ USBKeyboardReadKeyStrokeWorker (
   KeyData->Key.ScanCode    = SCAN_NULL;\r
 \r
   //\r
-  // Store the key char read by USBKeyboardCheckForKey() and clear it.\r
+  // Store the current keycode and clear it.\r
   //\r
-  KeyChar = UsbKeyboardDevice->CurKeyChar;\r
-  UsbKeyboardDevice->CurKeyChar = 0;\r
+  KeyCode = UsbKeyboardDevice->CurKeyCode;\r
+  UsbKeyboardDevice->CurKeyCode = 0;\r
 \r
   //\r
-  // Translate saved ASCII byte into EFI_INPUT_KEY\r
+  // Translate saved USB keycode into EFI_INPUT_KEY\r
   //\r
-  Status = UsbKeyCodeToEfiInputKey (UsbKeyboardDevice, KeyChar, &KeyData->Key);\r
+  Status = UsbKeyCodeToEfiInputKey (UsbKeyboardDevice, KeyCode, &KeyData->Key);\r
   if (EFI_ERROR (Status)) {\r
     return Status;\r
   }\r
@@ -594,9 +596,9 @@ USBKeyboardReadKeyStrokeWorker (
   // here switch them back for notification function.\r
   //\r
   CopyMem (&OriginalKeyData, KeyData, sizeof (EFI_KEY_DATA));\r
-  if (UsbKeyboardDevice->CtrlOn != 0) {\r
+  if (UsbKeyboardDevice->CtrlOn) {\r
     if (OriginalKeyData.Key.UnicodeChar >= 0x01 && OriginalKeyData.Key.UnicodeChar <= 0x1A) {\r
-      if (UsbKeyboardDevice->CapsOn != 0) {\r
+      if (UsbKeyboardDevice->CapsOn) {\r
         OriginalKeyData.Key.UnicodeChar = (CHAR16)(OriginalKeyData.Key.UnicodeChar + 'A' - 1);\r
       } else {\r
         OriginalKeyData.Key.UnicodeChar = (CHAR16)(OriginalKeyData.Key.UnicodeChar + 'a' - 1);\r
@@ -617,24 +619,21 @@ USBKeyboardReadKeyStrokeWorker (
   }\r
 \r
   return EFI_SUCCESS;\r
-  \r
 }\r
 \r
 /**\r
-  Reset USB Keyboard.\r
+  Reset the input device and optionaly run diagnostics\r
 \r
   There are 2 types of reset for USB keyboard.\r
   For non-exhaustive reset, only keyboard buffer is cleared.\r
   For exhaustive reset, in addition to clearance of keyboard buffer, the hardware status\r
   is also re-initialized.\r
 \r
-  @param  This                  The protocol instance of EFI_SIMPLE_TEXT_INPUT_PROTOCOL.\r
-  @param  ExtendedVerification  Indicates if exhaustive reset is used.\r
-                                TRUE for exhaustive reset.\r
-                                FALSE for non-exhaustive reset.\r
+  @param  This                 Protocol instance pointer.\r
+  @param  ExtendedVerification Driver may perform diagnostics on reset.\r
 \r
-  @retval EFI_SUCCESS           Keyboard is reset successfully.\r
-  @retval EFI_DEVICE_ERROR      Failed to reset keyboard.\r
+  @retval EFI_SUCCESS          The device was reset.\r
+  @retval EFI_DEVICE_ERROR     The device is not functioning properly and could not be reset.\r
 \r
 **/\r
 EFI_STATUS\r
@@ -669,7 +668,7 @@ USBKeyboardReset (
     // Clear the key buffer of this USB keyboard\r
     //\r
     InitUSBKeyBuffer (&(UsbKeyboardDevice->KeyboardBuffer));\r
-    UsbKeyboardDevice->CurKeyChar = 0;\r
+    UsbKeyboardDevice->CurKeyCode = 0;\r
 \r
     return EFI_SUCCESS;\r
   }\r
@@ -678,7 +677,7 @@ USBKeyboardReset (
   // Exhaustive reset\r
   //\r
   Status = InitUSBKeyboard (UsbKeyboardDevice);\r
-  UsbKeyboardDevice->CurKeyChar = 0;\r
+  UsbKeyboardDevice->CurKeyCode = 0;\r
   if (EFI_ERROR (Status)) {\r
     return EFI_DEVICE_ERROR;\r
   }\r
@@ -688,14 +687,16 @@ USBKeyboardReset (
 \r
 \r
 /**\r
-  Implements EFI_SIMPLE_TEXT_INPUT_PROTOCOL.ReadKeyStroke() function.\r
+  Reads the next keystroke from the input device.\r
 \r
   @param  This                 The EFI_SIMPLE_TEXT_INPUT_PROTOCOL instance.\r
   @param  Key                  A pointer to a buffer that is filled in with the keystroke\r
                                information for the key that was pressed.\r
 \r
-  @retval EFI_SUCCESS          Read key stroke successfully.\r
-  @retval Other                Read key stroke failed.\r
+  @retval EFI_SUCCESS          The keystroke information was returned.\r
+  @retval EFI_NOT_READY        There was no keystroke data availiable.\r
+  @retval EFI_DEVICE_ERROR     The keydtroke information was not returned due to\r
+                               hardware errors.\r
 \r
 **/\r
 EFI_STATUS\r
@@ -719,12 +720,12 @@ USBKeyboardReadKeyStroke (
   CopyMem (Key, &KeyData.Key, sizeof (EFI_INPUT_KEY));\r
 \r
   return EFI_SUCCESS;\r
-\r
 }\r
 \r
 \r
 /**\r
-  Handler function for WaitForKey event.\r
+  Event notification function registered for EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.WaitForKeyEx\r
+  and EFI_SIMPLE_TEXT_INPUT_PROTOCOL.WaitForKey.\r
 \r
   @param  Event        Event to be signaled when a key is pressed.\r
   @param  Context      Points to USB_KB_DEV instance.\r
@@ -741,7 +742,7 @@ USBKeyboardWaitForKey (
 \r
   UsbKeyboardDevice = (USB_KB_DEV *) Context;\r
 \r
-  if (UsbKeyboardDevice->CurKeyChar == 0) {\r
+  if (UsbKeyboardDevice->CurKeyCode == 0) {\r
     if (EFI_ERROR (USBKeyboardCheckForKey (UsbKeyboardDevice))) {\r
       //\r
       // If no pending key, simply return.\r
@@ -757,7 +758,7 @@ USBKeyboardWaitForKey (
 \r
 \r
 /**\r
-  Check whether there is key pending.\r
+  Check whether there is key pending in the keyboard buffer.\r
 \r
   @param  UsbKeyboardDevice    The USB_KB_DEV instance.\r
 \r
@@ -768,53 +769,50 @@ USBKeyboardWaitForKey (
 EFI_STATUS\r
 EFIAPI\r
 USBKeyboardCheckForKey (\r
-  IN  USB_KB_DEV    *UsbKeyboardDevice\r
+  IN OUT  USB_KB_DEV    *UsbKeyboardDevice\r
   )\r
 {\r
   EFI_STATUS  Status;\r
-  UINT8       KeyChar;\r
+  UINT8       KeyCode;\r
 \r
   //\r
-  // Fetch raw data from the USB keyboard input,\r
-  // and translate it into ASCII data.\r
+  // Fetch raw data from the USB keyboard buffer,\r
+  // and translate it into USB keycode.\r
   //\r
-  Status = USBParseKey (UsbKeyboardDevice, &KeyChar);\r
+  Status = USBParseKey (UsbKeyboardDevice, &KeyCode);\r
   if (EFI_ERROR (Status)) {\r
     return EFI_NOT_READY;\r
   }\r
 \r
-  UsbKeyboardDevice->CurKeyChar = KeyChar;\r
+  UsbKeyboardDevice->CurKeyCode = KeyCode;\r
   return EFI_SUCCESS;\r
 }\r
 \r
 /**\r
   Free keyboard notify list.\r
 \r
-  @param  ListHead                The list head.\r
+  @param  NotifyList              The keyboard notify list to free.\r
 \r
   @retval EFI_SUCCESS             Free the notify list successfully.\r
-  @retval EFI_INVALID_PARAMETER   ListHead is invalid.\r
+  @retval EFI_INVALID_PARAMETER   NotifyList is NULL.\r
 \r
 **/\r
 EFI_STATUS\r
 EFIAPI\r
 KbdFreeNotifyList (\r
-  IN OUT LIST_ENTRY           *ListHead\r
+  IN OUT LIST_ENTRY           *NotifyList\r
   )\r
 {\r
   KEYBOARD_CONSOLE_IN_EX_NOTIFY *NotifyNode;\r
+  LIST_ENTRY                    *Link;\r
 \r
-  if (ListHead == NULL) {\r
+  if (NotifyList == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
-  while (!IsListEmpty (ListHead)) {\r
-    NotifyNode = CR (\r
-                   ListHead->ForwardLink, \r
-                   KEYBOARD_CONSOLE_IN_EX_NOTIFY, \r
-                   NotifyEntry, \r
-                   USB_KB_CONSOLE_IN_EX_NOTIFY_SIGNATURE\r
-                   );\r
-    RemoveEntryList (ListHead->ForwardLink);\r
+  while (!IsListEmpty (NotifyList)) {\r
+    Link = GetFirstNode (NotifyList);\r
+    NotifyNode = CR (Link, KEYBOARD_CONSOLE_IN_EX_NOTIFY, NotifyEntry, USB_KB_CONSOLE_IN_EX_NOTIFY_SIGNATURE);\r
+    RemoveEntryList (Link);\r
     gBS->FreePool (NotifyNode);\r
   }\r
   \r
@@ -822,15 +820,13 @@ KbdFreeNotifyList (
 }\r
 \r
 /**\r
-  Whether the pressed key matches a registered key or not.\r
+  Check whether the pressed key matches a registered key or not.\r
 \r
-  @param  RegsiteredData    A pointer to a buffer that is filled in with the keystroke\r
-                            state data for the key that was registered.\r
-  @param  InputData         A pointer to a buffer that is filled in with the keystroke\r
-                            state data for the key that was pressed.\r
+  @param  RegsiteredData    A pointer to keystroke data for the key that was registered.\r
+  @param  InputData         A pointer to keystroke data for the key that was pressed.\r
 \r
   @retval TRUE              Key pressed matches a registered key.\r
-  @retval FLASE             Match failed.\r
+  @retval FLASE             Key pressed does not matche a registered key.\r
 \r
 **/\r
 BOOLEAN\r
@@ -860,21 +856,31 @@ IsKeyRegistered (
   }     \r
   \r
   return TRUE;\r
-\r
 }\r
 \r
 //\r
 // Simple Text Input Ex protocol functions \r
 //\r
 /**\r
-  The extension routine to reset the input device.\r
+  Resets the input device hardware.\r
+\r
+  The Reset() function resets the input device hardware. As part\r
+  of initialization process, the firmware/device will make a quick\r
+  but reasonable attempt to verify that the device is functioning.\r
+  If the ExtendedVerification flag is TRUE the firmware may take\r
+  an extended amount of time to verify the device is operating on\r
+  reset. Otherwise the reset operation is to occur as quickly as\r
+  possible. The hardware verification process is not defined by\r
+  this specification and is left up to the platform firmware or\r
+  driver to implement.\r
 \r
-  @param This                     Protocol instance pointer.\r
-  @param ExtendedVerification     Driver may perform diagnostics on reset.\r
+  @param This                 A pointer to the EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL instance.\r
 \r
-  @retval EFI_SUCCESS             The device was reset.\r
-  @retval EFI_DEVICE_ERROR        The device is not functioning properly and could\r
-                                  not be reset.\r
+  @param ExtendedVerification Indicates that the driver may perform a more exhaustive\r
+                              verification operation of the device during reset.\r
+\r
+  @retval EFI_SUCCESS         The device was reset.\r
+  @retval EFI_DEVICE_ERROR    The device is not functioning correctly and could not be reset.\r
 \r
 **/\r
 EFI_STATUS\r
@@ -906,16 +912,17 @@ USBKeyboardResetEx (
 }\r
 \r
 /**\r
-  Reads the next keystroke from the input device. The WaitForKey Event can\r
-  be used to test for existance of a keystroke via WaitForEvent () call.\r
+  Reads the next keystroke from the input device.\r
 \r
-  @param  This                    Protocol instance pointer.\r
-  @param  KeyData                 A pointer to a buffer that is filled in with the keystroke\r
-                                  state data for the key that was pressed.\r
+  @param  This                   Protocol instance pointer.\r
+  @param  KeyData                A pointer to a buffer that is filled in with the keystroke\r
+                                 state data for the key that was pressed.\r
 \r
-  @return EFI_SUCCESS             The keystroke information was returned successfully.\r
-  @retval EFI_INVALID_PARAMETER   KeyData is NULL.\r
-  @retval Other                   Read key stroke information failed.\r
+  @retval EFI_SUCCESS            The keystroke information was returned.\r
+  @retval EFI_NOT_READY          There was no keystroke data available.\r
+  @retval EFI_DEVICE_ERROR       The keystroke information was not returned due to\r
+                                 hardware errors.\r
+  @retval EFI_INVALID_PARAMETER  KeyData is NULL.\r
 \r
 **/\r
 EFI_STATUS\r
@@ -944,8 +951,10 @@ USBKeyboardReadKeyStrokeEx (
   @param  KeyToggleState          A pointer to the EFI_KEY_TOGGLE_STATE to set the\r
                                   state for the input device.\r
 \r
-  @retval EFI_SUCCESS             The device state was set successfully.\r
-  @retval EFI_UNSUPPORTED         The device does not have the ability to set its state.\r
+  @retval EFI_SUCCESS             The device state was set appropriately.\r
+  @retval EFI_DEVICE_ERROR        The device is not functioning correctly and could\r
+                                  not have the setting adjusted.\r
+  @retval EFI_UNSUPPORTED         The device does not support the ability to have its state set.\r
   @retval EFI_INVALID_PARAMETER   KeyToggleState is NULL.\r
 \r
 **/\r
@@ -973,18 +982,18 @@ USBKeyboardSetState (
   // Update the status light\r
   //\r
 \r
-  UsbKeyboardDevice->ScrollOn   = 0;\r
-  UsbKeyboardDevice->NumLockOn  = 0;\r
-  UsbKeyboardDevice->CapsOn     = 0;\r
+  UsbKeyboardDevice->ScrollOn   = FALSE;\r
+  UsbKeyboardDevice->NumLockOn  = FALSE;\r
+  UsbKeyboardDevice->CapsOn     = FALSE;\r
  \r
   if ((*KeyToggleState & EFI_SCROLL_LOCK_ACTIVE) == EFI_SCROLL_LOCK_ACTIVE) {\r
-    UsbKeyboardDevice->ScrollOn = 1;\r
+    UsbKeyboardDevice->ScrollOn = TRUE;\r
   }\r
   if ((*KeyToggleState & EFI_NUM_LOCK_ACTIVE) == EFI_NUM_LOCK_ACTIVE) {\r
-    UsbKeyboardDevice->NumLockOn = 1;\r
+    UsbKeyboardDevice->NumLockOn = TRUE;\r
   }\r
   if ((*KeyToggleState & EFI_CAPS_LOCK_ACTIVE) == EFI_CAPS_LOCK_ACTIVE) {\r
-    UsbKeyboardDevice->CapsOn = 1;\r
+    UsbKeyboardDevice->CapsOn = TRUE;\r
   }\r
 \r
   SetKeyLED (UsbKeyboardDevice);\r
@@ -1007,7 +1016,7 @@ USBKeyboardSetState (
 \r
   @retval EFI_SUCCESS                 The notification function was registered successfully.\r
   @retval EFI_OUT_OF_RESOURCES        Unable to allocate resources for necesssary data structures.\r
-  @retval EFI_INVALID_PARAMETER       KeyData or NotifyHandle is NULL.\r
+  @retval EFI_INVALID_PARAMETER       KeyData or NotifyHandle or KeyNotificationFunction is NULL.\r
 \r
 **/\r
 EFI_STATUS\r
@@ -1088,9 +1097,8 @@ USBKeyboardRegisterKeyNotify (
   @param  NotificationHandle        The handle of the notification function being unregistered.\r
 \r
   @retval EFI_SUCCESS              The notification function was unregistered successfully.\r
-  @retval EFI_INVALID_PARAMETER    The NotificationHandle is invalid or opening gSimpleTextInExNotifyGuid\r
-                                   on NotificationHandle fails.\r
-  @retval EFI_NOT_FOUND            Can not find the matching entry in database.\r
+  @retval EFI_INVALID_PARAMETER    The NotificationHandle is invalid\r
+  @retval EFI_NOT_FOUND            Cannot find the matching entry in database.\r
 \r
 **/\r
 EFI_STATUS\r