#include "Ps2Keyboard.h"\r
\r
struct {\r
- UINT8 ScanCode; ///< follows value defined in Scan Code Set1\r
- UINT16 EfiScanCode;\r
- CHAR16 UnicodeChar;\r
- CHAR16 ShiftUnicodeChar;\r
-}\r
-ConvertKeyboardScanCodeToEfiKey[] = {\r
-\r
+ UINT8 ScanCode; ///< follows value defined in Scan Code Set1\r
+ UINT16 EfiScanCode;\r
+ CHAR16 UnicodeChar;\r
+ CHAR16 ShiftUnicodeChar;\r
+} ConvertKeyboardScanCodeToEfiKey[] = {\r
{\r
0x01, // Escape\r
SCAN_ESC,\r
L'?'\r
},\r
{\r
- 0x36, //Right Shift\r
+ 0x36, // Right Shift\r
SCAN_NULL,\r
0x0000,\r
0x0000\r
L'*'\r
},\r
{\r
- 0x38, //Left Alt/Extended Right Alt\r
+ 0x38, // Left Alt/Extended Right Alt\r
SCAN_NULL,\r
0x0000,\r
0x0000\r
L' '\r
},\r
{\r
- 0x3A, //CapsLock\r
+ 0x3A, // CapsLock\r
SCAN_NULL,\r
0x0000,\r
0x0000\r
0x0000\r
},\r
{\r
- 0x5B, //Left LOGO\r
+ 0x5B, // Left LOGO\r
SCAN_NULL,\r
0x0000,\r
0x0000\r
},\r
{\r
- 0x5C, //Right LOGO\r
+ 0x5C, // Right LOGO\r
SCAN_NULL,\r
0x0000,\r
0x0000\r
},\r
{\r
- 0x5D, //Menu key\r
+ 0x5D, // Menu key\r
SCAN_NULL,\r
0x0000,\r
0x0000\r
//\r
UINTN mWaitForValueTimeOut = KEYBOARD_WAITFORVALUE_TIMEOUT;\r
\r
-BOOLEAN mEnableMouseInterface;\r
-\r
-\r
+BOOLEAN mEnableMouseInterface;\r
\r
/**\r
Return the count of scancode in the queue.\r
**/\r
UINTN\r
GetScancodeBufCount (\r
- IN SCAN_CODE_QUEUE *Queue\r
+ IN SCAN_CODE_QUEUE *Queue\r
)\r
{\r
if (Queue->Head <= Queue->Tail) {\r
**/\r
EFI_STATUS\r
GetScancodeBufHead (\r
- IN SCAN_CODE_QUEUE *Queue,\r
- IN UINTN Count,\r
- OUT UINT8 *Buf\r
+ IN SCAN_CODE_QUEUE *Queue,\r
+ IN UINTN Count,\r
+ OUT UINT8 *Buf\r
)\r
{\r
- UINTN Index;\r
- UINTN Pos;\r
+ UINTN Index;\r
+ UINTN Pos;\r
\r
//\r
// check the valid range of parameter 'Count'\r
if (GetScancodeBufCount (Queue) < Count) {\r
return EFI_NOT_READY;\r
}\r
+\r
//\r
// retrieve the values\r
//\r
**/\r
EFI_STATUS\r
PopScancodeBufHead (\r
- IN SCAN_CODE_QUEUE *Queue,\r
- IN UINTN Count,\r
- OUT UINT8 *Buf OPTIONAL\r
+ IN SCAN_CODE_QUEUE *Queue,\r
+ IN UINTN Count,\r
+ OUT UINT8 *Buf OPTIONAL\r
)\r
{\r
- UINTN Index;\r
+ UINTN Index;\r
\r
//\r
// Check the valid range of parameter 'Count'\r
if (GetScancodeBufCount (Queue) < Count) {\r
return EFI_NOT_READY;\r
}\r
+\r
//\r
// Retrieve and remove the values\r
//\r
**/\r
VOID\r
PushScancodeBufTail (\r
- IN SCAN_CODE_QUEUE *Queue,\r
- IN UINT8 Scancode\r
+ IN SCAN_CODE_QUEUE *Queue,\r
+ IN UINT8 Scancode\r
)\r
{\r
if (GetScancodeBufCount (Queue) == KEYBOARD_SCAN_CODE_MAX_COUNT - 1) {\r
}\r
\r
Queue->Buffer[Queue->Tail] = Scancode;\r
- Queue->Tail = (Queue->Tail + 1) % KEYBOARD_SCAN_CODE_MAX_COUNT;\r
+ Queue->Tail = (Queue->Tail + 1) % KEYBOARD_SCAN_CODE_MAX_COUNT;\r
}\r
\r
/**\r
**/\r
UINT8\r
KeyReadDataRegister (\r
- IN KEYBOARD_CONSOLE_IN_DEV *ConsoleIn\r
+ IN KEYBOARD_CONSOLE_IN_DEV *ConsoleIn\r
)\r
\r
{\r
**/\r
VOID\r
KeyWriteDataRegister (\r
- IN KEYBOARD_CONSOLE_IN_DEV *ConsoleIn,\r
- IN UINT8 Data\r
+ IN KEYBOARD_CONSOLE_IN_DEV *ConsoleIn,\r
+ IN UINT8 Data\r
)\r
{\r
IoWrite8 (ConsoleIn->DataRegisterAddress, Data);\r
**/\r
UINT8\r
KeyReadStatusRegister (\r
- IN KEYBOARD_CONSOLE_IN_DEV *ConsoleIn\r
+ IN KEYBOARD_CONSOLE_IN_DEV *ConsoleIn\r
)\r
{\r
return IoRead8 (ConsoleIn->StatusRegisterAddress);\r
**/\r
VOID\r
KeyWriteCommandRegister (\r
- IN KEYBOARD_CONSOLE_IN_DEV *ConsoleIn,\r
- IN UINT8 Data\r
+ IN KEYBOARD_CONSOLE_IN_DEV *ConsoleIn,\r
+ IN UINT8 Data\r
)\r
{\r
IoWrite8 (ConsoleIn->CommandRegisterAddress, Data);\r
**/\r
VOID\r
KeyboardError (\r
- IN KEYBOARD_CONSOLE_IN_DEV *ConsoleIn,\r
- IN CHAR16 *ErrMsg\r
+ IN KEYBOARD_CONSOLE_IN_DEV *ConsoleIn,\r
+ IN CHAR16 *ErrMsg\r
)\r
{\r
ConsoleIn->KeyboardErr = TRUE;\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
- UINT8 Data;\r
- EFI_TPL OldTpl;\r
- KEYBOARD_CONSOLE_IN_DEV *ConsoleIn;\r
+ UINT8 Data;\r
+ EFI_TPL OldTpl;\r
+ KEYBOARD_CONSOLE_IN_DEV *ConsoleIn;\r
\r
- ConsoleIn = (KEYBOARD_CONSOLE_IN_DEV *) Context;\r
+ ConsoleIn = (KEYBOARD_CONSOLE_IN_DEV *)Context;\r
\r
//\r
// Enter critical section\r
//\r
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);\r
\r
- if (((KEYBOARD_CONSOLE_IN_DEV *) Context)->KeyboardErr) {\r
+ if (((KEYBOARD_CONSOLE_IN_DEV *)Context)->KeyboardErr) {\r
//\r
// Leave critical section and return\r
//\r
gBS->RestoreTPL (OldTpl);\r
- return ;\r
+ return;\r
}\r
\r
//\r
//\r
\r
while ((KeyReadStatusRegister (ConsoleIn) & (KEYBOARD_STATUS_REGISTER_TRANSMIT_TIMEOUT|KEYBOARD_STATUS_REGISTER_HAS_OUTPUT_DATA)) ==\r
- KEYBOARD_STATUS_REGISTER_HAS_OUTPUT_DATA\r
- ) {\r
+ KEYBOARD_STATUS_REGISTER_HAS_OUTPUT_DATA\r
+ )\r
+ {\r
//\r
// Read one byte of the scan code and store it into the memory buffer\r
//\r
Data = KeyReadDataRegister (ConsoleIn);\r
PushScancodeBufTail (&ConsoleIn->ScancodeQueue, Data);\r
}\r
+\r
KeyGetchar (ConsoleIn);\r
\r
//\r
**/\r
EFI_STATUS\r
KeyboardWrite (\r
- IN KEYBOARD_CONSOLE_IN_DEV *ConsoleIn,\r
- IN UINT8 Data\r
+ IN KEYBOARD_CONSOLE_IN_DEV *ConsoleIn,\r
+ IN UINT8 Data\r
)\r
{\r
UINT32 TimeOut;\r
UINT32 RegEmptied;\r
\r
- TimeOut = 0;\r
- RegEmptied = 0;\r
+ TimeOut = 0;\r
+ RegEmptied = 0;\r
\r
//\r
// wait for input buffer empty\r
if (RegEmptied == 0) {\r
return EFI_TIMEOUT;\r
}\r
+\r
//\r
// Write it\r
//\r
**/\r
EFI_STATUS\r
KeyboardCommand (\r
- IN KEYBOARD_CONSOLE_IN_DEV *ConsoleIn,\r
- IN UINT8 Data\r
+ IN KEYBOARD_CONSOLE_IN_DEV *ConsoleIn,\r
+ IN UINT8 Data\r
)\r
{\r
UINT32 TimeOut;\r
UINT32 RegEmptied;\r
\r
- TimeOut = 0;\r
- RegEmptied = 0;\r
+ TimeOut = 0;\r
+ RegEmptied = 0;\r
\r
//\r
// Wait For Input Buffer Empty\r
if (RegEmptied == 0) {\r
return EFI_TIMEOUT;\r
}\r
+\r
//\r
// issue the command\r
//\r
**/\r
EFI_STATUS\r
KeyboardWaitForValue (\r
- IN KEYBOARD_CONSOLE_IN_DEV *ConsoleIn,\r
- IN UINT8 Value\r
+ IN KEYBOARD_CONSOLE_IN_DEV *ConsoleIn,\r
+ IN UINT8 Value\r
)\r
{\r
UINT8 Data;\r
UINT32 SumTimeOut;\r
UINT32 GotIt;\r
\r
- GotIt = 0;\r
- TimeOut = 0;\r
- SumTimeOut = 0;\r
+ GotIt = 0;\r
+ TimeOut = 0;\r
+ SumTimeOut = 0;\r
\r
//\r
// Make sure the initial value of 'Data' is different from 'Value'\r
if (Data == Value) {\r
Data = 1;\r
}\r
+\r
//\r
// Read from 8042 (multiple times if needed)\r
// until the expected value appears\r
break;\r
}\r
}\r
+\r
//\r
// Check results\r
//\r
} else {\r
return EFI_TIMEOUT;\r
}\r
-\r
}\r
\r
/**\r
**/\r
EFI_STATUS\r
UpdateStatusLights (\r
- IN KEYBOARD_CONSOLE_IN_DEV *ConsoleIn\r
+ IN KEYBOARD_CONSOLE_IN_DEV *ConsoleIn\r
)\r
{\r
EFI_STATUS Status;\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
- KeyState->KeyShiftState = EFI_SHIFT_STATE_VALID\r
- | (ConsoleIn->LeftCtrl ? EFI_LEFT_CONTROL_PRESSED : 0)\r
- | (ConsoleIn->RightCtrl ? EFI_RIGHT_CONTROL_PRESSED : 0)\r
- | (ConsoleIn->LeftAlt ? EFI_LEFT_ALT_PRESSED : 0)\r
- | (ConsoleIn->RightAlt ? EFI_RIGHT_ALT_PRESSED : 0)\r
- | (ConsoleIn->LeftShift ? EFI_LEFT_SHIFT_PRESSED : 0)\r
- | (ConsoleIn->RightShift ? EFI_RIGHT_SHIFT_PRESSED : 0)\r
- | (ConsoleIn->LeftLogo ? EFI_LEFT_LOGO_PRESSED : 0)\r
- | (ConsoleIn->RightLogo ? EFI_RIGHT_LOGO_PRESSED : 0)\r
- | (ConsoleIn->Menu ? EFI_MENU_KEY_PRESSED : 0)\r
- | (ConsoleIn->SysReq ? EFI_SYS_REQ_PRESSED : 0)\r
- ;\r
+ KeyState->KeyShiftState = EFI_SHIFT_STATE_VALID\r
+ | (ConsoleIn->LeftCtrl ? EFI_LEFT_CONTROL_PRESSED : 0)\r
+ | (ConsoleIn->RightCtrl ? EFI_RIGHT_CONTROL_PRESSED : 0)\r
+ | (ConsoleIn->LeftAlt ? EFI_LEFT_ALT_PRESSED : 0)\r
+ | (ConsoleIn->RightAlt ? EFI_RIGHT_ALT_PRESSED : 0)\r
+ | (ConsoleIn->LeftShift ? EFI_LEFT_SHIFT_PRESSED : 0)\r
+ | (ConsoleIn->RightShift ? EFI_RIGHT_SHIFT_PRESSED : 0)\r
+ | (ConsoleIn->LeftLogo ? EFI_LEFT_LOGO_PRESSED : 0)\r
+ | (ConsoleIn->RightLogo ? EFI_RIGHT_LOGO_PRESSED : 0)\r
+ | (ConsoleIn->Menu ? EFI_MENU_KEY_PRESSED : 0)\r
+ | (ConsoleIn->SysReq ? EFI_SYS_REQ_PRESSED : 0)\r
+ ;\r
KeyState->KeyToggleState = EFI_TOGGLE_STATE_VALID\r
- | (ConsoleIn->CapsLock ? EFI_CAPS_LOCK_ACTIVE : 0)\r
- | (ConsoleIn->NumLock ? EFI_NUM_LOCK_ACTIVE : 0)\r
- | (ConsoleIn->ScrollLock ? EFI_SCROLL_LOCK_ACTIVE : 0)\r
- | (ConsoleIn->IsSupportPartialKey ? EFI_KEY_STATE_EXPOSED : 0)\r
- ;\r
+ | (ConsoleIn->CapsLock ? EFI_CAPS_LOCK_ACTIVE : 0)\r
+ | (ConsoleIn->NumLock ? EFI_NUM_LOCK_ACTIVE : 0)\r
+ | (ConsoleIn->ScrollLock ? EFI_SCROLL_LOCK_ACTIVE : 0)\r
+ | (ConsoleIn->IsSupportPartialKey ? EFI_KEY_STATE_EXPOSED : 0)\r
+ ;\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
EFI_STATUS Status;\r
//\r
// 3 bytes most\r
//\r
- UINT8 ScancodeArr[3];\r
- UINT32 ScancodeArrPos;\r
+ UINT8 ScancodeArr[3];\r
+ UINT32 ScancodeArrPos;\r
\r
//\r
// Check if there are enough bytes of scancode representing a single key\r
Extend0 = FALSE;\r
Extend1 = FALSE;\r
ScancodeArrPos = 0;\r
- Status = GetScancodeBufHead (&ConsoleIn->ScancodeQueue, ScancodeArrPos + 1, ScancodeArr);\r
+ Status = GetScancodeBufHead (&ConsoleIn->ScancodeQueue, ScancodeArrPos + 1, ScancodeArr);\r
if (EFI_ERROR (Status)) {\r
- return ;\r
+ return;\r
}\r
\r
if (ScancodeArr[ScancodeArrPos] == SCANCODE_EXTENDED0) {\r
//\r
// E0 to look ahead 2 bytes\r
//\r
- Extend0 = TRUE;\r
+ Extend0 = TRUE;\r
ScancodeArrPos = 1;\r
Status = GetScancodeBufHead (&ConsoleIn->ScancodeQueue, ScancodeArrPos + 1, ScancodeArr);\r
if (EFI_ERROR (Status)) {\r
- return ;\r
+ return;\r
}\r
} else if (ScancodeArr[ScancodeArrPos] == SCANCODE_EXTENDED1) {\r
//\r
// E1 to look ahead 3 bytes\r
//\r
- Extend1 = TRUE;\r
+ Extend1 = TRUE;\r
ScancodeArrPos = 2;\r
Status = GetScancodeBufHead (&ConsoleIn->ScancodeQueue, ScancodeArrPos + 1, ScancodeArr);\r
if (EFI_ERROR (Status)) {\r
- return ;\r
+ return;\r
}\r
}\r
+\r
//\r
// if we reach this position, scancodes for a key is in buffer now,pop them\r
//\r
// Check for special keys and update the driver state.\r
//\r
switch (ScanCode) {\r
+ case SCANCODE_CTRL_MAKE:\r
+ if (Extend0) {\r
+ ConsoleIn->RightCtrl = TRUE;\r
+ } else {\r
+ ConsoleIn->LeftCtrl = TRUE;\r
+ }\r
\r
- case SCANCODE_CTRL_MAKE:\r
- if (Extend0) {\r
- ConsoleIn->RightCtrl = TRUE;\r
- } else {\r
- ConsoleIn->LeftCtrl = TRUE;\r
- }\r
- break;\r
- case SCANCODE_CTRL_BREAK:\r
- if (Extend0) {\r
- ConsoleIn->RightCtrl = FALSE;\r
- } else {\r
- ConsoleIn->LeftCtrl = FALSE;\r
- }\r
- break;\r
+ break;\r
+ case SCANCODE_CTRL_BREAK:\r
+ if (Extend0) {\r
+ ConsoleIn->RightCtrl = FALSE;\r
+ } else {\r
+ ConsoleIn->LeftCtrl = FALSE;\r
+ }\r
\r
- case SCANCODE_ALT_MAKE:\r
+ break;\r
+\r
+ case SCANCODE_ALT_MAKE:\r
if (Extend0) {\r
ConsoleIn->RightAlt = TRUE;\r
} else {\r
- ConsoleIn->LeftAlt = TRUE;\r
+ ConsoleIn->LeftAlt = TRUE;\r
}\r
- break;\r
- case SCANCODE_ALT_BREAK:\r
+\r
+ break;\r
+ case SCANCODE_ALT_BREAK:\r
if (Extend0) {\r
ConsoleIn->RightAlt = FALSE;\r
} else {\r
- ConsoleIn->LeftAlt = FALSE;\r
+ ConsoleIn->LeftAlt = FALSE;\r
}\r
- break;\r
\r
- case SCANCODE_LEFT_SHIFT_MAKE:\r
- //\r
- // To avoid recognize PRNT_SCRN key as a L_SHIFT key\r
- // because PRNT_SCRN key generates E0 followed by L_SHIFT scan code.\r
- // If it the second byte of the PRNT_ScRN skip it.\r
- //\r
- if (!Extend0) {\r
- ConsoleIn->LeftShift = TRUE;\r
break;\r
- }\r
- continue;\r
\r
- case SCANCODE_LEFT_SHIFT_BREAK:\r
- if (!Extend0) {\r
- ConsoleIn->LeftShift = FALSE;\r
- }\r
- break;\r
+ case SCANCODE_LEFT_SHIFT_MAKE:\r
+ //\r
+ // To avoid recognize PRNT_SCRN key as a L_SHIFT key\r
+ // because PRNT_SCRN key generates E0 followed by L_SHIFT scan code.\r
+ // If it the second byte of the PRNT_ScRN skip it.\r
+ //\r
+ if (!Extend0) {\r
+ ConsoleIn->LeftShift = TRUE;\r
+ break;\r
+ }\r
\r
- case SCANCODE_RIGHT_SHIFT_MAKE:\r
- ConsoleIn->RightShift = TRUE;\r
- break;\r
- case SCANCODE_RIGHT_SHIFT_BREAK:\r
- ConsoleIn->RightShift = FALSE;\r
- break;\r
+ continue;\r
\r
- case SCANCODE_LEFT_LOGO_MAKE:\r
- ConsoleIn->LeftLogo = TRUE;\r
- break;\r
- case SCANCODE_LEFT_LOGO_BREAK:\r
- ConsoleIn->LeftLogo = FALSE;\r
- break;\r
+ case SCANCODE_LEFT_SHIFT_BREAK:\r
+ if (!Extend0) {\r
+ ConsoleIn->LeftShift = FALSE;\r
+ }\r
\r
- case SCANCODE_RIGHT_LOGO_MAKE:\r
- ConsoleIn->RightLogo = TRUE;\r
- break;\r
- case SCANCODE_RIGHT_LOGO_BREAK:\r
- ConsoleIn->RightLogo = FALSE;\r
- break;\r
+ break;\r
\r
- case SCANCODE_MENU_MAKE:\r
- ConsoleIn->Menu = TRUE;\r
- break;\r
- case SCANCODE_MENU_BREAK:\r
- ConsoleIn->Menu = FALSE;\r
- break;\r
+ case SCANCODE_RIGHT_SHIFT_MAKE:\r
+ ConsoleIn->RightShift = TRUE;\r
+ break;\r
+ case SCANCODE_RIGHT_SHIFT_BREAK:\r
+ ConsoleIn->RightShift = FALSE;\r
+ break;\r
+\r
+ case SCANCODE_LEFT_LOGO_MAKE:\r
+ ConsoleIn->LeftLogo = TRUE;\r
+ break;\r
+ case SCANCODE_LEFT_LOGO_BREAK:\r
+ ConsoleIn->LeftLogo = FALSE;\r
+ break;\r
+\r
+ case SCANCODE_RIGHT_LOGO_MAKE:\r
+ ConsoleIn->RightLogo = TRUE;\r
+ break;\r
+ case SCANCODE_RIGHT_LOGO_BREAK:\r
+ ConsoleIn->RightLogo = FALSE;\r
+ break;\r
+\r
+ case SCANCODE_MENU_MAKE:\r
+ ConsoleIn->Menu = TRUE;\r
+ break;\r
+ case SCANCODE_MENU_BREAK:\r
+ ConsoleIn->Menu = FALSE;\r
+ break;\r
+\r
+ case SCANCODE_SYS_REQ_MAKE:\r
+ if (Extend0) {\r
+ ConsoleIn->SysReq = TRUE;\r
+ }\r
+\r
+ break;\r
+ case SCANCODE_SYS_REQ_BREAK:\r
+ if (Extend0) {\r
+ ConsoleIn->SysReq = FALSE;\r
+ }\r
\r
- case SCANCODE_SYS_REQ_MAKE:\r
- if (Extend0) {\r
+ break;\r
+\r
+ case SCANCODE_SYS_REQ_MAKE_WITH_ALT:\r
ConsoleIn->SysReq = TRUE;\r
- }\r
- break;\r
- case SCANCODE_SYS_REQ_BREAK:\r
- if (Extend0) {\r
+ break;\r
+ case SCANCODE_SYS_REQ_BREAK_WITH_ALT:\r
ConsoleIn->SysReq = FALSE;\r
- }\r
- break;\r
-\r
- case SCANCODE_SYS_REQ_MAKE_WITH_ALT:\r
- ConsoleIn->SysReq = TRUE;\r
- break;\r
- case SCANCODE_SYS_REQ_BREAK_WITH_ALT:\r
- ConsoleIn->SysReq = FALSE;\r
- break;\r
+ break;\r
\r
- case SCANCODE_CAPS_LOCK_MAKE:\r
- ConsoleIn->CapsLock = (BOOLEAN)!ConsoleIn->CapsLock;\r
- UpdateStatusLights (ConsoleIn);\r
- break;\r
- case SCANCODE_NUM_LOCK_MAKE:\r
- ConsoleIn->NumLock = (BOOLEAN)!ConsoleIn->NumLock;\r
- UpdateStatusLights (ConsoleIn);\r
- break;\r
- case SCANCODE_SCROLL_LOCK_MAKE:\r
- if (!Extend0) {\r
- ConsoleIn->ScrollLock = (BOOLEAN)!ConsoleIn->ScrollLock;\r
+ case SCANCODE_CAPS_LOCK_MAKE:\r
+ ConsoleIn->CapsLock = (BOOLEAN) !ConsoleIn->CapsLock;\r
UpdateStatusLights (ConsoleIn);\r
- }\r
- break;\r
+ break;\r
+ case SCANCODE_NUM_LOCK_MAKE:\r
+ ConsoleIn->NumLock = (BOOLEAN) !ConsoleIn->NumLock;\r
+ UpdateStatusLights (ConsoleIn);\r
+ break;\r
+ case SCANCODE_SCROLL_LOCK_MAKE:\r
+ if (!Extend0) {\r
+ ConsoleIn->ScrollLock = (BOOLEAN) !ConsoleIn->ScrollLock;\r
+ UpdateStatusLights (ConsoleIn);\r
+ }\r
+\r
+ break;\r
}\r
}\r
\r
// Handle Ctrl+Alt+Del hotkey\r
//\r
if ((ConsoleIn->LeftCtrl || ConsoleIn->RightCtrl) &&\r
- (ConsoleIn->LeftAlt || ConsoleIn->RightAlt ) &&\r
- ScanCode == SCANCODE_DELETE_MAKE\r
- ) {\r
+ (ConsoleIn->LeftAlt || ConsoleIn->RightAlt) &&\r
+ (ScanCode == SCANCODE_DELETE_MAKE)\r
+ )\r
+ {\r
gRT->ResetSystem (EfiResetWarm, EFI_SUCCESS, 0, NULL);\r
}\r
\r
//\r
// Key Pad "/" shares the same scancode as that of "/" except Key Pad "/" has E0 prefix\r
//\r
- if (Extend0 && ScanCode == 0x35) {\r
+ if (Extend0 && (ScanCode == 0x35)) {\r
KeyData.Key.UnicodeChar = L'/';\r
KeyData.Key.ScanCode = SCAN_NULL;\r
\r
- //\r
- // PAUSE shares the same scancode as that of NUM except PAUSE has E1 prefix\r
- //\r
- } else if (Extend1 && ScanCode == SCANCODE_NUM_LOCK_MAKE) {\r
+ //\r
+ // PAUSE shares the same scancode as that of NUM except PAUSE has E1 prefix\r
+ //\r
+ } else if (Extend1 && (ScanCode == SCANCODE_NUM_LOCK_MAKE)) {\r
KeyData.Key.UnicodeChar = CHAR_NULL;\r
KeyData.Key.ScanCode = SCAN_PAUSE;\r
\r
- //\r
- // PAUSE shares the same scancode as that of SCROLL except PAUSE (CTRL pressed) has E0 prefix\r
- //\r
- } else if (Extend0 && ScanCode == SCANCODE_SCROLL_LOCK_MAKE) {\r
+ //\r
+ // PAUSE shares the same scancode as that of SCROLL except PAUSE (CTRL pressed) has E0 prefix\r
+ //\r
+ } else if (Extend0 && (ScanCode == SCANCODE_SCROLL_LOCK_MAKE)) {\r
KeyData.Key.UnicodeChar = CHAR_NULL;\r
KeyData.Key.ScanCode = SCAN_PAUSE;\r
\r
- //\r
- // PRNT_SCRN shares the same scancode as that of Key Pad "*" except PRNT_SCRN has E0 prefix\r
- //\r
- } else if (Extend0 && ScanCode == SCANCODE_SYS_REQ_MAKE) {\r
+ //\r
+ // PRNT_SCRN shares the same scancode as that of Key Pad "*" except PRNT_SCRN has E0 prefix\r
+ //\r
+ } else if (Extend0 && (ScanCode == SCANCODE_SYS_REQ_MAKE)) {\r
KeyData.Key.UnicodeChar = CHAR_NULL;\r
KeyData.Key.ScanCode = SCAN_NULL;\r
\r
- //\r
- // Except the above special case, all others can be handled by convert table\r
- //\r
+ //\r
+ // Except the above special case, all others can be handled by convert table\r
+ //\r
} else {\r
for (Index = 0; ConvertKeyboardScanCodeToEfiKey[Index].ScanCode != TABLE_END; Index++) {\r
if (ScanCode == ConvertKeyboardScanCodeToEfiKey[Index].ScanCode) {\r
KeyData.Key.UnicodeChar = ConvertKeyboardScanCodeToEfiKey[Index].UnicodeChar;\r
\r
if ((ConsoleIn->LeftShift || ConsoleIn->RightShift) &&\r
- (ConvertKeyboardScanCodeToEfiKey[Index].UnicodeChar != ConvertKeyboardScanCodeToEfiKey[Index].ShiftUnicodeChar)) {\r
+ (ConvertKeyboardScanCodeToEfiKey[Index].UnicodeChar != ConvertKeyboardScanCodeToEfiKey[Index].ShiftUnicodeChar))\r
+ {\r
KeyData.Key.UnicodeChar = ConvertKeyboardScanCodeToEfiKey[Index].ShiftUnicodeChar;\r
//\r
// Need not return associated shift state if a class of printable characters that\r
//\r
KeyData.KeyState.KeyShiftState &= ~(EFI_LEFT_SHIFT_PRESSED | EFI_RIGHT_SHIFT_PRESSED);\r
}\r
+\r
//\r
// alphabetic key is affected by CapsLock State\r
//\r
if (ConsoleIn->CapsLock) {\r
- if (KeyData.Key.UnicodeChar >= L'a' && KeyData.Key.UnicodeChar <= L'z') {\r
- KeyData.Key.UnicodeChar = (UINT16) (KeyData.Key.UnicodeChar - L'a' + L'A');\r
- } else if (KeyData.Key.UnicodeChar >= L'A' && KeyData.Key.UnicodeChar <= L'Z') {\r
- KeyData.Key.UnicodeChar = (UINT16) (KeyData.Key.UnicodeChar - L'A' + L'a');\r
+ if ((KeyData.Key.UnicodeChar >= L'a') && (KeyData.Key.UnicodeChar <= L'z')) {\r
+ KeyData.Key.UnicodeChar = (UINT16)(KeyData.Key.UnicodeChar - L'a' + L'A');\r
+ } else if ((KeyData.Key.UnicodeChar >= L'A') && (KeyData.Key.UnicodeChar <= L'Z')) {\r
+ KeyData.Key.UnicodeChar = (UINT16)(KeyData.Key.UnicodeChar - L'A' + L'a');\r
}\r
}\r
+\r
break;\r
}\r
}\r
//\r
// distinguish numeric key pad keys' 'up symbol' and 'down symbol'\r
//\r
- if (ScanCode >= 0x47 && ScanCode <= 0x53) {\r
+ if ((ScanCode >= 0x47) && (ScanCode <= 0x53)) {\r
if (ConsoleIn->NumLock && !(ConsoleIn->LeftShift || ConsoleIn->RightShift) && !Extend0) {\r
KeyData.Key.ScanCode = SCAN_NULL;\r
- } else if (ScanCode != 0x4a && ScanCode != 0x4e) {\r
+ } else if ((ScanCode != 0x4a) && (ScanCode != 0x4e)) {\r
KeyData.Key.UnicodeChar = CHAR_NULL;\r
}\r
}\r
//\r
// If the key can not be converted then just return.\r
//\r
- if (KeyData.Key.ScanCode == SCAN_NULL && KeyData.Key.UnicodeChar == CHAR_NULL) {\r
+ if ((KeyData.Key.ScanCode == SCAN_NULL) && (KeyData.Key.UnicodeChar == CHAR_NULL)) {\r
if (!ConsoleIn->IsSupportPartialKey) {\r
- return ;\r
+ return;\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
- EFI_STATUS Status;\r
- EFI_STATUS Status1;\r
- UINT8 CommandByte;\r
- EFI_PS2_POLICY_PROTOCOL *Ps2Policy;\r
- UINT32 TryTime;\r
+ EFI_STATUS Status;\r
+ EFI_STATUS Status1;\r
+ UINT8 CommandByte;\r
+ EFI_PS2_POLICY_PROTOCOL *Ps2Policy;\r
+ UINT32 TryTime;\r
\r
- Status = EFI_SUCCESS;\r
- mEnableMouseInterface = TRUE;\r
- TryTime = 0;\r
+ Status = EFI_SUCCESS;\r
+ mEnableMouseInterface = TRUE;\r
+ TryTime = 0;\r
\r
//\r
// Get Ps2 policy to set this\r
//\r
gBS->LocateProtocol (\r
- &gEfiPs2PolicyProtocolGuid,\r
- NULL,\r
- (VOID **) &Ps2Policy\r
- );\r
+ &gEfiPs2PolicyProtocolGuid,\r
+ NULL,\r
+ (VOID **)&Ps2Policy\r
+ );\r
\r
REPORT_STATUS_CODE_WITH_DEVICE_PATH (\r
EFI_PROGRESS_CODE,\r
if ((KeyReadStatusRegister (ConsoleIn) & KEYBOARD_STATUS_REGISTER_HAS_OUTPUT_DATA) != 0) {\r
while (!EFI_ERROR (Status) && TryTime < KEYBOARD_MAX_TRY) {\r
Status = KeyboardRead (ConsoleIn, &CommandByte);\r
- TryTime ++;\r
+ TryTime++;\r
}\r
+\r
//\r
// Exceed the max try times. The device may be error.\r
//\r
goto Done;\r
}\r
}\r
+\r
//\r
// We should disable mouse interface during the initialization process\r
// since mouse device output could block keyboard device output in the\r
KeyboardError (ConsoleIn, L"\n\r");\r
goto Done;\r
}\r
+\r
//\r
// Test the mouse enabling bit\r
//\r
goto Done;\r
}\r
}\r
+\r
//\r
// Don't enable mouse interface later\r
//\r
mEnableMouseInterface = FALSE;\r
-\r
}\r
\r
if (Ps2Policy != NULL) {\r
Ps2Policy->Ps2InitHardware (ConsoleIn->Handle);\r
}\r
+\r
//\r
// Write 8042 Command Byte, set System Flag\r
// While at the same time:\r
//\r
// Clear Memory Scancode Buffer\r
//\r
- ConsoleIn->ScancodeQueue.Head = 0;\r
- ConsoleIn->ScancodeQueue.Tail = 0;\r
- ConsoleIn->EfiKeyQueue.Head = 0;\r
- ConsoleIn->EfiKeyQueue.Tail = 0;\r
+ ConsoleIn->ScancodeQueue.Head = 0;\r
+ ConsoleIn->ScancodeQueue.Tail = 0;\r
+ ConsoleIn->EfiKeyQueue.Head = 0;\r
+ ConsoleIn->EfiKeyQueue.Tail = 0;\r
ConsoleIn->EfiKeyQueueForNotify.Head = 0;\r
ConsoleIn->EfiKeyQueueForNotify.Tail = 0;\r
\r
);\r
goto Done;\r
}\r
+\r
//\r
// Keyboard reset with a BAT(Basic Assurance Test)\r
//\r
KeyboardError (ConsoleIn, L"Some specific value not acquired from 8042 controller!\n\r");\r
goto Done;\r
}\r
+\r
//\r
// wait for BAT completion code\r
//\r
- mWaitForValueTimeOut = KEYBOARD_BAT_TIMEOUT;\r
+ mWaitForValueTimeOut = KEYBOARD_BAT_TIMEOUT;\r
\r
- Status = KeyboardWaitForValue (ConsoleIn, KEYBOARD_8048_RETURN_8042_BAT_SUCCESS);\r
+ Status = KeyboardWaitForValue (ConsoleIn, KEYBOARD_8048_RETURN_8042_BAT_SUCCESS);\r
if (EFI_ERROR (Status)) {\r
KeyboardError (ConsoleIn, L"Keyboard self test failed!\n\r");\r
goto Done;\r
goto Done;\r
}\r
\r
- //\r
- // Clear Keyboard Scancode Buffer\r
- //\r
- Status = KeyboardWrite (ConsoleIn, KEYBOARD_8048_COMMAND_CLEAR_OUTPUT_DATA);\r
- if (EFI_ERROR (Status)) {\r
- KeyboardError (ConsoleIn, L"8042 controller data write error!\n\r");\r
- goto Done;\r
- }\r
-\r
- Status = KeyboardWaitForValue (ConsoleIn, KEYBOARD_8048_RETURN_8042_ACK);\r
- if (EFI_ERROR (Status)) {\r
- KeyboardError (ConsoleIn, L"Some specific value not acquired from 8042 controller!\n\r");\r
- goto Done;\r
- }\r
- //\r
- if (Ps2Policy != NULL) {\r
- if ((Ps2Policy->KeyboardLight & EFI_KEYBOARD_CAPSLOCK) == EFI_KEYBOARD_CAPSLOCK) {\r
- ConsoleIn->CapsLock = TRUE;\r
+ //\r
+ // Clear Keyboard Scancode Buffer\r
+ //\r
+ Status = KeyboardWrite (ConsoleIn, KEYBOARD_8048_COMMAND_CLEAR_OUTPUT_DATA);\r
+ if (EFI_ERROR (Status)) {\r
+ KeyboardError (ConsoleIn, L"8042 controller data write error!\n\r");\r
+ goto Done;\r
}\r
\r
- if ((Ps2Policy->KeyboardLight & EFI_KEYBOARD_NUMLOCK) == EFI_KEYBOARD_NUMLOCK) {\r
- ConsoleIn->NumLock = TRUE;\r
+ Status = KeyboardWaitForValue (ConsoleIn, KEYBOARD_8048_RETURN_8042_ACK);\r
+ if (EFI_ERROR (Status)) {\r
+ KeyboardError (ConsoleIn, L"Some specific value not acquired from 8042 controller!\n\r");\r
+ goto Done;\r
}\r
\r
- if ((Ps2Policy->KeyboardLight & EFI_KEYBOARD_SCROLLLOCK) == EFI_KEYBOARD_SCROLLLOCK) {\r
- ConsoleIn->ScrollLock = TRUE;\r
+ //\r
+ if (Ps2Policy != NULL) {\r
+ if ((Ps2Policy->KeyboardLight & EFI_KEYBOARD_CAPSLOCK) == EFI_KEYBOARD_CAPSLOCK) {\r
+ ConsoleIn->CapsLock = TRUE;\r
+ }\r
+\r
+ if ((Ps2Policy->KeyboardLight & EFI_KEYBOARD_NUMLOCK) == EFI_KEYBOARD_NUMLOCK) {\r
+ ConsoleIn->NumLock = TRUE;\r
+ }\r
+\r
+ if ((Ps2Policy->KeyboardLight & EFI_KEYBOARD_SCROLLLOCK) == EFI_KEYBOARD_SCROLLLOCK) {\r
+ ConsoleIn->ScrollLock = TRUE;\r
+ }\r
}\r
- }\r
- //\r
- // Update Keyboard Lights\r
- //\r
- Status = UpdateStatusLights (ConsoleIn);\r
- if (EFI_ERROR (Status)) {\r
- KeyboardError (ConsoleIn, L"Update keyboard status lights error!\n\r");\r
- goto Done;\r
+\r
+ //\r
+ // Update Keyboard Lights\r
+ //\r
+ Status = UpdateStatusLights (ConsoleIn);\r
+ if (EFI_ERROR (Status)) {\r
+ KeyboardError (ConsoleIn, L"Update keyboard status lights error!\n\r");\r
+ goto Done;\r
}\r
}\r
+\r
//\r
// At last, we can now enable the mouse interface if appropriate\r
//\r
} else {\r
return EFI_DEVICE_ERROR;\r
}\r
-\r
}\r
\r
-\r
/**\r
Check whether there is Ps/2 Keyboard device in system by 0xF4 Keyboard Command\r
If Keyboard receives 0xF4, it will respond with 'ACK'. If it doesn't respond, the device\r
BOOLEAN\r
EFIAPI\r
CheckKeyboardConnect (\r
- IN KEYBOARD_CONSOLE_IN_DEV *ConsoleIn\r
+ IN KEYBOARD_CONSOLE_IN_DEV *ConsoleIn\r
)\r
{\r
- EFI_STATUS Status;\r
- UINTN WaitForValueTimeOutBcakup;\r
+ EFI_STATUS Status;\r
+ UINTN WaitForValueTimeOutBcakup;\r
\r
//\r
// enable keyboard itself and wait for its ack\r
if (EFI_ERROR (Status)) {\r
return FALSE;\r
}\r
+\r
//\r
// wait for 1s\r
//\r
WaitForValueTimeOutBcakup = mWaitForValueTimeOut;\r
- mWaitForValueTimeOut = KEYBOARD_WAITFORVALUE_TIMEOUT;\r
- Status = KeyboardWaitForValue (\r
- ConsoleIn,\r
- KEYBOARD_CMDECHO_ACK\r
- );\r
+ mWaitForValueTimeOut = KEYBOARD_WAITFORVALUE_TIMEOUT;\r
+ Status = KeyboardWaitForValue (\r
+ ConsoleIn,\r
+ KEYBOARD_CMDECHO_ACK\r
+ );\r
mWaitForValueTimeOut = WaitForValueTimeOutBcakup;\r
\r
if (EFI_ERROR (Status)) {\r
return TRUE;\r
}\r
}\r
-\r