16#include <Protocol/SimpleTextIn.h>
17#include <Protocol/SimpleTextInEx.h>
18#include <Protocol/UsbIo.h>
19#include <Protocol/DevicePath.h>
23#include <Library/DebugLib.h>
24#include <Library/ReportStatusCodeLib.h>
25#include <Library/BaseMemoryLib.h>
26#include <Library/UefiRuntimeServicesTableLib.h>
27#include <Library/UefiDriverEntryPoint.h>
28#include <Library/UefiBootServicesTableLib.h>
29#include <Library/UefiLib.h>
30#include <Library/MemoryAllocationLib.h>
31#include <Library/PcdLib.h>
32#include <Library/UefiUsbLib.h>
34#include <IndustryStandard/Usb.h>
36#define KEYBOARD_TIMER_INTERVAL 200000
38#define MAX_KEY_ALLOWED 32
40#define HZ 1000 * 1000 * 10
41#define USBKBD_REPEAT_DELAY ((HZ) / 2)
42#define USBKBD_REPEAT_RATE ((HZ) / 50)
45#define SUBCLASS_BOOT 1
46#define PROTOCOL_KEYBOARD 1
48#define BOOT_PROTOCOL 0
49#define REPORT_PROTOCOL 1
63#define USB_KB_DEV_SIGNATURE SIGNATURE_32 ('u', 'k', 'b', 'd')
64#define USB_KB_CONSOLE_IN_EX_NOTIFY_SIGNATURE SIGNATURE_32 ('u', 'k', 'b', 'x')
73#define USB_NS_KEY_SIGNATURE SIGNATURE_32 ('u', 'n', 's', 'k')
91#define USB_NS_KEY_FORM_FROM_LINK(a) CR (a, USB_NS_KEY, Link, USB_NS_KEY_SIGNATURE)
117 UINT8 LastKeyCodeArray[8];
171#define USB_KB_DEV_FROM_THIS(a) \
172 CR(a, USB_KB_DEV, SimpleInput, USB_KB_DEV_SIGNATURE)
173#define TEXT_INPUT_EX_USB_KB_DEV_FROM_THIS(a) \
174 CR(a, USB_KB_DEV, SimpleInputEx, USB_KB_DEV_SIGNATURE)
184#define NUMBER_OF_VALID_NON_MODIFIER_USB_KEYCODE 0x62
185#define NUMBER_OF_VALID_USB_KEYCODE 0x6A
189#define USBKBD_VALID_KEYCODE(Key) ((UINT8) (Key) > 3)
216 IN EFI_DRIVER_BINDING_PROTOCOL *This,
217 IN EFI_HANDLE Controller,
218 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
241 IN EFI_DRIVER_BINDING_PROTOCOL *This,
242 IN EFI_HANDLE Controller,
243 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
264 IN EFI_DRIVER_BINDING_PROTOCOL *This,
265 IN EFI_HANDLE Controller,
266 IN UINTN NumberOfChildren,
267 IN EFI_HANDLE *ChildHandleBuffer
311 IN EFI_COMPONENT_NAME_PROTOCOL *This,
313 OUT CHAR16 **DriverName
377 IN EFI_COMPONENT_NAME_PROTOCOL *This,
378 IN EFI_HANDLE ControllerHandle,
379 IN EFI_HANDLE ChildHandle OPTIONAL,
381 OUT CHAR16 **ControllerName
406 IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This,
407 IN BOOLEAN ExtendedVerification
426 IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This,
427 OUT EFI_INPUT_KEY *Key
459 IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,
460 IN BOOLEAN ExtendedVerification
480 IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,
481 OUT EFI_KEY_DATA *KeyData
501 IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,
502 IN EFI_KEY_TOGGLE_STATE *KeyToggleState
527 IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,
528 IN EFI_KEY_DATA *KeyData,
529 IN EFI_KEY_NOTIFY_FUNCTION KeyNotificationFunction,
530 OUT VOID **NotifyHandle
547 IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,
548 IN VOID *NotificationHandle
577 IN OUT LIST_ENTRY *NotifyList
592 IN EFI_KEY_DATA *RegsiteredData,
593 IN EFI_KEY_DATA *InputData
EFI_DRIVER_BINDING_PROTOCOL gUsbKeyboardDriverBinding
EFI_STATUS EFIAPI USBKeyboardDriverBindingSupported(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE Controller, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath)
VOID EFIAPI KeyNotifyProcessHandler(IN EFI_EVENT Event, IN VOID *Context)
EFI_STATUS EFIAPI USBKeyboardUnregisterKeyNotify(IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, IN VOID *NotificationHandle)
EFI_STATUS EFIAPI USBKeyboardResetEx(IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, IN BOOLEAN ExtendedVerification)
struct _KEYBOARD_CONSOLE_IN_EX_NOTIFY KEYBOARD_CONSOLE_IN_EX_NOTIFY
VOID EFIAPI USBKeyboardExitBootServices(IN EFI_EVENT Event, IN VOID *Context)
EFI_STATUS EFIAPI USBKeyboardRegisterKeyNotify(IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, IN EFI_KEY_DATA *KeyData, IN EFI_KEY_NOTIFY_FUNCTION KeyNotificationFunction, OUT VOID **NotifyHandle)
EFI_STATUS EFIAPI UsbKeyboardComponentNameGetControllerName(IN EFI_COMPONENT_NAME_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_HANDLE ChildHandle OPTIONAL, IN CHAR8 *Language, OUT CHAR16 **ControllerName)
EFI_STATUS EFIAPI USBKeyboardDriverBindingStop(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE Controller, IN UINTN NumberOfChildren, IN EFI_HANDLE *ChildHandleBuffer)
VOID EFIAPI USBKeyboardWaitForKey(IN EFI_EVENT Event, IN VOID *Context)
EFI_STATUS EFIAPI USBKeyboardSetState(IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, IN EFI_KEY_TOGGLE_STATE *KeyToggleState)
EFI_COMPONENT_NAME2_PROTOCOL gUsbKeyboardComponentName2
EFI_COMPONENT_NAME_PROTOCOL gUsbKeyboardComponentName
VOID EFIAPI USBKeyboardTimerHandler(IN EFI_EVENT Event, IN VOID *Context)
EFI_STATUS EFIAPI USBKeyboardDriverBindingStart(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE Controller, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath)
EFI_STATUS KbdFreeNotifyList(IN OUT LIST_ENTRY *NotifyList)
EFI_STATUS EFIAPI USBKeyboardReset(IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This, IN BOOLEAN ExtendedVerification)
EFI_STATUS EFIAPI UsbKeyboardComponentNameGetDriverName(IN EFI_COMPONENT_NAME_PROTOCOL *This, IN CHAR8 *Language, OUT CHAR16 **DriverName)
EFI_STATUS EFIAPI USBKeyboardReadKeyStrokeEx(IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, OUT EFI_KEY_DATA *KeyData)
EFI_STATUS EFIAPI USBKeyboardReadKeyStroke(IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This, OUT EFI_INPUT_KEY *Key)
BOOLEAN IsKeyRegistered(IN EFI_KEY_DATA *RegsiteredData, IN EFI_KEY_DATA *InputData)
OC_TYPING_BUFFER_ENTRY Buffer[OC_TYPING_BUFFER_SIZE]
EFI_KEY_NOTIFY_FUNCTION KeyNotificationFn
EFI_EVENT KeyNotifyProcessEvent
EFI_HANDLE ControllerHandle
EFI_USB_ENDPOINT_DESCRIPTOR IntEndpointDescriptor
EFI_EVENT KeyMapInstallNotifyEvent
USB_NS_KEY * CurrentNsKey
EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL SimpleInputEx
USB_SIMPLE_QUEUE UsbKeyQueue
EFI_USB_IO_PROTOCOL * UsbIo
EFI_UNICODE_STRING_TABLE * ControllerNameTable
EFI_EVENT ExitBootServicesEvent
EFI_KEY_DESCRIPTOR * KeyConvertionTable
APPLE_KEY_MAP_DATABASE_PROTOCOL * KeyMapDb
USB_SIMPLE_QUEUE EfiKeyQueue
EFI_SIMPLE_TEXT_INPUT_PROTOCOL SimpleInput
USB_SIMPLE_QUEUE EfiKeyQueueForNotify
BOOLEAN IsSupportPartialKey
VOID * KeyMapInstallRegistration
EFI_DEVICE_PATH_PROTOCOL * DevicePath
EFI_EVENT DelayedRecoveryEvent
EFI_USB_INTERFACE_DESCRIPTOR InterfaceDescriptor
EFI_KEY_DESCRIPTOR * NsKey