TianoCore EDK2 master
Loading...
Searching...
No Matches
DmaMem.c File Reference
#include "EhcPeim.h"

Go to the source code of this file.

Functions

EFI_STATUS IoMmuMap (IN EDKII_IOMMU_PPI *IoMmu, IN EDKII_IOMMU_OPERATION Operation, IN VOID *HostAddress, IN OUT UINTN *NumberOfBytes, OUT EFI_PHYSICAL_ADDRESS *DeviceAddress, OUT VOID **Mapping)
 
VOID IoMmuUnmap (IN EDKII_IOMMU_PPI *IoMmu, IN VOID *Mapping)
 
EFI_STATUS IoMmuAllocateBuffer (IN EDKII_IOMMU_PPI *IoMmu, IN UINTN Pages, OUT VOID **HostAddress, OUT EFI_PHYSICAL_ADDRESS *DeviceAddress, OUT VOID **Mapping)
 
VOID IoMmuFreeBuffer (IN EDKII_IOMMU_PPI *IoMmu, IN UINTN Pages, IN VOID *HostAddress, IN VOID *Mapping)
 
VOID IoMmuInit (OUT EDKII_IOMMU_PPI **IoMmu)
 

Detailed Description

The DMA memory help functions.

Copyright (c) 2017, Intel Corporation. All rights reserved.

SPDX-License-Identifier: BSD-2-Clause-Patent

Definition in file DmaMem.c.

Function Documentation

◆ IoMmuAllocateBuffer()

EFI_STATUS IoMmuAllocateBuffer ( IN EDKII_IOMMU_PPI IoMmu,
IN UINTN  Pages,
OUT VOID **  HostAddress,
OUT EFI_PHYSICAL_ADDRESS DeviceAddress,
OUT VOID **  Mapping 
)

Allocates pages that are suitable for an OperationBusMasterCommonBuffer or OperationBusMasterCommonBuffer64 mapping.

Parameters
IoMmuPointer to IOMMU PPI.
PagesThe number of pages to allocate.
HostAddressA pointer to store the base system memory address of the allocated range.
DeviceAddressThe resulting map address for the bus master PCI controller to use to access the hosts HostAddress.
MappingA resulting value to pass to Unmap().
Return values
EFI_SUCCESSThe requested memory pages were allocated.
EFI_UNSUPPORTEDAttributes is unsupported. The only legal attribute bits are MEMORY_WRITE_COMBINE and MEMORY_CACHED.
EFI_INVALID_PARAMETEROne or more parameters are invalid.
EFI_OUT_OF_RESOURCESThe memory pages could not be allocated.

Definition at line 134 of file DmaMem.c.

◆ IoMmuFreeBuffer()

VOID IoMmuFreeBuffer ( IN EDKII_IOMMU_PPI IoMmu,
IN UINTN  Pages,
IN VOID *  HostAddress,
IN VOID *  Mapping 
)

Frees memory that was allocated with AllocateBuffer().

Parameters
IoMmuPointer to IOMMU PPI.
PagesThe number of pages to free.
HostAddressThe base system memory address of the allocated range.
MappingThe mapping value returned from Map().

Definition at line 217 of file DmaMem.c.

◆ IoMmuInit()

VOID IoMmuInit ( OUT EDKII_IOMMU_PPI **  IoMmu)

Initialize IOMMU.

Parameters
IoMmuPointer to pointer to IOMMU PPI.

Definition at line 238 of file DmaMem.c.

◆ IoMmuMap()

EFI_STATUS IoMmuMap ( IN EDKII_IOMMU_PPI IoMmu,
IN EDKII_IOMMU_OPERATION  Operation,
IN VOID *  HostAddress,
IN OUT UINTN NumberOfBytes,
OUT EFI_PHYSICAL_ADDRESS DeviceAddress,
OUT VOID **  Mapping 
)

Provides the controller-specific addresses required to access system memory from a DMA bus master.

Parameters
IoMmuPointer to IOMMU PPI.
OperationIndicates if the bus master is going to read or write to system memory.
HostAddressThe system memory address to map to the PCI controller.
NumberOfBytesOn input the number of bytes to map. On output the number of bytes that were mapped.
DeviceAddressThe resulting map address for the bus master PCI controller to use to access the hosts HostAddress.
MappingA resulting value to pass to Unmap().
Return values
EFI_SUCCESSThe range was mapped for the returned NumberOfBytes.
EFI_UNSUPPORTEDThe HostAddress cannot be mapped as a common buffer.
EFI_INVALID_PARAMETEROne or more parameters are invalid.
EFI_OUT_OF_RESOURCESThe request could not be completed due to a lack of resources.
EFI_DEVICE_ERRORThe system hardware could not map the requested address.

Definition at line 33 of file DmaMem.c.

◆ IoMmuUnmap()

VOID IoMmuUnmap ( IN EDKII_IOMMU_PPI IoMmu,
IN VOID *  Mapping 
)

Completes the Map() operation and releases any corresponding resources.

Parameters
IoMmuPointer to IOMMU PPI.
MappingThe mapping value returned from Map().

Definition at line 103 of file DmaMem.c.