+//\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