REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the MdeModulePkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
		
			
				
	
	
		
			165 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			165 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
The EFI_SWAP_ADDRESS_RANGE_PROTOCOL is used to abstract the swap operation of boot block
 | 
						|
and backup block of FV. This swap is especially needed when updating the boot block of FV. If a
 | 
						|
power failure happens during the boot block update, the swapped backup block (now the boot block)
 | 
						|
can boot the machine with the old boot block backed up in it. The swap operation is platform dependent, so
 | 
						|
other protocols such as FTW (Fault Tolerant Write) should use this protocol instead of handling hardware directly.
 | 
						|
 | 
						|
Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
 | 
						|
SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef _EFI_SWAP_ADDRESS_RANGE_PROTOCOL_H_
 | 
						|
#define _EFI_SWAP_ADDRESS_RANGE_PROTOCOL_H_
 | 
						|
 | 
						|
#define EFI_SWAP_ADDRESS_RANGE_PROTOCOL_GUID \
 | 
						|
  { \
 | 
						|
    0x1259f60d, 0xb754, 0x468e, {0xa7, 0x89, 0x4d, 0xb8, 0x5d, 0x55, 0xe8, 0x7e } \
 | 
						|
  }
 | 
						|
 | 
						|
//
 | 
						|
// Forward reference for pure ANSI compatability
 | 
						|
//
 | 
						|
typedef struct _EFI_SWAP_ADDRESS_RANGE_PROTOCOL EFI_SWAP_ADDRESS_RANGE_PROTOCOL;
 | 
						|
 | 
						|
#define EFI_UNSUPPORT_LOCK  0
 | 
						|
#define EFI_SOFTWARE_LOCK   1
 | 
						|
#define EFI_HARDWARE_LOCK   2
 | 
						|
 | 
						|
typedef UINT8 EFI_SWAP_LOCK_CAPABILITY;
 | 
						|
 | 
						|
//
 | 
						|
// Protocol APIs
 | 
						|
//
 | 
						|
 | 
						|
/**
 | 
						|
  This function gets the address range location of
 | 
						|
  boot block and backup block.
 | 
						|
 | 
						|
  @param This             Indicates the calling context.
 | 
						|
  @param BootBlockBase    The base address of current boot block.
 | 
						|
  @param BootBlockSize    The size (in bytes) of current boot block.
 | 
						|
  @param BackupBlockBase  The base address of current backup block.
 | 
						|
  @param BackupBlockSize  The size (in bytes) of current backup block.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS  The call was successful.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_GET_RANGE_LOCATION)(
 | 
						|
  IN EFI_SWAP_ADDRESS_RANGE_PROTOCOL            *This,
 | 
						|
  OUT EFI_PHYSICAL_ADDRESS                      *BootBlockBase,
 | 
						|
  OUT UINTN                                     *BootBlockSize,
 | 
						|
  OUT EFI_PHYSICAL_ADDRESS                      *BackupBlockBase,
 | 
						|
  OUT UINTN                                     *BackupBlockSize
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This service checks if the boot block and backup block has been swapped.
 | 
						|
 | 
						|
  @param This          Indicates the calling context.
 | 
						|
  @param SwapState     True if the boot block and backup block has been swapped.
 | 
						|
                       False if the boot block and backup block has not been swapped.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS  The call was successful.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_GET_SWAP_STATE)(
 | 
						|
  IN EFI_SWAP_ADDRESS_RANGE_PROTOCOL            *This,
 | 
						|
  OUT BOOLEAN                                   *SwapState
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This service swaps the boot block and backup block, or swaps them back.
 | 
						|
 | 
						|
  It also acquires and releases software swap lock during operation. The setting of the new swap state
 | 
						|
  is not affected by the old swap state.
 | 
						|
 | 
						|
  @param This            Indicates the calling context.
 | 
						|
  @param NewSwapState    True to swap real boot block and backup block, False to swap them back.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS  The call was successful.
 | 
						|
  @retval EFI_ABORTED  Set swap state error.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_SET_SWAP_STATE)(
 | 
						|
  IN EFI_SWAP_ADDRESS_RANGE_PROTOCOL            *This,
 | 
						|
  IN BOOLEAN                                    NewSwapState
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This service checks if a Real Time Clock (RTC) power failure happened.
 | 
						|
 | 
						|
  If parameter RtcPowerFailed is true after the function returns, RTC power supply failed or was removed.
 | 
						|
  It is recommended to check RTC power status before calling GetSwapState().
 | 
						|
 | 
						|
  @param This             Indicates the calling context.
 | 
						|
  @param RtcPowerFailed   True if the RTC (Real Time Clock) power failed or was removed.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS The call was successful.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_GET_RTC_POWER_STATUS)(
 | 
						|
  IN EFI_SWAP_ADDRESS_RANGE_PROTOCOL            *This,
 | 
						|
  OUT BOOLEAN                                   *RtcPowerFailed
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This service returns all lock methods for swap operations that the current platform
 | 
						|
  supports. Could be software lock, hardware lock, or unsupport lock.
 | 
						|
  Note that software and hardware lock methods can be used simultaneously.
 | 
						|
 | 
						|
  @param This             Indicates the calling context.
 | 
						|
  @param LockCapability   The current lock method for swap operations.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS The call was successful.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_GET_SWAP_LOCK_CAPABILITY)(
 | 
						|
  IN EFI_SWAP_ADDRESS_RANGE_PROTOCOL            *This,
 | 
						|
  OUT EFI_SWAP_LOCK_CAPABILITY                  *LockCapability
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This service is used to acquire or release appointed kind of lock for Swap Address Range operations.
 | 
						|
 | 
						|
  Note that software and hardware lock mothod can be used simultaneously.
 | 
						|
 | 
						|
  @param This              Indicates the calling context.
 | 
						|
  @param LockCapability    Indicates which lock to acquire or release.
 | 
						|
  @param NewLockState      True to acquire lock; False to release lock.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS The call was successful.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_SET_SWAP_LOCK)(
 | 
						|
  IN EFI_SWAP_ADDRESS_RANGE_PROTOCOL            *This,
 | 
						|
  IN EFI_SWAP_LOCK_CAPABILITY                   LockCapability,
 | 
						|
  IN BOOLEAN                                    NewLockState
 | 
						|
  );
 | 
						|
 | 
						|
struct _EFI_SWAP_ADDRESS_RANGE_PROTOCOL {
 | 
						|
  EFI_GET_RANGE_LOCATION          GetRangeLocation;      // has output parameters for base and length
 | 
						|
  EFI_GET_SWAP_STATE              GetSwapState;          // are ranges swapped or not
 | 
						|
  EFI_SET_SWAP_STATE              SetSwapState;          // swap or unswap ranges
 | 
						|
  EFI_GET_RTC_POWER_STATUS        GetRtcPowerStatus;     // checks RTC battery, or whatever...
 | 
						|
  EFI_GET_SWAP_LOCK_CAPABILITY    GetSwapLockCapability; // Get TOP_SWAP lock capability,
 | 
						|
  EFI_SET_SWAP_LOCK               SetSwapLock;           // Set TOP_SWAP lock state
 | 
						|
};
 | 
						|
 | 
						|
extern EFI_GUID  gEfiSwapAddressRangeProtocolGuid;
 | 
						|
 | 
						|
#endif
 |