mirror of
				https://github.com/acidanthera/audk.git
				synced 2025-10-31 19:23:54 +01:00 
			
		
		
		
	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>
		
			
				
	
	
		
			201 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			201 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   PEI IOMMU PPI.
 | |
| 
 | |
| Copyright (c) 2017 - 2018, Intel Corporation. All rights reserved.<BR>
 | |
| SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef __PEI_IOMMU_H__
 | |
| #define __PEI_IOMMU_H__
 | |
| 
 | |
| //
 | |
| // for EFI_ALLOCATE_TYPE
 | |
| //
 | |
| #include <Uefi.h>
 | |
| 
 | |
| //
 | |
| // Include protocol for common definition
 | |
| //   EDKII_IOMMU_ACCESS_xxx
 | |
| //   EDKII_IOMMU_OPERATION
 | |
| //
 | |
| #include <Protocol/IoMmu.h>
 | |
| 
 | |
| //
 | |
| // IOMMU Ppi GUID value
 | |
| //
 | |
| #define EDKII_IOMMU_PPI_GUID \
 | |
|     { \
 | |
|       0x70b0af26, 0xf847, 0x4bb6, { 0xaa, 0xb9, 0xcd, 0xe8, 0x4f, 0xc6, 0x14, 0x31 } \
 | |
|     }
 | |
| 
 | |
| //
 | |
| // Forward reference for pure ANSI compatability
 | |
| //
 | |
| typedef struct _EDKII_IOMMU_PPI EDKII_IOMMU_PPI;
 | |
| 
 | |
| //
 | |
| // Revision The revision to which the IOMMU interface adheres.
 | |
| //          All future revisions must be backwards compatible.
 | |
| //          If a future version is not back wards compatible it is not the same GUID.
 | |
| //
 | |
| #define EDKII_IOMMU_PPI_REVISION  0x00010000
 | |
| 
 | |
| /**
 | |
|   Set IOMMU attribute for a system memory.
 | |
| 
 | |
|   If the IOMMU PPI exists, the system memory cannot be used
 | |
|   for DMA by default.
 | |
| 
 | |
|   When a device requests a DMA access for a system memory,
 | |
|   the device driver need use SetAttribute() to update the IOMMU
 | |
|   attribute to request DMA access (read and/or write).
 | |
| 
 | |
|   @param[in]  This              The PPI instance pointer.
 | |
|   @param[in]  Mapping           The mapping value returned from Map().
 | |
|   @param[in]  IoMmuAccess       The IOMMU access.
 | |
| 
 | |
|   @retval EFI_SUCCESS            The IoMmuAccess is set for the memory range specified by DeviceAddress and Length.
 | |
|   @retval EFI_INVALID_PARAMETER  Mapping is not a value that was returned by Map().
 | |
|   @retval EFI_INVALID_PARAMETER  IoMmuAccess specified an illegal combination of access.
 | |
|   @retval EFI_UNSUPPORTED        The bit mask of IoMmuAccess is not supported by the IOMMU.
 | |
|   @retval EFI_UNSUPPORTED        The IOMMU does not support the memory range specified by Mapping.
 | |
|   @retval EFI_OUT_OF_RESOURCES   There are not enough resources available to modify the IOMMU access.
 | |
|   @retval EFI_DEVICE_ERROR       The IOMMU device reported an error while attempting the operation.
 | |
|   @retval EFI_NOT_AVAILABLE_YET  DMA protection has been enabled, but DMA buffer are
 | |
|                                  not available to be allocated yet.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EDKII_PEI_IOMMU_SET_ATTRIBUTE)(
 | |
|   IN EDKII_IOMMU_PPI       *This,
 | |
|   IN VOID                  *Mapping,
 | |
|   IN UINT64                IoMmuAccess
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Provides the controller-specific addresses required to access system memory from a
 | |
|   DMA bus master.
 | |
| 
 | |
|   @param  This                  The PPI instance pointer.
 | |
|   @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.
 | |
|   @retval EFI_NOT_AVAILABLE_YET DMA protection has been enabled, but DMA buffer are
 | |
|                                 not available to be allocated yet.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EDKII_PEI_IOMMU_MAP)(
 | |
|   IN     EDKII_IOMMU_PPI                            *This,
 | |
|   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  This                  The PPI instance pointer.
 | |
|   @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.
 | |
|   @retval EFI_NOT_AVAILABLE_YET DMA protection has been enabled, but DMA buffer are
 | |
|                                 not available to be allocated yet.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EDKII_PEI_IOMMU_UNMAP)(
 | |
|   IN  EDKII_IOMMU_PPI                          *This,
 | |
|   IN  VOID                                     *Mapping
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Allocates pages that are suitable for an OperationBusMasterCommonBuffer or
 | |
|   OperationBusMasterCommonBuffer64 mapping.
 | |
| 
 | |
|   @param  This                  The PPI instance pointer.
 | |
|   @param  MemoryType            The type of memory to allocate, EfiBootServicesData or
 | |
|                                 EfiRuntimeServicesData.
 | |
|   @param  Pages                 The number of pages to allocate.
 | |
|   @param  HostAddress           A pointer to store the base system memory address of the
 | |
|                                 allocated range.
 | |
|   @param  Attributes            The requested bit mask of attributes for the allocated range.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The requested memory pages were allocated.
 | |
|   @retval EFI_UNSUPPORTED       Attributes is unsupported. The only legal attribute bits are
 | |
|                                 MEMORY_WRITE_COMBINE, MEMORY_CACHED and DUAL_ADDRESS_CYCLE.
 | |
|   @retval EFI_INVALID_PARAMETER One or more parameters are invalid.
 | |
|   @retval EFI_OUT_OF_RESOURCES  The memory pages could not be allocated.
 | |
|   @retval EFI_NOT_AVAILABLE_YET DMA protection has been enabled, but DMA buffer are
 | |
|                                 not available to be allocated yet.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EDKII_PEI_IOMMU_ALLOCATE_BUFFER)(
 | |
|   IN     EDKII_IOMMU_PPI                          *This,
 | |
|   IN     EFI_MEMORY_TYPE                          MemoryType,
 | |
|   IN     UINTN                                    Pages,
 | |
|   IN OUT VOID                                     **HostAddress,
 | |
|   IN     UINT64                                   Attributes
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Frees memory that was allocated with AllocateBuffer().
 | |
| 
 | |
|   @param  This                  The PPI instance pointer.
 | |
|   @param  Pages                 The number of pages to free.
 | |
|   @param  HostAddress           The base system memory address of the allocated range.
 | |
| 
 | |
|   @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().
 | |
|   @retval EFI_NOT_AVAILABLE_YET DMA protection has been enabled, but DMA buffer are
 | |
|                                 not available to be allocated yet.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EDKII_PEI_IOMMU_FREE_BUFFER)(
 | |
|   IN  EDKII_IOMMU_PPI                          *This,
 | |
|   IN  UINTN                                    Pages,
 | |
|   IN  VOID                                     *HostAddress
 | |
|   );
 | |
| 
 | |
| ///
 | |
| /// IOMMU PPI structure.
 | |
| ///
 | |
| struct _EDKII_IOMMU_PPI {
 | |
|   UINT64                             Revision;
 | |
|   EDKII_PEI_IOMMU_SET_ATTRIBUTE      SetAttribute;
 | |
|   EDKII_PEI_IOMMU_MAP                Map;
 | |
|   EDKII_PEI_IOMMU_UNMAP              Unmap;
 | |
|   EDKII_PEI_IOMMU_ALLOCATE_BUFFER    AllocateBuffer;
 | |
|   EDKII_PEI_IOMMU_FREE_BUFFER        FreeBuffer;
 | |
| };
 | |
| 
 | |
| ///
 | |
| /// IOMMU PPI GUID variable.
 | |
| ///
 | |
| extern EFI_GUID  gEdkiiIoMmuPpiGuid;
 | |
| 
 | |
| #endif
 |