//\r
// Driver Private Data\r
//\r
-#define KEYBOARD_CONSOLE_IN_DEV_SIGNATURE SIGNATURE_32 ('k', 'k', 'e', 'y')\r
-#define KEYBOARD_CONSOLE_IN_EX_NOTIFY_SIGNATURE SIGNATURE_32 ('k', 'c', 'e', 'n')\r
+#define KEYBOARD_CONSOLE_IN_DEV_SIGNATURE SIGNATURE_32 ('k', 'k', 'e', 'y')\r
+#define KEYBOARD_CONSOLE_IN_EX_NOTIFY_SIGNATURE SIGNATURE_32 ('k', 'c', 'e', 'n')\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 KEYBOARD_SCAN_CODE_MAX_COUNT 32\r
typedef struct {\r
- UINT8 Buffer[KEYBOARD_SCAN_CODE_MAX_COUNT];\r
- UINTN Head;\r
- UINTN Tail;\r
+ UINT8 Buffer[KEYBOARD_SCAN_CODE_MAX_COUNT];\r
+ UINTN Head;\r
+ UINTN Tail;\r
} SCAN_CODE_QUEUE;\r
\r
-#define KEYBOARD_EFI_KEY_MAX_COUNT 256\r
+#define KEYBOARD_EFI_KEY_MAX_COUNT 256\r
typedef struct {\r
- EFI_KEY_DATA Buffer[KEYBOARD_EFI_KEY_MAX_COUNT];\r
- UINTN Head;\r
- UINTN Tail;\r
+ EFI_KEY_DATA Buffer[KEYBOARD_EFI_KEY_MAX_COUNT];\r
+ UINTN Head;\r
+ UINTN Tail;\r
} EFI_KEY_QUEUE;\r
\r
typedef struct {\r
- UINTN Signature;\r
-\r
- EFI_HANDLE Handle;\r
- EFI_SIMPLE_TEXT_INPUT_PROTOCOL ConIn;\r
- EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL ConInEx;\r
-\r
- EFI_EVENT TimerEvent;\r
-\r
- UINT32 DataRegisterAddress;\r
- UINT32 StatusRegisterAddress;\r
- UINT32 CommandRegisterAddress;\r
-\r
- BOOLEAN LeftCtrl;\r
- BOOLEAN RightCtrl;\r
- BOOLEAN LeftAlt;\r
- BOOLEAN RightAlt;\r
- BOOLEAN LeftShift;\r
- BOOLEAN RightShift;\r
- BOOLEAN LeftLogo;\r
- BOOLEAN RightLogo;\r
- BOOLEAN Menu;\r
- BOOLEAN SysReq;\r
-\r
- BOOLEAN CapsLock;\r
- BOOLEAN NumLock;\r
- BOOLEAN ScrollLock;\r
-\r
- BOOLEAN IsSupportPartialKey;\r
+ UINTN Signature;\r
+\r
+ EFI_HANDLE Handle;\r
+ EFI_SIMPLE_TEXT_INPUT_PROTOCOL ConIn;\r
+ EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL ConInEx;\r
+\r
+ EFI_EVENT TimerEvent;\r
+\r
+ UINT32 DataRegisterAddress;\r
+ UINT32 StatusRegisterAddress;\r
+ UINT32 CommandRegisterAddress;\r
+\r
+ BOOLEAN LeftCtrl;\r
+ BOOLEAN RightCtrl;\r
+ BOOLEAN LeftAlt;\r
+ BOOLEAN RightAlt;\r
+ BOOLEAN LeftShift;\r
+ BOOLEAN RightShift;\r
+ BOOLEAN LeftLogo;\r
+ BOOLEAN RightLogo;\r
+ BOOLEAN Menu;\r
+ BOOLEAN SysReq;\r
+\r
+ BOOLEAN CapsLock;\r
+ BOOLEAN NumLock;\r
+ BOOLEAN ScrollLock;\r
+\r
+ BOOLEAN IsSupportPartialKey;\r
//\r
// Queue storing key scancodes\r
//\r
- SCAN_CODE_QUEUE ScancodeQueue;\r
- EFI_KEY_QUEUE EfiKeyQueue;\r
- EFI_KEY_QUEUE EfiKeyQueueForNotify;\r
+ SCAN_CODE_QUEUE ScancodeQueue;\r
+ EFI_KEY_QUEUE EfiKeyQueue;\r
+ EFI_KEY_QUEUE EfiKeyQueueForNotify;\r
\r
//\r
// Error state\r
//\r
- BOOLEAN KeyboardErr;\r
+ BOOLEAN KeyboardErr;\r
\r
- EFI_UNICODE_STRING_TABLE *ControllerNameTable;\r
+ EFI_UNICODE_STRING_TABLE *ControllerNameTable;\r
\r
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
+ EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
//\r
// Notification Function List\r
//\r
- LIST_ENTRY NotifyList;\r
- EFI_EVENT KeyNotifyProcessEvent;\r
+ LIST_ENTRY NotifyList;\r
+ EFI_EVENT KeyNotifyProcessEvent;\r
} KEYBOARD_CONSOLE_IN_DEV;\r
\r
#define KEYBOARD_CONSOLE_IN_DEV_FROM_THIS(a) CR (a, KEYBOARD_CONSOLE_IN_DEV, ConIn, KEYBOARD_CONSOLE_IN_DEV_SIGNATURE)\r
KEYBOARD_CONSOLE_IN_DEV_SIGNATURE \\r
)\r
\r
-#define TABLE_END 0x0\r
+#define TABLE_END 0x0\r
\r
//\r
// Driver entry point\r
//\r
+\r
/**\r
The user Entry Point for module Ps2Keyboard. The user code starts with this function.\r
\r
EFI_STATUS\r
EFIAPI\r
InstallPs2KeyboardDriver (\r
- IN EFI_HANDLE ImageHandle,\r
- IN EFI_SYSTEM_TABLE *SystemTable\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_SYSTEM_TABLE *SystemTable\r
);\r
\r
#define KEYBOARD_8042_DATA_REGISTER 0x60\r
#define KEYBOARD_8042_STATUS_REGISTER 0x64\r
#define KEYBOARD_8042_COMMAND_REGISTER 0x64\r
\r
-#define KEYBOARD_KBEN 0xF4\r
-#define KEYBOARD_CMDECHO_ACK 0xFA\r
-\r
-#define KEYBOARD_MAX_TRY 256 // 256\r
-#define KEYBOARD_TIMEOUT 65536 // 0.07s\r
-#define KEYBOARD_WAITFORVALUE_TIMEOUT 1000000 // 1s\r
-#define KEYBOARD_BAT_TIMEOUT 4000000 // 4s\r
-#define KEYBOARD_TIMER_INTERVAL 200000 // 0.02s\r
-#define SCANCODE_EXTENDED0 0xE0\r
-#define SCANCODE_EXTENDED1 0xE1\r
-#define SCANCODE_CTRL_MAKE 0x1D\r
-#define SCANCODE_CTRL_BREAK 0x9D\r
-#define SCANCODE_ALT_MAKE 0x38\r
-#define SCANCODE_ALT_BREAK 0xB8\r
-#define SCANCODE_LEFT_SHIFT_MAKE 0x2A\r
-#define SCANCODE_LEFT_SHIFT_BREAK 0xAA\r
-#define SCANCODE_RIGHT_SHIFT_MAKE 0x36\r
-#define SCANCODE_RIGHT_SHIFT_BREAK 0xB6\r
-#define SCANCODE_CAPS_LOCK_MAKE 0x3A\r
-#define SCANCODE_NUM_LOCK_MAKE 0x45\r
-#define SCANCODE_SCROLL_LOCK_MAKE 0x46\r
-#define SCANCODE_DELETE_MAKE 0x53\r
-#define SCANCODE_LEFT_LOGO_MAKE 0x5B //GUI key defined in Keyboard scan code\r
-#define SCANCODE_LEFT_LOGO_BREAK 0xDB\r
-#define SCANCODE_RIGHT_LOGO_MAKE 0x5C\r
-#define SCANCODE_RIGHT_LOGO_BREAK 0xDC\r
-#define SCANCODE_MENU_MAKE 0x5D //APPS key defined in Keyboard scan code\r
-#define SCANCODE_MENU_BREAK 0xDD\r
-#define SCANCODE_SYS_REQ_MAKE 0x37\r
-#define SCANCODE_SYS_REQ_BREAK 0xB7\r
-#define SCANCODE_SYS_REQ_MAKE_WITH_ALT 0x54\r
-#define SCANCODE_SYS_REQ_BREAK_WITH_ALT 0xD4\r
-\r
-#define SCANCODE_MAX_MAKE 0x60\r
-\r
-\r
-#define KEYBOARD_STATUS_REGISTER_HAS_OUTPUT_DATA BIT0 ///< 0 - Output register has no data; 1 - Output register has data\r
-#define KEYBOARD_STATUS_REGISTER_HAS_INPUT_DATA BIT1 ///< 0 - Input register has no data; 1 - Input register has data\r
-#define KEYBOARD_STATUS_REGISTER_SYSTEM_FLAG BIT2 ///< Set to 0 after power on reset\r
-#define KEYBOARD_STATUS_REGISTER_INPUT_DATA_TYPE BIT3 ///< 0 - Data in input register is data; 1 - Data in input register is command\r
-#define KEYBOARD_STATUS_REGISTER_ENABLE_FLAG BIT4 ///< 0 - Keyboard is disable; 1 - Keyboard is enable\r
-#define KEYBOARD_STATUS_REGISTER_TRANSMIT_TIMEOUT BIT5 ///< 0 - Transmit is complete without timeout; 1 - Transmit is timeout without complete\r
-#define KEYBOARD_STATUS_REGISTER_RECEIVE_TIMEOUT BIT6 ///< 0 - Receive is complete without timeout; 1 - Receive is timeout without complete\r
-#define KEYBOARD_STATUS_REGISTER_PARITY BIT7 ///< 0 - Odd parity; 1 - Even parity\r
+#define KEYBOARD_KBEN 0xF4\r
+#define KEYBOARD_CMDECHO_ACK 0xFA\r
+\r
+#define KEYBOARD_MAX_TRY 256 // 256\r
+#define KEYBOARD_TIMEOUT 65536 // 0.07s\r
+#define KEYBOARD_WAITFORVALUE_TIMEOUT 1000000 // 1s\r
+#define KEYBOARD_BAT_TIMEOUT 4000000 // 4s\r
+#define KEYBOARD_TIMER_INTERVAL 200000 // 0.02s\r
+#define SCANCODE_EXTENDED0 0xE0\r
+#define SCANCODE_EXTENDED1 0xE1\r
+#define SCANCODE_CTRL_MAKE 0x1D\r
+#define SCANCODE_CTRL_BREAK 0x9D\r
+#define SCANCODE_ALT_MAKE 0x38\r
+#define SCANCODE_ALT_BREAK 0xB8\r
+#define SCANCODE_LEFT_SHIFT_MAKE 0x2A\r
+#define SCANCODE_LEFT_SHIFT_BREAK 0xAA\r
+#define SCANCODE_RIGHT_SHIFT_MAKE 0x36\r
+#define SCANCODE_RIGHT_SHIFT_BREAK 0xB6\r
+#define SCANCODE_CAPS_LOCK_MAKE 0x3A\r
+#define SCANCODE_NUM_LOCK_MAKE 0x45\r
+#define SCANCODE_SCROLL_LOCK_MAKE 0x46\r
+#define SCANCODE_DELETE_MAKE 0x53\r
+#define SCANCODE_LEFT_LOGO_MAKE 0x5B// GUI key defined in Keyboard scan code\r
+#define SCANCODE_LEFT_LOGO_BREAK 0xDB\r
+#define SCANCODE_RIGHT_LOGO_MAKE 0x5C\r
+#define SCANCODE_RIGHT_LOGO_BREAK 0xDC\r
+#define SCANCODE_MENU_MAKE 0x5D// APPS key defined in Keyboard scan code\r
+#define SCANCODE_MENU_BREAK 0xDD\r
+#define SCANCODE_SYS_REQ_MAKE 0x37\r
+#define SCANCODE_SYS_REQ_BREAK 0xB7\r
+#define SCANCODE_SYS_REQ_MAKE_WITH_ALT 0x54\r
+#define SCANCODE_SYS_REQ_BREAK_WITH_ALT 0xD4\r
+\r
+#define SCANCODE_MAX_MAKE 0x60\r
+\r
+#define KEYBOARD_STATUS_REGISTER_HAS_OUTPUT_DATA BIT0 ///< 0 - Output register has no data; 1 - Output register has data\r
+#define KEYBOARD_STATUS_REGISTER_HAS_INPUT_DATA BIT1 ///< 0 - Input register has no data; 1 - Input register has data\r
+#define KEYBOARD_STATUS_REGISTER_SYSTEM_FLAG BIT2 ///< Set to 0 after power on reset\r
+#define KEYBOARD_STATUS_REGISTER_INPUT_DATA_TYPE BIT3 ///< 0 - Data in input register is data; 1 - Data in input register is command\r
+#define KEYBOARD_STATUS_REGISTER_ENABLE_FLAG BIT4 ///< 0 - Keyboard is disable; 1 - Keyboard is enable\r
+#define KEYBOARD_STATUS_REGISTER_TRANSMIT_TIMEOUT BIT5 ///< 0 - Transmit is complete without timeout; 1 - Transmit is timeout without complete\r
+#define KEYBOARD_STATUS_REGISTER_RECEIVE_TIMEOUT BIT6 ///< 0 - Receive is complete without timeout; 1 - Receive is timeout without complete\r
+#define KEYBOARD_STATUS_REGISTER_PARITY BIT7 ///< 0 - Odd parity; 1 - Even parity\r
\r
#define KEYBOARD_8042_COMMAND_READ 0x20\r
#define KEYBOARD_8042_COMMAND_WRITE 0x60\r
#define KEYBOARD_8042_COMMAND_KEYBOARD_INTERFACE_SELF_TEST 0xAB\r
#define KEYBOARD_8042_COMMAND_DISABLE_KEYBOARD_INTERFACE 0xAD\r
\r
-#define KEYBOARD_8048_COMMAND_CLEAR_OUTPUT_DATA 0xF4\r
-#define KEYBOARD_8048_COMMAND_RESET 0xFF\r
-#define KEYBOARD_8048_COMMAND_SELECT_SCAN_CODE_SET 0xF0\r
-\r
-#define KEYBOARD_8048_RETURN_8042_BAT_SUCCESS 0xAA\r
-#define KEYBOARD_8048_RETURN_8042_BAT_ERROR 0xFC\r
-#define KEYBOARD_8048_RETURN_8042_ACK 0xFA\r
+#define KEYBOARD_8048_COMMAND_CLEAR_OUTPUT_DATA 0xF4\r
+#define KEYBOARD_8048_COMMAND_RESET 0xFF\r
+#define KEYBOARD_8048_COMMAND_SELECT_SCAN_CODE_SET 0xF0\r
\r
+#define KEYBOARD_8048_RETURN_8042_BAT_SUCCESS 0xAA\r
+#define KEYBOARD_8048_RETURN_8042_BAT_ERROR 0xFC\r
+#define KEYBOARD_8048_RETURN_8042_ACK 0xFA\r
\r
//\r
// Keyboard Controller Status\r
//\r
// Other functions that are used among .c files\r
//\r
+\r
/**\r
Show keyboard status lights according to\r
indicators in ConsoleIn.\r
**/\r
EFI_STATUS\r
UpdateStatusLights (\r
- IN KEYBOARD_CONSOLE_IN_DEV *ConsoleIn\r
+ IN KEYBOARD_CONSOLE_IN_DEV *ConsoleIn\r
);\r
\r
/**\r
**/\r
VOID\r
KeyGetchar (\r
- IN OUT KEYBOARD_CONSOLE_IN_DEV *ConsoleIn\r
+ IN OUT KEYBOARD_CONSOLE_IN_DEV *ConsoleIn\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
/**\r
**/\r
EFI_STATUS\r
InitKeyboard (\r
- IN OUT KEYBOARD_CONSOLE_IN_DEV *ConsoleIn,\r
- IN BOOLEAN ExtendedVerification\r
+ IN OUT KEYBOARD_CONSOLE_IN_DEV *ConsoleIn,\r
+ IN BOOLEAN ExtendedVerification\r
);\r
\r
-\r
/**\r
Timer event handler: read a series of scancodes from 8042\r
and put them into memory scancode buffer.\r
VOID\r
EFIAPI\r
KeyboardTimerHandler (\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
KeyboardWaitForKey (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
);\r
\r
/**\r
**/\r
UINT8\r
KeyReadStatusRegister (\r
- IN KEYBOARD_CONSOLE_IN_DEV *ConsoleIn\r
+ IN KEYBOARD_CONSOLE_IN_DEV *ConsoleIn\r
);\r
\r
/**\r
BOOLEAN\r
EFIAPI\r
CheckKeyboardConnect (\r
- IN KEYBOARD_CONSOLE_IN_DEV *ConsoleIn\r
+ IN KEYBOARD_CONSOLE_IN_DEV *ConsoleIn\r
);\r
\r
/**\r
VOID\r
EFIAPI\r
KeyboardWaitForKeyEx (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
);\r
\r
//\r
EFI_STATUS\r
EFIAPI\r
KeyboardReadKeyStrokeEx (\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
**/\r
VOID\r
PushEfikeyBufTail (\r
- IN EFI_KEY_QUEUE *Queue,\r
- IN EFI_KEY_DATA *KeyData\r
+ IN EFI_KEY_QUEUE *Queue,\r
+ IN EFI_KEY_DATA *KeyData\r
);\r
\r
/**\r
**/\r
VOID\r
InitializeKeyState (\r
- IN KEYBOARD_CONSOLE_IN_DEV *ConsoleIn,\r
- OUT EFI_KEY_STATE *KeyState\r
+ IN KEYBOARD_CONSOLE_IN_DEV *ConsoleIn,\r
+ OUT EFI_KEY_STATE *KeyState\r
);\r
\r
#endif\r