mirror of
				https://github.com/acidanthera/audk.git
				synced 2025-10-31 03:03:46 +01:00 
			
		
		
		
	Switch to the new MM communicate 2 protocol which supports both traditional and standalone MM. Signed-off-by: Ard Biesheuvel <ard.biesheuvel@arm.com> Reviewed-by: Liming Gao <liming.gao@intel.com> Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>
		
			
				
	
	
		
			197 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			197 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
| 
 | |
|   The internal header file includes the common header files, defines
 | |
|   internal structure and functions used by FTW module.
 | |
| 
 | |
| Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved. <BR>
 | |
| SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef __SMM_FTW_DXE_H__
 | |
| #define __SMM_FTW_DXE_H__
 | |
| 
 | |
| #include <PiDxe.h>
 | |
| 
 | |
| #include <Protocol/MmCommunication2.h>
 | |
| 
 | |
| #include <Library/UefiBootServicesTableLib.h>
 | |
| #include <Library/UefiDriverEntryPoint.h>
 | |
| #include <Library/DebugLib.h>
 | |
| #include <Library/BaseMemoryLib.h>
 | |
| #include <Library/UefiLib.h>
 | |
| #include <Library/BaseLib.h>
 | |
| #include <Library/MemoryAllocationLib.h>
 | |
| 
 | |
| #include <Guid/EventGroup.h>
 | |
| 
 | |
| #include "FaultTolerantWriteSmmCommon.h"
 | |
| 
 | |
| /**
 | |
|   Get the size of the largest block that can be updated in a fault-tolerant manner.
 | |
| 
 | |
|   @param[in]  This             Indicates a pointer to the calling context.
 | |
|   @param[out] BlockSize        A pointer to a caller-allocated UINTN that is
 | |
|                                updated to indicate the size of the largest block
 | |
|                                that can be updated.
 | |
| 
 | |
|   @retval EFI_SUCCESS          The function completed successfully.
 | |
|   @retval EFI_ABORTED          The function could not complete successfully.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| FtwGetMaxBlockSize (
 | |
|   IN EFI_FAULT_TOLERANT_WRITE_PROTOCOL      *This,
 | |
|   OUT UINTN                                 *BlockSize
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Allocates space for the protocol to maintain information about writes.
 | |
|   Since writes must be completed in a fault-tolerant manner and multiple
 | |
|   writes require more resources to be successful, this function
 | |
|   enables the protocol to ensure that enough space exists to track
 | |
|   information about upcoming writes.
 | |
| 
 | |
|   @param[in]  This             A pointer to the calling context.
 | |
|   @param[in]  CallerId         The GUID identifying the write.
 | |
|   @param[in]  PrivateDataSize  The size of the caller's private data  that must be
 | |
|                                recorded for each write.
 | |
|   @param[in]  NumberOfWrites   The number of fault tolerant block writes that will
 | |
|                                need to occur.
 | |
| 
 | |
|   @retval EFI_SUCCESS          The function completed successfully
 | |
|   @retval EFI_ABORTED          The function could not complete successfully.
 | |
|   @retval EFI_ACCESS_DENIED    Not all allocated writes have been completed.  All
 | |
|                                writes must be completed or aborted before another
 | |
|                                fault tolerant write can occur.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| FtwAllocate (
 | |
|   IN EFI_FAULT_TOLERANT_WRITE_PROTOCOL      *This,
 | |
|   IN EFI_GUID                               *CallerId,
 | |
|   IN UINTN                                  PrivateDataSize,
 | |
|   IN UINTN                                  NumberOfWrites
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Starts a target block update. This records information about the write
 | |
|   in fault tolerant storage, and will complete the write in a recoverable
 | |
|   manner, ensuring at all times that either the original contents or
 | |
|   the modified contents are available.
 | |
| 
 | |
|   @param[in]  This             The calling context.
 | |
|   @param[in]  Lba              The logical block address of the target block.
 | |
|   @param[in]  Offset           The offset within the target block to place the
 | |
|                                data.
 | |
|   @param[in]  Length           The number of bytes to write to the target block.
 | |
|   @param[in]  PrivateData      A pointer to private data that the caller requires
 | |
|                                to complete any pending writes in the event of a
 | |
|                                fault.
 | |
|   @param[in]  FvBlockHandle    The handle of FVB protocol that provides services
 | |
|                                for reading, writing, and erasing the target block.
 | |
|   @param[in]  Buffer           The data to write.
 | |
| 
 | |
|   @retval EFI_SUCCESS          The function completed successfully.
 | |
|   @retval EFI_ABORTED          The function could not complete successfully.
 | |
|   @retval EFI_BAD_BUFFER_SIZE  The write would span a block boundary, which is not
 | |
|                                a valid action.
 | |
|   @retval EFI_ACCESS_DENIED    No writes have been allocated.
 | |
|   @retval EFI_NOT_READY        The last write has not been completed. Restart()
 | |
|                                must be called to complete it.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| FtwWrite (
 | |
|   IN EFI_FAULT_TOLERANT_WRITE_PROTOCOL      *This,
 | |
|   IN EFI_LBA                                Lba,
 | |
|   IN UINTN                                  Offset,
 | |
|   IN UINTN                                  Length,
 | |
|   IN VOID                                   *PrivateData,
 | |
|   IN EFI_HANDLE                             FvBlockHandle,
 | |
|   IN VOID                                   *Buffer
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Restarts a previously interrupted write. The caller must provide the
 | |
|   block protocol needed to complete the interrupted write.
 | |
| 
 | |
|   @param[in]  This             The calling context.
 | |
|   @param[in]  FvBlockHandle    The handle of FVB protocol that provides services.
 | |
| 
 | |
|   @retval EFI_SUCCESS          The function completed successfully.
 | |
|   @retval EFI_ABORTED          The function could not complete successfully.
 | |
|   @retval EFI_ACCESS_DENIED    No pending writes exist.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| FtwRestart (
 | |
|   IN EFI_FAULT_TOLERANT_WRITE_PROTOCOL      *This,
 | |
|   IN EFI_HANDLE                             FvBlockHandle
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Aborts all previously allocated writes.
 | |
| 
 | |
|   @param  This                 The calling context.
 | |
| 
 | |
|   @retval EFI_SUCCESS          The function completed successfully.
 | |
|   @retval EFI_ABORTED          The function could not complete successfully.
 | |
|   @retval EFI_NOT_FOUND        No allocated writes exist.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| FtwAbort (
 | |
|   IN EFI_FAULT_TOLERANT_WRITE_PROTOCOL      *This
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Starts a target block update. This function records information about the write
 | |
|   in fault-tolerant storage and completes the write in a recoverable
 | |
|   manner, ensuring at all times that either the original contents or
 | |
|   the modified contents are available.
 | |
| 
 | |
|   @param[in]      This            Indicates a pointer to the calling context.
 | |
|   @param[out]     CallerId        The GUID identifying the last write.
 | |
|   @param[out]     Lba             The logical block address of the last write.
 | |
|   @param[out]     Offset          The offset within the block of the last write.
 | |
|   @param[out]     Length          The length of the last write.
 | |
|   @param[in, out] PrivateDataSize On input, the size of the PrivateData buffer. On
 | |
|                                   output, the size of the private data stored for
 | |
|                                   this write.
 | |
|   @param[out]     PrivateData     A pointer to a buffer. The function will copy
 | |
|                                   PrivateDataSize bytes from the private data stored
 | |
|                                   for this write.
 | |
|   @param[out]     Complete        A Boolean value with TRUE indicating that the write
 | |
|                                   was completed.
 | |
| 
 | |
|   @retval EFI_SUCCESS             The function completed successfully.
 | |
|   @retval EFI_ABORTED             The function could not complete successfully.
 | |
|   @retval EFI_NOT_FOUND           No allocated writes exist.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| FtwGetLastWrite (
 | |
|   IN EFI_FAULT_TOLERANT_WRITE_PROTOCOL      *This,
 | |
|   OUT EFI_GUID                              *CallerId,
 | |
|   OUT EFI_LBA                               *Lba,
 | |
|   OUT UINTN                                 *Offset,
 | |
|   OUT UINTN                                 *Length,
 | |
|   IN OUT UINTN                              *PrivateDataSize,
 | |
|   OUT VOID                                  *PrivateData,
 | |
|   OUT BOOLEAN                               *Complete
 | |
|   );
 | |
| 
 | |
| #endif
 |