From 53cdd43979f70b01a4ba341b54a4aef595420dbf Mon Sep 17 00:00:00 2001 From: niruiyu Date: Wed, 22 Aug 2012 02:24:40 +0000 Subject: Change the EFI_BOOT_KEY_DATA definition to use macro instead of bit fields. Change the BDS module in IntelFrameworkModulePkg to use the new EFI_BOOT_KEY_DATA definition. Signed-off-by: Ruiyu Ni Reviewed-by: Eric Dong Reviewed-by: Kinney Michael D git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13659 6f19259b-4bc3-4df7-8a09-765794883524 --- IntelFrameworkModulePkg/Universal/BdsDxe/Hotkey.c | 26 +++----- IntelFrameworkModulePkg/Universal/BdsDxe/Hotkey.h | 80 ++++++++++++++++++++++- 2 files changed, 88 insertions(+), 18 deletions(-) (limited to 'IntelFrameworkModulePkg/Universal/BdsDxe') diff --git a/IntelFrameworkModulePkg/Universal/BdsDxe/Hotkey.c b/IntelFrameworkModulePkg/Universal/BdsDxe/Hotkey.c index d3bb1ef478..55b615d6d2 100644 --- a/IntelFrameworkModulePkg/Universal/BdsDxe/Hotkey.c +++ b/IntelFrameworkModulePkg/Universal/BdsDxe/Hotkey.c @@ -101,7 +101,7 @@ RegisterHotkey ( return EFI_INVALID_PARAMETER; } - KeyOptionSize = sizeof (EFI_KEY_OPTION) + KeyOption->KeyData.Options.InputKeyCount * sizeof (EFI_INPUT_KEY); + KeyOptionSize = sizeof (EFI_KEY_OPTION) + KEY_OPTION_INPUT_KEY_COUNT (KeyOption) * sizeof (EFI_INPUT_KEY); UpdateBootOption = FALSE; // @@ -143,9 +143,8 @@ RegisterHotkey ( return EFI_SUCCESS; } - if (KeyOption->KeyData.PackedValue == TempOption->KeyData.PackedValue) { - if (KeyOption->KeyData.Options.InputKeyCount == 0 || - CompareMem ( + if (KeyOption->KeyData == TempOption->KeyData) { + if (CompareMem ( ((UINT8 *) TempOption) + sizeof (EFI_KEY_OPTION), ((UINT8 *) KeyOption) + sizeof (EFI_KEY_OPTION), KeyOptionSize - sizeof (EFI_KEY_OPTION) @@ -551,7 +550,6 @@ HotkeyInsertList ( BDS_HOTKEY_OPTION *HotkeyLeft; BDS_HOTKEY_OPTION *HotkeyRight; UINTN Index; - EFI_BOOT_KEY_DATA KeyOptions; UINT32 KeyShiftStateLeft; UINT32 KeyShiftStateRight; EFI_INPUT_KEY *InputKey; @@ -564,35 +562,31 @@ HotkeyInsertList ( HotkeyLeft->Signature = BDS_HOTKEY_OPTION_SIGNATURE; HotkeyLeft->BootOptionNumber = KeyOption->BootOption; - - KeyOptions = KeyOption->KeyData; - - HotkeyLeft->CodeCount = (UINT8) KeyOptions.Options.InputKeyCount; + HotkeyLeft->CodeCount = (UINT8) KEY_OPTION_INPUT_KEY_COUNT (KeyOption); // // Map key shift state from KeyOptions to EFI_KEY_DATA.KeyState // KeyShiftStateRight = EFI_SHIFT_STATE_VALID; - if (KeyOptions.Options.ShiftPressed) { + if (KEY_OPTION_SHIFT_PRESSED (KeyOption)) { KeyShiftStateRight |= EFI_RIGHT_SHIFT_PRESSED; } - if (KeyOptions.Options.ControlPressed) { + if (KEY_OPTION_CONTROL_PRESSED (KeyOption)) { KeyShiftStateRight |= EFI_RIGHT_CONTROL_PRESSED; } - if (KeyOptions.Options.AltPressed) { + if (KEY_OPTION_ALT_PRESSED (KeyOption)) { KeyShiftStateRight |= EFI_RIGHT_ALT_PRESSED; } - if (KeyOptions.Options.LogoPressed) { + if (KEY_OPTION_LOGO_PRESSED (KeyOption)) { KeyShiftStateRight |= EFI_RIGHT_LOGO_PRESSED; } - if (KeyOptions.Options.MenuPressed) { + if (KEY_OPTION_MENU_PRESSED (KeyOption)) { KeyShiftStateRight |= EFI_MENU_KEY_PRESSED; } - if (KeyOptions.Options.SysReqPressed) { + if (KEY_OPTION_SYS_REQ_PRESSED (KeyOption)) { KeyShiftStateRight |= EFI_SYS_REQ_PRESSED; } - KeyShiftStateLeft = (KeyShiftStateRight & 0xffffff00) | ((KeyShiftStateRight & 0xff) << 1); InputKey = (EFI_INPUT_KEY *) (((UINT8 *) KeyOption) + sizeof (EFI_KEY_OPTION)); diff --git a/IntelFrameworkModulePkg/Universal/BdsDxe/Hotkey.h b/IntelFrameworkModulePkg/Universal/BdsDxe/Hotkey.h index f2c964e0c5..5df6014419 100644 --- a/IntelFrameworkModulePkg/Universal/BdsDxe/Hotkey.h +++ b/IntelFrameworkModulePkg/Universal/BdsDxe/Hotkey.h @@ -19,13 +19,89 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include "Bds.h" #include "String.h" -#define GET_BOOT_OPTION_SUPPORT_KEY_COUNT(a) (((a) & EFI_BOOT_OPTION_SUPPORT_COUNT) >> 8) #define SET_BOOT_OPTION_SUPPORT_KEY_COUNT(a, c) { \ - (a) = ((a) & ~EFI_BOOT_OPTION_SUPPORT_COUNT) | (((c) << 8) & EFI_BOOT_OPTION_SUPPORT_COUNT); \ + (a) = ((a) & ~EFI_BOOT_OPTION_SUPPORT_COUNT) | (((c) << LowBitSet32 (EFI_BOOT_OPTION_SUPPORT_COUNT)) & EFI_BOOT_OPTION_SUPPORT_COUNT); \ } #define BDS_HOTKEY_OPTION_SIGNATURE SIGNATURE_32 ('B', 'd', 'K', 'O') +/** + Get the revision of the EFI_KEY_OPTION structure. + + @param KeyOption Pointer to the EFI_KEY_OPTION structure. + + @return Revision. +**/ +#define KEY_OPTION_REVISION(KeyOption) ((KeyOption)->KeyData & EFI_KEY_OPTION_REVISION_MASK) + +/** + Get the actual number of entries in EFI_KEY_OPTION.Keys, from 0-3. + + @param KeyOption Pointer to the EFI_KEY_OPTION structure. + + @return Actual number of entries in EFI_KEY_OPTION.Keys. +**/ +#define KEY_OPTION_INPUT_KEY_COUNT(KeyOption) (((KeyOption)->KeyData & EFI_KEY_OPTION_INPUT_KEY_COUNT_MASK) >> LowBitSet32 (EFI_KEY_OPTION_INPUT_KEY_COUNT_MASK)) + +/** + Return whether the Shift key needs pressed. + + @param KeyOption Pointer to the EFI_KEY_OPTION structure. + + @retval TRUE Shift key needs pressed. + @retval FALSE Shift key needn't pressed. +**/ +#define KEY_OPTION_SHIFT_PRESSED(KeyOption) (BOOLEAN) (((KeyOption)->KeyData & EFI_KEY_OPTION_SHIFT_PRESSED_MASK) != 0) + +/** + Return whether the Control key needs pressed. + + @param KeyOption Pointer to the EFI_KEY_OPTION structure. + + @retval TRUE Control key needs pressed. + @retval FALSE Control key needn't pressed. +**/ +#define KEY_OPTION_CONTROL_PRESSED(KeyOption) (BOOLEAN) (((KeyOption)->KeyData & EFI_KEY_OPTION_CONTROL_PRESSED_MASK) != 0) + +/** + Return whether the Alt key needs pressed. + + @param KeyOption Pointer to the EFI_KEY_OPTION structure. + + @retval TRUE Alt key needs pressed. + @retval FALSE Alt key needn't pressed. +**/ +#define KEY_OPTION_ALT_PRESSED(KeyOption) (BOOLEAN) (((KeyOption)->KeyData & EFI_KEY_OPTION_ALT_PRESSED_MASK) != 0) + +/** + Return whether the Logo key needs pressed. + + @param KeyOption Pointer to the EFI_KEY_OPTION structure. + + @retval TRUE Logo key needs pressed. + @retval FALSE Logo key needn't pressed. +**/ +#define KEY_OPTION_LOGO_PRESSED(KeyOption) (BOOLEAN) (((KeyOption)->KeyData & EFI_KEY_OPTION_LOGO_PRESSED_MASK) != 0) + +/** + Return whether the Menu key needs pressed. + + @param KeyOption Pointer to the EFI_KEY_OPTION structure. + + @retval TRUE Menu key needs pressed. + @retval FALSE Menu key needn't pressed. +**/ +#define KEY_OPTION_MENU_PRESSED(KeyOption) (BOOLEAN) (((KeyOption)->KeyData & EFI_KEY_OPTION_MENU_PRESSED_MASK) != 0) + +/** + Return whether the SysReq key needs pressed. + + @param KeyOption Pointer to the EFI_KEY_OPTION structure. + + @retval TRUE SysReq key needs pressed. + @retval FALSE SysReq key needn't pressed. +**/ +#define KEY_OPTION_SYS_REQ_PRESSED(KeyOption) (BOOLEAN) (((KeyOption)->KeyData & EFI_KEY_OPTION_SYS_REQ_PRESSED_MASK) != 0) typedef struct { UINTN Signature; -- cgit v1.2.3