]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Bus/Usb/UsbKbDxe/EfiKey.h
Code Scrub for UsbKbDxe module.
[mirror_edk2.git] / MdeModulePkg / Bus / Usb / UsbKbDxe / EfiKey.h
index 8edd34d94cc45744f1d997962430af48bc005832..506a08ce24f699caba72afabb3fdbd50568a754a 100644 (file)
@@ -1,6 +1,5 @@
 /** @file\r
-\r
-    Header file for USB Keyboard Driver's Data Structures.\r
+  Header file for USB Keyboard Driver's Data Structures.\r
 \r
 Copyright (c) 2004 - 2008, Intel Corporation\r
 All rights reserved. This program and the accompanying materials\r
@@ -37,6 +36,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #include <Library/PcdLib.h>\r
 #include <Library/UefiUsbLib.h>\r
 #include <Library/BaseLib.h>\r
+#include <Library/UefiUsbLib.h>\r
 \r
 #include <IndustryStandard/Usb.h>\r
 \r
@@ -59,9 +59,9 @@ typedef struct {
 } USB_KEY;\r
 \r
 typedef struct {\r
-  USB_KEY buffer[MAX_KEY_ALLOWED + 1];\r
-  UINT8   bHead;\r
-  UINT8   bTail;\r
+  USB_KEY Buffer[MAX_KEY_ALLOWED + 1];\r
+  UINT8   BufferHead;\r
+  UINT8   BufferTail;\r
 } USB_KB_BUFFER;\r
 \r
 #define USB_KB_DEV_SIGNATURE  EFI_SIGNATURE_32 ('u', 'k', 'b', 'd')\r
@@ -95,57 +95,60 @@ typedef struct {
 \r
 #define USB_NS_KEY_FORM_FROM_LINK(a)  CR (a, USB_NS_KEY, Link, USB_NS_KEY_SIGNATURE)\r
 \r
+///\r
+/// Structure to describe USB keyboard device\r
+///\r
 typedef struct {\r
-  UINTN                          Signature;\r
-  EFI_DEVICE_PATH_PROTOCOL       *DevicePath;\r
-  EFI_EVENT                      DelayedRecoveryEvent;\r
-  EFI_SIMPLE_TEXT_INPUT_PROTOCOL SimpleInput;\r
+  UINTN                             Signature;\r
+  EFI_DEVICE_PATH_PROTOCOL          *DevicePath;\r
+  EFI_EVENT                         DelayedRecoveryEvent;\r
+  EFI_SIMPLE_TEXT_INPUT_PROTOCOL    SimpleInput;\r
   EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL SimpleInputEx;\r
-  EFI_USB_IO_PROTOCOL           *UsbIo;\r
+  EFI_USB_IO_PROTOCOL               *UsbIo;\r
 \r
-  EFI_USB_INTERFACE_DESCRIPTOR  InterfaceDescriptor;\r
-  EFI_USB_ENDPOINT_DESCRIPTOR   IntEndpointDescriptor;\r
+  EFI_USB_INTERFACE_DESCRIPTOR      InterfaceDescriptor;\r
+  EFI_USB_ENDPOINT_DESCRIPTOR       IntEndpointDescriptor;\r
 \r
-  USB_KB_BUFFER                 KeyboardBuffer;\r
-  UINT8                         CtrlOn;\r
-  UINT8                         AltOn;\r
-  UINT8                         ShiftOn;\r
-  UINT8                         NumLockOn;\r
-  UINT8                         CapsOn;\r
-  UINT8                         ScrollOn;\r
-  UINT8                         LastKeyCodeArray[8];\r
-  UINT8                         CurKeyChar;\r
+  USB_KB_BUFFER                     KeyboardBuffer;\r
+  UINT8                             CtrlOn;\r
+  UINT8                             AltOn;\r
+  UINT8                             ShiftOn;\r
+  UINT8                             NumLockOn;\r
+  UINT8                             CapsOn;\r
+  UINT8                             ScrollOn;\r
+  UINT8                             LastKeyCodeArray[8];\r
+  UINT8                             CurKeyChar;\r
 \r
-  UINT8                         RepeatKey;\r
-  EFI_EVENT                     RepeatTimer;\r
+  UINT8                             RepeatKey;\r
+  EFI_EVENT                         RepeatTimer;\r
 \r
-  EFI_UNICODE_STRING_TABLE      *ControllerNameTable;\r
+  EFI_UNICODE_STRING_TABLE          *ControllerNameTable;\r
   \r
-  UINT8                         LeftCtrlOn;\r
-  UINT8                         LeftAltOn;\r
-  UINT8                         LeftShiftOn;\r
-  UINT8                         LeftLogoOn;\r
-  UINT8                         RightCtrlOn;\r
-  UINT8                         RightAltOn;\r
-  UINT8                         RightShiftOn;\r
-  UINT8                         RightLogoOn;  \r
-  UINT8                         MenuKeyOn;\r
-  UINT8                         SysReqOn;\r
-  UINT8                         AltGrOn;\r
-\r
-  EFI_KEY_STATE                 KeyState;\r
+  UINT8                             LeftCtrlOn;\r
+  UINT8                             LeftAltOn;\r
+  UINT8                             LeftShiftOn;\r
+  UINT8                             LeftLogoOn;\r
+  UINT8                             RightCtrlOn;\r
+  UINT8                             RightAltOn;\r
+  UINT8                             RightShiftOn;\r
+  UINT8                             RightLogoOn;  \r
+  UINT8                             MenuKeyOn;\r
+  UINT8                             SysReqOn;\r
+  UINT8                             AltGrOn;\r
+\r
+  EFI_KEY_STATE                     KeyState;\r
   //\r
   // Notification function list\r
   //\r
-  LIST_ENTRY                    NotifyList;\r
+  LIST_ENTRY                        NotifyList;\r
 \r
   //\r
   // Non-spacing key list\r
   //\r
-  LIST_ENTRY                    NsKeyList;\r
-  USB_NS_KEY                    *CurrentNsKey;\r
-  EFI_KEY_DESCRIPTOR            *KeyConvertionTable;\r
-  EFI_EVENT                     KeyboardLayoutEvent;\r
+  LIST_ENTRY                        NsKeyList;\r
+  USB_NS_KEY                        *CurrentNsKey;\r
+  EFI_KEY_DESCRIPTOR                *KeyConvertionTable;\r
+  EFI_EVENT                         KeyboardLayoutEvent;\r
 } USB_KB_DEV;\r
 \r
 //\r
@@ -154,27 +157,8 @@ typedef struct {
 extern EFI_DRIVER_BINDING_PROTOCOL   gUsbKeyboardDriverBinding;\r
 extern EFI_COMPONENT_NAME_PROTOCOL   gUsbKeyboardComponentName;\r
 extern EFI_COMPONENT_NAME2_PROTOCOL  gUsbKeyboardComponentName2;\r
-extern EFI_GUID                      gEfiUsbKeyboardDriverGuid;\r
 extern EFI_GUID                      gSimpleTextInExNotifyGuid;\r
 \r
-/**\r
-  Report Status Code in Usb Keyboard Driver.\r
-\r
-  @param  DevicePath            Use this to get Device Path.\r
-  @param  CodeType              Status Code Type.\r
-  @param  CodeValue             Status Code Value.\r
-\r
-  @return None.\r
-\r
-**/\r
-VOID\r
-EFIAPI\r
-KbdReportStatusCode (\r
-  IN EFI_DEVICE_PATH_PROTOCOL  *DevicePath,\r
-  IN EFI_STATUS_CODE_TYPE      CodeType,\r
-  IN EFI_STATUS_CODE_VALUE     Value\r
-  );\r
-\r
 #define USB_KB_DEV_FROM_THIS(a) \\r
     CR(a, USB_KB_DEV, SimpleInput, USB_KB_DEV_SIGNATURE)\r
 #define TEXT_INPUT_EX_USB_KB_DEV_FROM_THIS(a) \\r
@@ -206,6 +190,117 @@ typedef struct {
   UINT8 Resrvd : 5;\r
 } LED_MAP;\r
 \r
+//\r
+// Functions of Driver Binding Protocol\r
+//\r
+/**\r
+  Check whether USB keyboard driver supports this device.\r
+\r
+  @param  This                   The USB keyboard driver binding protocol.\r
+  @param  Controller             The controller handle to check.\r
+  @param  RemainingDevicePath    The remaining device path.\r
+\r
+  @retval EFI_SUCCESS            The driver supports this controller.\r
+  @retval other                  This device isn't supported.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+USBKeyboardDriverBindingSupported (\r
+  IN EFI_DRIVER_BINDING_PROTOCOL    *This,\r
+  IN EFI_HANDLE                     Controller,\r
+  IN EFI_DEVICE_PATH_PROTOCOL       *RemainingDevicePath\r
+  );\r
+\r
+/**\r
+  Start running driver on the controller.\r
+\r
+  @param  This                   The USB keyboard driver binding instance.\r
+  @param  Controller             Handle of device to bind driver to.\r
+  @param  RemainingDevicePath    Optional parameter use to pick a specific child\r
+                                 device to start.\r
+\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
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+USBKeyboardDriverBindingStart (\r
+  IN EFI_DRIVER_BINDING_PROTOCOL    *This,\r
+  IN EFI_HANDLE                     Controller,\r
+  IN EFI_DEVICE_PATH_PROTOCOL       *RemainingDevicePath\r
+  );\r
+\r
+/**\r
+  Stop handling the controller by this USB keyboard 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_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
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+USBKeyboardDriverBindingStop (\r
+  IN  EFI_DRIVER_BINDING_PROTOCOL    *This,\r
+  IN  EFI_HANDLE                     Controller,\r
+  IN  UINTN                          NumberOfChildren,\r
+  IN  EFI_HANDLE                     *ChildHandleBuffer\r
+  );\r
+\r
+//\r
+// Functions of Simple Text Input Protocol\r
+//\r
+/**\r
+  Reset USB Keyboard.\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
+\r
+  @retval EFI_SUCCESS           Keyboard is reset successfully.\r
+  @retval EFI_DEVICE_ERROR      Failed to reset keyboard.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+USBKeyboardReset (\r
+  IN  EFI_SIMPLE_TEXT_INPUT_PROTOCOL   *This,\r
+  IN  BOOLEAN                          ExtendedVerification\r
+  );\r
+\r
+/**\r
+  Implements EFI_SIMPLE_TEXT_INPUT_PROTOCOL.ReadKeyStroke() function.\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
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+USBKeyboardReadKeyStroke (\r
+  IN  EFI_SIMPLE_TEXT_INPUT_PROTOCOL   *This,\r
+  OUT EFI_INPUT_KEY                    *Key\r
+  );\r
+\r
 //\r
 // Simple Text Input Ex protocol functions\r
 //\r
@@ -309,5 +404,68 @@ USBKeyboardUnregisterKeyNotify (
   IN EFI_HANDLE                         NotificationHandle\r
   );\r
 \r
+/**\r
+  Handler function for WaitForKey event.\r
+\r
+  @param  Event        Event to be signaled when a key is pressed.\r
+  @param  Context      Points to USB_KB_DEV instance.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+USBKeyboardWaitForKey (\r
+  IN  EFI_EVENT               Event,\r
+  IN  VOID                    *Context\r
+  );\r
+\r
+/**\r
+  Free keyboard notify list.\r
+\r
+  @param  ListHead                The list head.\r
+\r
+  @retval EFI_SUCCESS             Free the notify list successfully.\r
+  @retval EFI_INVALID_PARAMETER   ListHead is invalid.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+KbdFreeNotifyList (\r
+  IN OUT LIST_ENTRY           *ListHead\r
+  );\r
+\r
+/**\r
+  Check whether there is key pending.\r
+\r
+  @param  UsbKeyboardDevice    The USB_KB_DEV instance.\r
+\r
+  @retval EFI_SUCCESS          There is pending key to read.\r
+  @retval EFI_NOT_READY        No pending key to read.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+USBKeyboardCheckForKey (\r
+  IN  USB_KB_DEV    *UsbKeyboardDevice\r
+  );\r
+\r
+/**\r
+  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
+\r
+  @retval TRUE              Key pressed matches a registered key.\r
+  @retval FLASE             Match failed.\r
+\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+IsKeyRegistered (\r
+  IN EFI_KEY_DATA  *RegsiteredData,\r
+  IN EFI_KEY_DATA  *InputData\r
+  );\r
+\r
 #endif\r
 \r