text: /** @file
    Provides a way for 3rd party applications to register themselves for launch by the
    Boot Manager based on hot key
  
  Copyright (c) 2007 - 2013, Intel Corporation. All rights reserved.<BR>
  SPDX-License-Identifier: BSD-2-Clause-Patent
  
  **/
  
  #ifndef _HOTKEY_H_
  #define _HOTKEY_H_
  
  #include "Bds.h"
  #include "String.h"
  
  #define SET_BOOT_OPTION_SUPPORT_KEY_COUNT(a, c) {  \
        (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')
  
  
  typedef struct {
    UINTN                     Signature;
    LIST_ENTRY                Link;
  
    VOID                      *NotifyHandle;
    UINT16                    BootOptionNumber;
    UINT8                     CodeCount;
    UINT8                     WaitingKey;
    EFI_KEY_DATA              KeyData[3];
  } BDS_HOTKEY_OPTION;
  
  #define BDS_HOTKEY_OPTION_FROM_LINK(a) CR (a, BDS_HOTKEY_OPTION, Link, BDS_HOTKEY_OPTION_SIGNATURE)
  
  /**
  
    Process all the "Key####" variables, associate Hotkeys with corresponding Boot Options.
  
  
    @param VOID
  
    @retval  EFI_SUCCESS    Hotkey services successfully initialized.
  
  **/
  EFI_STATUS
  InitializeHotkeyService (
    VOID
    );
  
  /**
    Try to boot the boot option triggered by hotkey.
    @retval  EFI_SUCCESS             There is HotkeyBootOption & it is processed
    @retval  EFI_NOT_FOUND           There is no HotkeyBootOption
  **/
  EFI_STATUS
  HotkeyBoot (
    VOID
    );
  
  #endif
  