SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
+\r
#ifndef _EFI_USB_KB_H_\r
#define _EFI_USB_KB_H_\r
\r
-\r
#include <Uefi.h>\r
\r
#include <Protocol/SimpleTextIn.h>\r
\r
#include <IndustryStandard/Usb.h>\r
\r
-#define KEYBOARD_TIMER_INTERVAL 200000 // 0.02s\r
+#define KEYBOARD_TIMER_INTERVAL 200000 // 0.02s\r
\r
-#define MAX_KEY_ALLOWED 32\r
+#define MAX_KEY_ALLOWED 32\r
\r
-#define HZ 1000 * 1000 * 10\r
-#define USBKBD_REPEAT_DELAY ((HZ) / 2)\r
-#define USBKBD_REPEAT_RATE ((HZ) / 50)\r
+#define HZ 1000 * 1000 * 10\r
+#define USBKBD_REPEAT_DELAY ((HZ) / 2)\r
+#define USBKBD_REPEAT_RATE ((HZ) / 50)\r
\r
-#define CLASS_HID 3\r
-#define SUBCLASS_BOOT 1\r
-#define PROTOCOL_KEYBOARD 1\r
+#define CLASS_HID 3\r
+#define SUBCLASS_BOOT 1\r
+#define PROTOCOL_KEYBOARD 1\r
\r
-#define BOOT_PROTOCOL 0\r
-#define REPORT_PROTOCOL 1\r
+#define BOOT_PROTOCOL 0\r
+#define REPORT_PROTOCOL 1\r
\r
typedef struct {\r
- BOOLEAN Down;\r
- UINT8 KeyCode;\r
+ BOOLEAN Down;\r
+ UINT8 KeyCode;\r
} USB_KEY;\r
\r
typedef struct {\r
- VOID *Buffer[MAX_KEY_ALLOWED + 1];\r
- UINTN Head;\r
- UINTN Tail;\r
- UINTN ItemSize;\r
+ VOID *Buffer[MAX_KEY_ALLOWED + 1];\r
+ UINTN Head;\r
+ UINTN Tail;\r
+ UINTN ItemSize;\r
} USB_SIMPLE_QUEUE;\r
\r
-#define USB_KB_DEV_SIGNATURE SIGNATURE_32 ('u', 'k', 'b', 'd')\r
-#define USB_KB_CONSOLE_IN_EX_NOTIFY_SIGNATURE SIGNATURE_32 ('u', 'k', 'b', 'x')\r
+#define USB_KB_DEV_SIGNATURE SIGNATURE_32 ('u', 'k', 'b', 'd')\r
+#define USB_KB_CONSOLE_IN_EX_NOTIFY_SIGNATURE SIGNATURE_32 ('u', 'k', 'b', 'x')\r
\r
typedef struct _KEYBOARD_CONSOLE_IN_EX_NOTIFY {\r
- UINTN Signature;\r
- EFI_KEY_DATA KeyData;\r
- EFI_KEY_NOTIFY_FUNCTION KeyNotificationFn;\r
- LIST_ENTRY NotifyEntry;\r
+ UINTN Signature;\r
+ EFI_KEY_DATA KeyData;\r
+ EFI_KEY_NOTIFY_FUNCTION KeyNotificationFn;\r
+ LIST_ENTRY NotifyEntry;\r
} KEYBOARD_CONSOLE_IN_EX_NOTIFY;\r
\r
#define USB_NS_KEY_SIGNATURE SIGNATURE_32 ('u', 'n', 's', 'k')\r
\r
typedef struct {\r
- UINTN Signature;\r
- LIST_ENTRY Link;\r
+ UINTN Signature;\r
+ LIST_ENTRY Link;\r
\r
//\r
// The number of EFI_NS_KEY_MODIFIER children definitions\r
//\r
- UINTN KeyCount;\r
+ UINTN KeyCount;\r
\r
//\r
// NsKey[0] : Non-spacing key\r
// NsKey[1] ~ NsKey[KeyCount] : Physical keys\r
//\r
- EFI_KEY_DESCRIPTOR *NsKey;\r
+ EFI_KEY_DESCRIPTOR *NsKey;\r
} USB_NS_KEY;\r
\r
#define USB_NS_KEY_FORM_FROM_LINK(a) CR (a, USB_NS_KEY, Link, USB_NS_KEY_SIGNATURE)\r
/// Structure to describe USB keyboard device\r
///\r
typedef struct {\r
- UINTN Signature;\r
- EFI_HANDLE ControllerHandle;\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
-\r
- EFI_USB_INTERFACE_DESCRIPTOR InterfaceDescriptor;\r
- EFI_USB_ENDPOINT_DESCRIPTOR IntEndpointDescriptor;\r
-\r
- USB_SIMPLE_QUEUE UsbKeyQueue;\r
- USB_SIMPLE_QUEUE EfiKeyQueue;\r
- USB_SIMPLE_QUEUE EfiKeyQueueForNotify;\r
- BOOLEAN CtrlOn;\r
- BOOLEAN AltOn;\r
- BOOLEAN ShiftOn;\r
- BOOLEAN NumLockOn;\r
- BOOLEAN CapsOn;\r
- BOOLEAN ScrollOn;\r
- UINT8 LastKeyCodeArray[8];\r
- UINT8 CurKeyCode;\r
-\r
- EFI_EVENT TimerEvent;\r
-\r
- UINT8 RepeatKey;\r
- EFI_EVENT RepeatTimer;\r
-\r
- EFI_UNICODE_STRING_TABLE *ControllerNameTable;\r
-\r
- BOOLEAN LeftCtrlOn;\r
- BOOLEAN LeftAltOn;\r
- BOOLEAN LeftShiftOn;\r
- BOOLEAN LeftLogoOn;\r
- BOOLEAN RightCtrlOn;\r
- BOOLEAN RightAltOn;\r
- BOOLEAN RightShiftOn;\r
- BOOLEAN RightLogoOn;\r
- BOOLEAN MenuKeyOn;\r
- BOOLEAN SysReqOn;\r
- BOOLEAN AltGrOn;\r
-\r
- BOOLEAN IsSupportPartialKey;\r
-\r
- EFI_KEY_STATE KeyState;\r
+ UINTN Signature;\r
+ EFI_HANDLE ControllerHandle;\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
+\r
+ EFI_USB_INTERFACE_DESCRIPTOR InterfaceDescriptor;\r
+ EFI_USB_ENDPOINT_DESCRIPTOR IntEndpointDescriptor;\r
+\r
+ USB_SIMPLE_QUEUE UsbKeyQueue;\r
+ USB_SIMPLE_QUEUE EfiKeyQueue;\r
+ USB_SIMPLE_QUEUE EfiKeyQueueForNotify;\r
+ BOOLEAN CtrlOn;\r
+ BOOLEAN AltOn;\r
+ BOOLEAN ShiftOn;\r
+ BOOLEAN NumLockOn;\r
+ BOOLEAN CapsOn;\r
+ BOOLEAN ScrollOn;\r
+ UINT8 LastKeyCodeArray[8];\r
+ UINT8 CurKeyCode;\r
+\r
+ EFI_EVENT TimerEvent;\r
+\r
+ UINT8 RepeatKey;\r
+ EFI_EVENT RepeatTimer;\r
+\r
+ EFI_UNICODE_STRING_TABLE *ControllerNameTable;\r
+\r
+ BOOLEAN LeftCtrlOn;\r
+ BOOLEAN LeftAltOn;\r
+ BOOLEAN LeftShiftOn;\r
+ BOOLEAN LeftLogoOn;\r
+ BOOLEAN RightCtrlOn;\r
+ BOOLEAN RightAltOn;\r
+ BOOLEAN RightShiftOn;\r
+ BOOLEAN RightLogoOn;\r
+ BOOLEAN MenuKeyOn;\r
+ BOOLEAN SysReqOn;\r
+ BOOLEAN AltGrOn;\r
+\r
+ BOOLEAN IsSupportPartialKey;\r
+\r
+ EFI_KEY_STATE KeyState;\r
//\r
// Notification function list\r
//\r
- LIST_ENTRY NotifyList;\r
- EFI_EVENT KeyNotifyProcessEvent;\r
+ LIST_ENTRY NotifyList;\r
+ EFI_EVENT KeyNotifyProcessEvent;\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
// So the number of valid non-modifier USB keycodes is 0x62, and the number of\r
// valid keycodes is 0x6A.\r
//\r
-#define NUMBER_OF_VALID_NON_MODIFIER_USB_KEYCODE 0x62\r
-#define NUMBER_OF_VALID_USB_KEYCODE 0x6A\r
+#define NUMBER_OF_VALID_NON_MODIFIER_USB_KEYCODE 0x62\r
+#define NUMBER_OF_VALID_USB_KEYCODE 0x6A\r
//\r
// 0x0 to 0x3 are reserved for typical keyboard status or keyboard errors.\r
//\r
-#define USBKBD_VALID_KEYCODE(Key) ((UINT8) (Key) > 3)\r
+#define USBKBD_VALID_KEYCODE(Key) ((UINT8) (Key) > 3)\r
\r
typedef struct {\r
- UINT8 NumLock : 1;\r
- UINT8 CapsLock : 1;\r
- UINT8 ScrollLock : 1;\r
- UINT8 Resrvd : 5;\r
+ UINT8 NumLock : 1;\r
+ UINT8 CapsLock : 1;\r
+ UINT8 ScrollLock : 1;\r
+ UINT8 Resrvd : 5;\r
} LED_MAP;\r
\r
//\r
// Functions of Driver Binding Protocol\r
//\r
+\r
/**\r
Check whether USB keyboard driver supports this device.\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
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE Controller,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
);\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
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE Controller,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
);\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
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE Controller,\r
+ IN UINTN NumberOfChildren,\r
+ IN EFI_HANDLE *ChildHandleBuffer\r
);\r
\r
//\r
// EFI Component Name Functions\r
//\r
+\r
/**\r
Retrieves a Unicode string that is the user readable name of the driver.\r
\r
EFI_STATUS\r
EFIAPI\r
UsbKeyboardComponentNameGetControllerName (\r
- IN EFI_COMPONENT_NAME_PROTOCOL *This,\r
- IN EFI_HANDLE ControllerHandle,\r
- IN EFI_HANDLE ChildHandle OPTIONAL,\r
- IN CHAR8 *Language,\r
- OUT CHAR16 **ControllerName\r
+ IN EFI_COMPONENT_NAME_PROTOCOL *This,\r
+ IN EFI_HANDLE ControllerHandle,\r
+ IN EFI_HANDLE ChildHandle OPTIONAL,\r
+ IN CHAR8 *Language,\r
+ OUT CHAR16 **ControllerName\r
);\r
\r
//\r
// Functions of Simple Text Input Protocol\r
//\r
+\r
/**\r
Reset the input device and optionally run diagnostics\r
\r
EFI_STATUS\r
EFIAPI\r
USBKeyboardReset (\r
- IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This,\r
- IN BOOLEAN ExtendedVerification\r
+ IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This,\r
+ IN BOOLEAN ExtendedVerification\r
);\r
\r
/**\r
EFI_STATUS\r
EFIAPI\r
USBKeyboardReadKeyStroke (\r
- IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This,\r
- OUT EFI_INPUT_KEY *Key\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
+\r
/**\r
Resets the input device hardware.\r
\r
EFI_STATUS\r
EFIAPI\r
USBKeyboardReadKeyStrokeEx (\r
- IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,\r
- OUT EFI_KEY_DATA *KeyData\r
+ IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,\r
+ OUT EFI_KEY_DATA *KeyData\r
);\r
\r
/**\r
VOID\r
EFIAPI\r
USBKeyboardWaitForKey (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
);\r
\r
/**\r
**/\r
EFI_STATUS\r
KbdFreeNotifyList (\r
- IN OUT LIST_ENTRY *NotifyList\r
+ IN OUT LIST_ENTRY *NotifyList\r
);\r
\r
/**\r
VOID\r
EFIAPI\r
USBKeyboardTimerHandler (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
);\r
\r
/**\r
VOID\r
EFIAPI\r
KeyNotifyProcessHandler (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
);\r
\r
#endif\r
-\r