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>
		
			
				
	
	
		
			511 lines
		
	
	
		
			21 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			511 lines
		
	
	
		
			21 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
 | 
						|
  Copyright (c) 2015 - 2017, Intel Corporation. All rights reserved.<BR>
 | 
						|
  SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef _SD_BLOCK_IO_PEI_H_
 | 
						|
#define _SD_BLOCK_IO_PEI_H_
 | 
						|
 | 
						|
#include <PiPei.h>
 | 
						|
 | 
						|
#include <Ppi/SdMmcHostController.h>
 | 
						|
#include <Ppi/BlockIo.h>
 | 
						|
#include <Ppi/BlockIo2.h>
 | 
						|
#include <Ppi/IoMmu.h>
 | 
						|
#include <Ppi/EndOfPeiPhase.h>
 | 
						|
 | 
						|
#include <Library/DebugLib.h>
 | 
						|
#include <Library/BaseLib.h>
 | 
						|
#include <Library/BaseMemoryLib.h>
 | 
						|
#include <Library/MemoryAllocationLib.h>
 | 
						|
#include <Library/IoLib.h>
 | 
						|
#include <Library/TimerLib.h>
 | 
						|
#include <Library/PeiServicesLib.h>
 | 
						|
 | 
						|
#include <IndustryStandard/Sd.h>
 | 
						|
 | 
						|
typedef struct _SD_PEIM_HC_PRIVATE_DATA  SD_PEIM_HC_PRIVATE_DATA;
 | 
						|
typedef struct _SD_PEIM_HC_SLOT          SD_PEIM_HC_SLOT;
 | 
						|
typedef struct _SD_TRB                   SD_TRB;
 | 
						|
 | 
						|
#include "SdHci.h"
 | 
						|
#include "SdHcMem.h"
 | 
						|
 | 
						|
#define SD_PEIM_SIG       SIGNATURE_32 ('S', 'D', 'C', 'P')
 | 
						|
#define SD_PEIM_SLOT_SIG  SIGNATURE_32 ('S', 'D', 'C', 'S')
 | 
						|
 | 
						|
#define SD_PEIM_MAX_SLOTS  6
 | 
						|
 | 
						|
struct _SD_PEIM_HC_SLOT {
 | 
						|
  UINT32                     Signature;
 | 
						|
  EFI_PEI_BLOCK_IO2_MEDIA    Media;
 | 
						|
 | 
						|
  UINTN                      SdHcBase;
 | 
						|
  SD_HC_SLOT_CAP             Capability;
 | 
						|
  SD_CSD                     Csd;
 | 
						|
  BOOLEAN                    SectorAddressing;
 | 
						|
  SD_PEIM_HC_PRIVATE_DATA    *Private;
 | 
						|
};
 | 
						|
 | 
						|
struct _SD_PEIM_HC_PRIVATE_DATA {
 | 
						|
  UINT32                            Signature;
 | 
						|
  SD_PEIM_MEM_POOL                  *Pool;
 | 
						|
  EFI_PEI_RECOVERY_BLOCK_IO_PPI     BlkIoPpi;
 | 
						|
  EFI_PEI_RECOVERY_BLOCK_IO2_PPI    BlkIo2Ppi;
 | 
						|
  EFI_PEI_PPI_DESCRIPTOR            BlkIoPpiList;
 | 
						|
  EFI_PEI_PPI_DESCRIPTOR            BlkIo2PpiList;
 | 
						|
 | 
						|
  //
 | 
						|
  // EndOfPei callback is used to do the cleanups before exit of PEI phase.
 | 
						|
  //
 | 
						|
  EFI_PEI_NOTIFY_DESCRIPTOR         EndOfPeiNotifyList;
 | 
						|
 | 
						|
  SD_PEIM_HC_SLOT                   Slot[SD_PEIM_MAX_SLOTS];
 | 
						|
  UINT8                             SlotNum;
 | 
						|
  UINT8                             TotalBlkIoDevices;
 | 
						|
};
 | 
						|
 | 
						|
#define SD_TIMEOUT  MultU64x32((UINT64)(3), 1000000)
 | 
						|
#define GET_SD_PEIM_HC_PRIVATE_DATA_FROM_THIS(a)         CR (a, SD_PEIM_HC_PRIVATE_DATA, BlkIoPpi, SD_PEIM_SIG)
 | 
						|
#define GET_SD_PEIM_HC_PRIVATE_DATA_FROM_THIS2(a)        CR (a, SD_PEIM_HC_PRIVATE_DATA, BlkIo2Ppi, SD_PEIM_SIG)
 | 
						|
#define GET_SD_PEIM_HC_PRIVATE_DATA_FROM_THIS_NOTIFY(a)  CR (a, SD_PEIM_HC_PRIVATE_DATA, EndOfPeiNotifyList, SD_PEIM_SIG)
 | 
						|
 | 
						|
struct _SD_TRB {
 | 
						|
  SD_PEIM_HC_SLOT         *Slot;
 | 
						|
  UINT16                  BlockSize;
 | 
						|
 | 
						|
  SD_COMMAND_PACKET       *Packet;
 | 
						|
  VOID                    *Data;
 | 
						|
  UINT32                  DataLen;
 | 
						|
  BOOLEAN                 Read;
 | 
						|
  EFI_PHYSICAL_ADDRESS    DataPhy;
 | 
						|
  VOID                    *DataMap;
 | 
						|
  SD_HC_TRANSFER_MODE     Mode;
 | 
						|
 | 
						|
  UINT64                  Timeout;
 | 
						|
 | 
						|
  SD_HC_ADMA_DESC_LINE    *AdmaDesc;
 | 
						|
  UINTN                   AdmaDescSize;
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
  Gets the count of block I/O devices that one specific block driver detects.
 | 
						|
 | 
						|
  This function is used for getting the count of block I/O devices that one
 | 
						|
  specific block driver detects.  To the PEI ATAPI driver, it returns the number
 | 
						|
  of all the detected ATAPI devices it detects during the enumeration process.
 | 
						|
  To the PEI legacy floppy driver, it returns the number of all the legacy
 | 
						|
  devices it finds during its enumeration process. If no device is detected,
 | 
						|
  then the function will return zero.
 | 
						|
 | 
						|
  @param[in]  PeiServices          General-purpose services that are available
 | 
						|
                                   to every PEIM.
 | 
						|
  @param[in]  This                 Indicates the EFI_PEI_RECOVERY_BLOCK_IO_PPI
 | 
						|
                                   instance.
 | 
						|
  @param[out] NumberBlockDevices   The number of block I/O devices discovered.
 | 
						|
 | 
						|
  @retval     EFI_SUCCESS          The operation performed successfully.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
SdBlockIoPeimGetDeviceNo (
 | 
						|
  IN  EFI_PEI_SERVICES               **PeiServices,
 | 
						|
  IN  EFI_PEI_RECOVERY_BLOCK_IO_PPI  *This,
 | 
						|
  OUT UINTN                          *NumberBlockDevices
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Gets a block device's media information.
 | 
						|
 | 
						|
  This function will provide the caller with the specified block device's media
 | 
						|
  information. If the media changes, calling this function will update the media
 | 
						|
  information accordingly.
 | 
						|
 | 
						|
  @param[in]  PeiServices   General-purpose services that are available to every
 | 
						|
                            PEIM
 | 
						|
  @param[in]  This          Indicates the EFI_PEI_RECOVERY_BLOCK_IO_PPI instance.
 | 
						|
  @param[in]  DeviceIndex   Specifies the block device to which the function wants
 | 
						|
                            to talk. Because the driver that implements Block I/O
 | 
						|
                            PPIs will manage multiple block devices, the PPIs that
 | 
						|
                            want to talk to a single device must specify the
 | 
						|
                            device index that was assigned during the enumeration
 | 
						|
                            process. This index is a number from one to
 | 
						|
                            NumberBlockDevices.
 | 
						|
  @param[out] MediaInfo     The media information of the specified block media.
 | 
						|
                            The caller is responsible for the ownership of this
 | 
						|
                            data structure.
 | 
						|
 | 
						|
  @par Note:
 | 
						|
      The MediaInfo structure describes an enumeration of possible block device
 | 
						|
      types.  This enumeration exists because no device paths are actually passed
 | 
						|
      across interfaces that describe the type or class of hardware that is publishing
 | 
						|
      the block I/O interface. This enumeration will allow for policy decisions
 | 
						|
      in the Recovery PEIM, such as "Try to recover from legacy floppy first,
 | 
						|
      LS-120 second, CD-ROM third." If there are multiple partitions abstracted
 | 
						|
      by a given device type, they should be reported in ascending order; this
 | 
						|
      order also applies to nested partitions, such as legacy MBR, where the
 | 
						|
      outermost partitions would have precedence in the reporting order. The
 | 
						|
      same logic applies to systems such as IDE that have precedence relationships
 | 
						|
      like "Master/Slave" or "Primary/Secondary". The master device should be
 | 
						|
      reported first, the slave second.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS        Media information about the specified block device
 | 
						|
                             was obtained successfully.
 | 
						|
  @retval EFI_DEVICE_ERROR   Cannot get the media information due to a hardware
 | 
						|
                             error.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
SdBlockIoPeimGetMediaInfo (
 | 
						|
  IN  EFI_PEI_SERVICES               **PeiServices,
 | 
						|
  IN  EFI_PEI_RECOVERY_BLOCK_IO_PPI  *This,
 | 
						|
  IN  UINTN                          DeviceIndex,
 | 
						|
  OUT EFI_PEI_BLOCK_IO_MEDIA         *MediaInfo
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Reads the requested number of blocks from the specified block device.
 | 
						|
 | 
						|
  The function reads the requested number of blocks from the device. All the
 | 
						|
  blocks are read, or an error is returned. If there is no media in the device,
 | 
						|
  the function returns EFI_NO_MEDIA.
 | 
						|
 | 
						|
  @param[in]  PeiServices   General-purpose services that are available to
 | 
						|
                            every PEIM.
 | 
						|
  @param[in]  This          Indicates the EFI_PEI_RECOVERY_BLOCK_IO_PPI instance.
 | 
						|
  @param[in]  DeviceIndex   Specifies the block device to which the function wants
 | 
						|
                            to talk. Because the driver that implements Block I/O
 | 
						|
                            PPIs will manage multiple block devices, PPIs that
 | 
						|
                            want to talk to a single device must specify the device
 | 
						|
                            index that was assigned during the enumeration process.
 | 
						|
                            This index is a number from one to NumberBlockDevices.
 | 
						|
  @param[in]  StartLBA      The starting logical block address (LBA) to read from
 | 
						|
                            on the device
 | 
						|
  @param[in]  BufferSize    The size of the Buffer in bytes. This number must be
 | 
						|
                            a multiple of the intrinsic block size of the device.
 | 
						|
  @param[out] Buffer        A pointer to the destination buffer for the data.
 | 
						|
                            The caller is responsible for the ownership of the
 | 
						|
                            buffer.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             The data was read correctly from the device.
 | 
						|
  @retval EFI_DEVICE_ERROR        The device reported an error while attempting
 | 
						|
                                  to perform the read operation.
 | 
						|
  @retval EFI_INVALID_PARAMETER   The read request contains LBAs that are not
 | 
						|
                                  valid, or the buffer is not properly aligned.
 | 
						|
  @retval EFI_NO_MEDIA            There is no media in the device.
 | 
						|
  @retval EFI_BAD_BUFFER_SIZE     The BufferSize parameter is not a multiple of
 | 
						|
                                  the intrinsic block size of the device.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
SdBlockIoPeimReadBlocks (
 | 
						|
  IN  EFI_PEI_SERVICES               **PeiServices,
 | 
						|
  IN  EFI_PEI_RECOVERY_BLOCK_IO_PPI  *This,
 | 
						|
  IN  UINTN                          DeviceIndex,
 | 
						|
  IN  EFI_PEI_LBA                    StartLBA,
 | 
						|
  IN  UINTN                          BufferSize,
 | 
						|
  OUT VOID                           *Buffer
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Gets the count of block I/O devices that one specific block driver detects.
 | 
						|
 | 
						|
  This function is used for getting the count of block I/O devices that one
 | 
						|
  specific block driver detects.  To the PEI ATAPI driver, it returns the number
 | 
						|
  of all the detected ATAPI devices it detects during the enumeration process.
 | 
						|
  To the PEI legacy floppy driver, it returns the number of all the legacy
 | 
						|
  devices it finds during its enumeration process. If no device is detected,
 | 
						|
  then the function will return zero.
 | 
						|
 | 
						|
  @param[in]  PeiServices          General-purpose services that are available
 | 
						|
                                   to every PEIM.
 | 
						|
  @param[in]  This                 Indicates the EFI_PEI_RECOVERY_BLOCK_IO2_PPI
 | 
						|
                                   instance.
 | 
						|
  @param[out] NumberBlockDevices   The number of block I/O devices discovered.
 | 
						|
 | 
						|
  @retval     EFI_SUCCESS          The operation performed successfully.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
SdBlockIoPeimGetDeviceNo2 (
 | 
						|
  IN  EFI_PEI_SERVICES                **PeiServices,
 | 
						|
  IN  EFI_PEI_RECOVERY_BLOCK_IO2_PPI  *This,
 | 
						|
  OUT UINTN                           *NumberBlockDevices
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Gets a block device's media information.
 | 
						|
 | 
						|
  This function will provide the caller with the specified block device's media
 | 
						|
  information. If the media changes, calling this function will update the media
 | 
						|
  information accordingly.
 | 
						|
 | 
						|
  @param[in]  PeiServices   General-purpose services that are available to every
 | 
						|
                            PEIM
 | 
						|
  @param[in]  This          Indicates the EFI_PEI_RECOVERY_BLOCK_IO2_PPI instance.
 | 
						|
  @param[in]  DeviceIndex   Specifies the block device to which the function wants
 | 
						|
                            to talk. Because the driver that implements Block I/O
 | 
						|
                            PPIs will manage multiple block devices, the PPIs that
 | 
						|
                            want to talk to a single device must specify the
 | 
						|
                            device index that was assigned during the enumeration
 | 
						|
                            process. This index is a number from one to
 | 
						|
                            NumberBlockDevices.
 | 
						|
  @param[out] MediaInfo     The media information of the specified block media.
 | 
						|
                            The caller is responsible for the ownership of this
 | 
						|
                            data structure.
 | 
						|
 | 
						|
  @par Note:
 | 
						|
      The MediaInfo structure describes an enumeration of possible block device
 | 
						|
      types.  This enumeration exists because no device paths are actually passed
 | 
						|
      across interfaces that describe the type or class of hardware that is publishing
 | 
						|
      the block I/O interface. This enumeration will allow for policy decisions
 | 
						|
      in the Recovery PEIM, such as "Try to recover from legacy floppy first,
 | 
						|
      LS-120 second, CD-ROM third." If there are multiple partitions abstracted
 | 
						|
      by a given device type, they should be reported in ascending order; this
 | 
						|
      order also applies to nested partitions, such as legacy MBR, where the
 | 
						|
      outermost partitions would have precedence in the reporting order. The
 | 
						|
      same logic applies to systems such as IDE that have precedence relationships
 | 
						|
      like "Master/Slave" or "Primary/Secondary". The master device should be
 | 
						|
      reported first, the slave second.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS        Media information about the specified block device
 | 
						|
                             was obtained successfully.
 | 
						|
  @retval EFI_DEVICE_ERROR   Cannot get the media information due to a hardware
 | 
						|
                             error.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
SdBlockIoPeimGetMediaInfo2 (
 | 
						|
  IN  EFI_PEI_SERVICES                **PeiServices,
 | 
						|
  IN  EFI_PEI_RECOVERY_BLOCK_IO2_PPI  *This,
 | 
						|
  IN  UINTN                           DeviceIndex,
 | 
						|
  OUT EFI_PEI_BLOCK_IO2_MEDIA         *MediaInfo
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Reads the requested number of blocks from the specified block device.
 | 
						|
 | 
						|
  The function reads the requested number of blocks from the device. All the
 | 
						|
  blocks are read, or an error is returned. If there is no media in the device,
 | 
						|
  the function returns EFI_NO_MEDIA.
 | 
						|
 | 
						|
  @param[in]  PeiServices   General-purpose services that are available to
 | 
						|
                            every PEIM.
 | 
						|
  @param[in]  This          Indicates the EFI_PEI_RECOVERY_BLOCK_IO2_PPI instance.
 | 
						|
  @param[in]  DeviceIndex   Specifies the block device to which the function wants
 | 
						|
                            to talk. Because the driver that implements Block I/O
 | 
						|
                            PPIs will manage multiple block devices, PPIs that
 | 
						|
                            want to talk to a single device must specify the device
 | 
						|
                            index that was assigned during the enumeration process.
 | 
						|
                            This index is a number from one to NumberBlockDevices.
 | 
						|
  @param[in]  StartLBA      The starting logical block address (LBA) to read from
 | 
						|
                            on the device
 | 
						|
  @param[in]  BufferSize    The size of the Buffer in bytes. This number must be
 | 
						|
                            a multiple of the intrinsic block size of the device.
 | 
						|
  @param[out] Buffer        A pointer to the destination buffer for the data.
 | 
						|
                            The caller is responsible for the ownership of the
 | 
						|
                            buffer.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             The data was read correctly from the device.
 | 
						|
  @retval EFI_DEVICE_ERROR        The device reported an error while attempting
 | 
						|
                                  to perform the read operation.
 | 
						|
  @retval EFI_INVALID_PARAMETER   The read request contains LBAs that are not
 | 
						|
                                  valid, or the buffer is not properly aligned.
 | 
						|
  @retval EFI_NO_MEDIA            There is no media in the device.
 | 
						|
  @retval EFI_BAD_BUFFER_SIZE     The BufferSize parameter is not a multiple of
 | 
						|
                                  the intrinsic block size of the device.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
SdBlockIoPeimReadBlocks2 (
 | 
						|
  IN  EFI_PEI_SERVICES                **PeiServices,
 | 
						|
  IN  EFI_PEI_RECOVERY_BLOCK_IO2_PPI  *This,
 | 
						|
  IN  UINTN                           DeviceIndex,
 | 
						|
  IN  EFI_PEI_LBA                     StartLBA,
 | 
						|
  IN  UINTN                           BufferSize,
 | 
						|
  OUT VOID                            *Buffer
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Initialize the memory management pool for the host controller.
 | 
						|
 | 
						|
  @param  Private               The Sd Peim driver private data.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The memory pool is initialized.
 | 
						|
  @retval Others                Fail to init the memory pool.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
SdPeimInitMemPool (
 | 
						|
  IN  SD_PEIM_HC_PRIVATE_DATA  *Private
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Release the memory management pool.
 | 
						|
 | 
						|
  @param  Pool                  The memory pool to free.
 | 
						|
 | 
						|
  @retval EFI_DEVICE_ERROR      Fail to free the memory pool.
 | 
						|
  @retval EFI_SUCCESS           The memory pool is freed.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
SdPeimFreeMemPool (
 | 
						|
  IN SD_PEIM_MEM_POOL  *Pool
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Allocate some memory from the host controller's memory pool
 | 
						|
  which can be used to communicate with host controller.
 | 
						|
 | 
						|
  @param  Pool      The host controller's memory pool.
 | 
						|
  @param  Size      Size of the memory to allocate.
 | 
						|
 | 
						|
  @return The allocated memory or NULL.
 | 
						|
 | 
						|
**/
 | 
						|
VOID *
 | 
						|
SdPeimAllocateMem (
 | 
						|
  IN  SD_PEIM_MEM_POOL  *Pool,
 | 
						|
  IN  UINTN             Size
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Free the allocated memory back to the memory pool.
 | 
						|
 | 
						|
  @param  Pool           The memory pool of the host controller.
 | 
						|
  @param  Mem            The memory to free.
 | 
						|
  @param  Size           The size of the memory to free.
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
SdPeimFreeMem (
 | 
						|
  IN SD_PEIM_MEM_POOL  *Pool,
 | 
						|
  IN VOID              *Mem,
 | 
						|
  IN UINTN             Size
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Initialize IOMMU.
 | 
						|
**/
 | 
						|
VOID
 | 
						|
IoMmuInit (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Provides the controller-specific addresses required to access system memory from a
 | 
						|
  DMA bus master.
 | 
						|
 | 
						|
  @param  Operation             Indicates if the bus master is going to read or write to system memory.
 | 
						|
  @param  HostAddress           The system memory address to map to the PCI controller.
 | 
						|
  @param  NumberOfBytes         On input the number of bytes to map. On output the number of bytes
 | 
						|
                                that were mapped.
 | 
						|
  @param  DeviceAddress         The resulting map address for the bus master PCI controller to use to
 | 
						|
                                access the hosts HostAddress.
 | 
						|
  @param  Mapping               A resulting value to pass to Unmap().
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The range was mapped for the returned NumberOfBytes.
 | 
						|
  @retval EFI_UNSUPPORTED       The HostAddress cannot be mapped as a common buffer.
 | 
						|
  @retval EFI_INVALID_PARAMETER One or more parameters are invalid.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES  The request could not be completed due to a lack of resources.
 | 
						|
  @retval EFI_DEVICE_ERROR      The system hardware could not map the requested address.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
IoMmuMap (
 | 
						|
  IN  EDKII_IOMMU_OPERATION  Operation,
 | 
						|
  IN  VOID                   *HostAddress,
 | 
						|
  IN  OUT UINTN              *NumberOfBytes,
 | 
						|
  OUT EFI_PHYSICAL_ADDRESS   *DeviceAddress,
 | 
						|
  OUT VOID                   **Mapping
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Completes the Map() operation and releases any corresponding resources.
 | 
						|
 | 
						|
  @param  Mapping               The mapping value returned from Map().
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The range was unmapped.
 | 
						|
  @retval EFI_INVALID_PARAMETER Mapping is not a value that was returned by Map().
 | 
						|
  @retval EFI_DEVICE_ERROR      The data was not committed to the target system memory.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
IoMmuUnmap (
 | 
						|
  IN VOID  *Mapping
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Allocates pages that are suitable for an OperationBusMasterCommonBuffer or
 | 
						|
  OperationBusMasterCommonBuffer64 mapping.
 | 
						|
 | 
						|
  @param  Pages                 The number of pages to allocate.
 | 
						|
  @param  HostAddress           A pointer to store the base system memory address of the
 | 
						|
                                allocated range.
 | 
						|
  @param  DeviceAddress         The resulting map address for the bus master PCI controller to use to
 | 
						|
                                access the hosts HostAddress.
 | 
						|
  @param  Mapping               A resulting value to pass to Unmap().
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The requested memory pages were allocated.
 | 
						|
  @retval EFI_UNSUPPORTED       Attributes is unsupported. The only legal attribute bits are
 | 
						|
                                MEMORY_WRITE_COMBINE and MEMORY_CACHED.
 | 
						|
  @retval EFI_INVALID_PARAMETER One or more parameters are invalid.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES  The memory pages could not be allocated.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
IoMmuAllocateBuffer (
 | 
						|
  IN UINTN                  Pages,
 | 
						|
  OUT VOID                  **HostAddress,
 | 
						|
  OUT EFI_PHYSICAL_ADDRESS  *DeviceAddress,
 | 
						|
  OUT VOID                  **Mapping
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Frees memory that was allocated with AllocateBuffer().
 | 
						|
 | 
						|
  @param  Pages                 The number of pages to free.
 | 
						|
  @param  HostAddress           The base system memory address of the allocated range.
 | 
						|
  @param  Mapping               The mapping value returned from Map().
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The requested memory pages were freed.
 | 
						|
  @retval EFI_INVALID_PARAMETER The memory range specified by HostAddress and Pages
 | 
						|
                                was not allocated with AllocateBuffer().
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
IoMmuFreeBuffer (
 | 
						|
  IN UINTN  Pages,
 | 
						|
  IN VOID   *HostAddress,
 | 
						|
  IN VOID   *Mapping
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  One notified function to cleanup the allocated DMA buffers at the end of PEI.
 | 
						|
 | 
						|
  @param[in]  PeiServices        Pointer to PEI Services Table.
 | 
						|
  @param[in]  NotifyDescriptor   Pointer to the descriptor for the Notification
 | 
						|
                                 event that caused this function to execute.
 | 
						|
  @param[in]  Ppi                Pointer to the PPI data associated with this function.
 | 
						|
 | 
						|
  @retval     EFI_SUCCESS  The function completes successfully
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
SdBlockIoPeimEndOfPei (
 | 
						|
  IN EFI_PEI_SERVICES           **PeiServices,
 | 
						|
  IN EFI_PEI_NOTIFY_DESCRIPTOR  *NotifyDescriptor,
 | 
						|
  IN VOID                       *Ppi
 | 
						|
  );
 | 
						|
 | 
						|
#endif
 |