return EFI_INVALID_PARAMETER;\r
}\r
\r
- KeyOptionSize = sizeof (EFI_KEY_OPTION) + GET_KEY_CODE_COUNT (KeyOption->KeyData.PackedValue) * sizeof (EFI_INPUT_KEY);\r
+ KeyOptionSize = sizeof (EFI_KEY_OPTION) + KeyOption->KeyData.Options.InputKeyCount * sizeof (EFI_INPUT_KEY);\r
UpdateBootOption = FALSE;\r
\r
//\r
- // check whether HotKey conflict with keys used by Setup Browser\r
+ // Check whether HotKey conflict with keys used by Setup Browser\r
//\r
KeyOrder = BdsLibGetVariableAndSize (\r
VAR_KEY_ORDER,\r
}\r
\r
if (KeyOption->KeyData.PackedValue == TempOption->KeyData.PackedValue) {\r
- if (GET_KEY_CODE_COUNT (KeyOption->KeyData.PackedValue) == 0 ||\r
+ if (KeyOption->KeyData.Options.InputKeyCount == 0 ||\r
CompareMem (\r
((UINT8 *) TempOption) + sizeof (EFI_KEY_OPTION),\r
((UINT8 *) KeyOption) + sizeof (EFI_KEY_OPTION),\r
@return EFI_NOT_FOUND Fail to find boot option variable.\r
**/\r
EFI_STATUS\r
+EFIAPI\r
HotkeyCallback (\r
IN EFI_KEY_DATA *KeyData\r
)\r
HotkeyData = &Hotkey->KeyData[Hotkey->WaitingKey];\r
if ((KeyData->Key.ScanCode == HotkeyData->Key.ScanCode) &&\r
(KeyData->Key.UnicodeChar == HotkeyData->Key.UnicodeChar) &&\r
- ((HotkeyData->KeyState.KeyShiftState & EFI_SHIFT_STATE_VALID) ? (KeyData->KeyState.KeyShiftState == HotkeyData->KeyState.KeyShiftState) : 1)) {\r
+ ((HotkeyData->KeyState.KeyShiftState & EFI_SHIFT_STATE_VALID) ? (KeyData->KeyState.KeyShiftState == HotkeyData->KeyState.KeyShiftState) : TRUE)) {\r
//\r
// Receive an expecting key stroke\r
//\r
BDS_HOTKEY_OPTION *HotkeyLeft;\r
BDS_HOTKEY_OPTION *HotkeyRight;\r
UINTN Index;\r
- UINT32 KeyOptions;\r
+ EFI_BOOT_KEY_DATA KeyOptions;\r
UINT32 KeyShiftStateLeft;\r
UINT32 KeyShiftStateRight;\r
EFI_INPUT_KEY *InputKey;\r
HotkeyLeft->Signature = BDS_HOTKEY_OPTION_SIGNATURE;\r
HotkeyLeft->BootOptionNumber = KeyOption->BootOption;\r
\r
- KeyOptions = KeyOption->KeyData.PackedValue;\r
+ KeyOptions = KeyOption->KeyData;\r
\r
- HotkeyLeft->CodeCount = (UINT8) GET_KEY_CODE_COUNT (KeyOptions);\r
+ HotkeyLeft->CodeCount = (UINT8) KeyOptions.Options.InputKeyCount;\r
\r
//\r
// Map key shift state from KeyOptions to EFI_KEY_DATA.KeyState\r
//\r
- KeyShiftStateRight = (KeyOptions & EFI_KEY_OPTION_SHIFT) |\r
- ((KeyOptions & EFI_KEY_OPTION_CONTROL) << 1) |\r
- ((KeyOptions & EFI_KEY_OPTION_ALT) << 2) |\r
- ((KeyOptions & EFI_KEY_OPTION_LOGO) << 3) |\r
- ((KeyOptions & (EFI_KEY_OPTION_MENU | EFI_KEY_OPTION_SYSREQ)) << 4) |\r
- EFI_SHIFT_STATE_VALID;\r
+ KeyShiftStateRight = EFI_SHIFT_STATE_VALID;\r
+ if (KeyOptions.Options.ShiftPressed) {\r
+ KeyShiftStateRight |= EFI_RIGHT_SHIFT_PRESSED;\r
+ }\r
+ if (KeyOptions.Options.ControlPressed) {\r
+ KeyShiftStateRight |= EFI_RIGHT_CONTROL_PRESSED;\r
+ }\r
+ if (KeyOptions.Options.AltPressed) {\r
+ KeyShiftStateRight |= EFI_RIGHT_ALT_PRESSED;\r
+ }\r
+ if (KeyOptions.Options.LogoPressed) {\r
+ KeyShiftStateRight |= EFI_RIGHT_LOGO_PRESSED;\r
+ }\r
+ if (KeyOptions.Options.MenuPressed) {\r
+ KeyShiftStateRight |= EFI_MENU_KEY_PRESSED;\r
+ }\r
+ if (KeyOptions.Options.SysReqPressed) {\r
+ KeyShiftStateRight |= EFI_SYS_REQ_PRESSED;\r
+ }\r
+\r
\r
KeyShiftStateLeft = (KeyShiftStateRight & 0xffffff00) | ((KeyShiftStateRight & 0xff) << 1);\r
\r
\r
//\r
// Export our capability - EFI_BOOT_OPTION_SUPPORT_KEY and EFI_BOOT_OPTION_SUPPORT_APP\r
+ // with maximum number of key presses of 3\r
//\r
BootOptionSupport = EFI_BOOT_OPTION_SUPPORT_KEY | EFI_BOOT_OPTION_SUPPORT_APP;\r
+ SET_BOOT_OPTION_SUPPORT_KEY_COUNT (BootOptionSupport, 3);\r
Status = gRT->SetVariable (\r
L"BootOptionSupport",\r
&gEfiGlobalVariableGuid,\r
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
+ EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
sizeof (UINT32),\r
&BootOptionSupport\r
);\r