EDKII implementation protocol should be with EDKII_ prefix. V2: add gEdkiiFormBrowserExProtocolGuid to align its structure name. Cc: Eric Dong <eric.dong@intel.com> Cc: Feng Tian <feng.tian@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Liming Gao <liming.gao@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com>
		
			
				
	
	
		
			157 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			157 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  Extension Form Browser Protocol provides the services that can be used to 
 | 
						|
  register the different hot keys for the standard Browser actions described in UEFI specification.
 | 
						|
 | 
						|
Copyright (c) 2011 - 2016, Intel Corporation. All rights reserved.<BR>
 | 
						|
This program and the accompanying materials are licensed and made available under 
 | 
						|
the terms and conditions of the BSD License that accompanies this distribution.  
 | 
						|
The full text of the license may be found at
 | 
						|
http://opensource.org/licenses/bsd-license.php.                                            
 | 
						|
 | 
						|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     
 | 
						|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef __FORM_BROWSER_EXTENSION_H__
 | 
						|
#define __FORM_BROWSER_EXTENSION_H__
 | 
						|
 | 
						|
#define FORM_BROWSER_EXTENSION_PROTOCOL_GUID  \
 | 
						|
  { 0x1f73b18d, 0x4630, 0x43c1, { 0xa1, 0xde, 0x6f, 0x80, 0x85, 0x5d, 0x7d, 0xa4 } }
 | 
						|
 | 
						|
typedef struct _EDKII_FORM_BROWSER_EXTENSION_PROTOCOL   EDKII_FORM_BROWSER_EXTENSION_PROTOCOL;
 | 
						|
 | 
						|
//
 | 
						|
// To be compatible, keep EFI_FORM_BROWSER_EXTENSION_PROTOCOL definition
 | 
						|
//
 | 
						|
typedef EDKII_FORM_BROWSER_EXTENSION_PROTOCOL   EFI_FORM_BROWSER_EXTENSION_PROTOCOL;
 | 
						|
 | 
						|
//
 | 
						|
// Return value of SAVE_REMINDER() that describes whether the changed data is saved or discarded.
 | 
						|
//
 | 
						|
#define BROWSER_NO_CHANGES          0
 | 
						|
#define BROWSER_SAVE_CHANGES        1
 | 
						|
#define BROWSER_DISCARD_CHANGES     2
 | 
						|
#define BROWSER_KEEP_CURRENT        3
 | 
						|
 | 
						|
//
 | 
						|
// Browser actions. They can be cominbed together. 
 | 
						|
// If more than one actions are specified, the action with low bit will be executed first. 
 | 
						|
//
 | 
						|
#define BROWSER_ACTION_UNREGISTER   0
 | 
						|
#define BROWSER_ACTION_DISCARD      BIT0
 | 
						|
#define BROWSER_ACTION_DEFAULT      BIT1
 | 
						|
#define BROWSER_ACTION_SUBMIT       BIT2
 | 
						|
#define BROWSER_ACTION_RESET        BIT3
 | 
						|
#define BROWSER_ACTION_EXIT         BIT4
 | 
						|
#define BROWSER_ACTION_GOTO         BIT5
 | 
						|
 | 
						|
//
 | 
						|
// Scope for Browser action. It may be Form, FormSet or System level.
 | 
						|
//
 | 
						|
typedef enum {
 | 
						|
  FormLevel,
 | 
						|
  FormSetLevel,
 | 
						|
  SystemLevel,
 | 
						|
  MaxLevel
 | 
						|
} BROWSER_SETTING_SCOPE;
 | 
						|
 | 
						|
/**
 | 
						|
  Configure what scope the hot key will impact.
 | 
						|
  All hot keys have the same scope. The mixed hot keys with the different level are not supported.
 | 
						|
  If no scope is set, the default scope will be FormSet level.
 | 
						|
  After all registered hot keys are removed, previous Scope can reset to another level.
 | 
						|
  
 | 
						|
  @param[in] Scope               Scope level to be set. 
 | 
						|
  
 | 
						|
  @retval EFI_SUCCESS            Scope is set correctly.
 | 
						|
  @retval EFI_INVALID_PARAMETER  Scope is not the valid value specified in BROWSER_SETTING_SCOPE. 
 | 
						|
  @retval EFI_UNSPPORTED         Scope level is different from current one that the registered hot keys have.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *SET_SCOPE) (
 | 
						|
  IN BROWSER_SETTING_SCOPE Scope
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Register the hot key with its browser action, or unregistered the hot key.
 | 
						|
  If the action value is zero, the hot key will be unregistered if it has been registered.
 | 
						|
  If the same hot key has been registered, the new action and help string will override the previous ones.
 | 
						|
  
 | 
						|
  @param[in] KeyData     A pointer to a buffer that describes the keystroke
 | 
						|
                         information for the hot key. Its type is EFI_INPUT_KEY to 
 | 
						|
                         be supported by all ConsoleIn devices.
 | 
						|
  @param[in] Action      Action value that describes what action will be trigged when the hot key is pressed. 
 | 
						|
  @param[in] DefaultId   Specifies the type of defaults to retrieve, which is only for DEFAULT action.
 | 
						|
  @param[in] HelpString  Help string that describes the hot key information.
 | 
						|
                         Its value may be NULL for the unregistered hot key.
 | 
						|
  
 | 
						|
  @retval EFI_SUCCESS            Hot key is registered or unregistered.
 | 
						|
  @retval EFI_INVALID_PARAMETER  KeyData is NULL.
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *REGISTER_HOT_KEY) (
 | 
						|
  IN EFI_INPUT_KEY *KeyData,
 | 
						|
  IN UINT32        Action,
 | 
						|
  IN UINT16        DefaultId,
 | 
						|
  IN EFI_STRING    HelpString OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This handler is responsbile for the left things on normal boot after all UI forms are closed.
 | 
						|
  For example, it can continue to boot the first boot option. 
 | 
						|
 | 
						|
  It will be used only when EXIT action is trigged as system level.
 | 
						|
**/
 | 
						|
typedef
 | 
						|
VOID
 | 
						|
(EFIAPI *EXIT_HANDLER) (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Register Exit handler function. 
 | 
						|
  When more than one handler function is registered, the latter one will override the previous one. 
 | 
						|
  When NULL handler is specified, the previous Exit handler will be unregistered. 
 | 
						|
  
 | 
						|
  @param[in] Handler      Pointer to handler function. 
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
VOID
 | 
						|
(EFIAPI *REGISTER_EXIT_HANDLER) (
 | 
						|
  IN EXIT_HANDLER Handler
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Create reminder to let user to choose save or discard the changed browser data.
 | 
						|
  Caller can use it to actively check the changed browser data.
 | 
						|
 | 
						|
  @retval BROWSER_NO_CHANGES       No browser data is changed.
 | 
						|
  @retval BROWSER_SAVE_CHANGES     The changed browser data is saved.
 | 
						|
  @retval BROWSER_DISCARD_CHANGES  The changed browser data is discard.
 | 
						|
  @retval BROWSER_KEEP_CURRENT     Browser keep current changes.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
UINT32
 | 
						|
(EFIAPI *SAVE_REMINDER)(
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
struct _EDKII_FORM_BROWSER_EXTENSION_PROTOCOL {
 | 
						|
  SET_SCOPE              SetScope;
 | 
						|
  REGISTER_HOT_KEY       RegisterHotKey;
 | 
						|
  REGISTER_EXIT_HANDLER  RegiserExitHandler;
 | 
						|
  SAVE_REMINDER          SaveReminder;
 | 
						|
};
 | 
						|
 | 
						|
extern EFI_GUID gEfiFormBrowserExProtocolGuid;
 | 
						|
extern EFI_GUID gEdkiiFormBrowserExProtocolGuid;
 | 
						|
 | 
						|
#endif
 | 
						|
 |