diff options
author | Ard Biesheuvel <ard.biesheuvel@linaro.org> | 2017-08-24 20:05:48 +0100 |
---|---|---|
committer | Ard Biesheuvel <ard.biesheuvel@linaro.org> | 2017-08-29 17:54:36 +0100 |
commit | deef290f95e0df80549d2a6cbd7edae104c82709 (patch) | |
tree | 2d1f712f971dacd3f6e5103839eee5dcd05d8b87 /EmbeddedPkg/Include | |
parent | 1696b221b15e439162cfccd6bd04132e425dd2ff (diff) | |
download | edk2-deef290f95e0df80549d2a6cbd7edae104c82709.tar.gz edk2-deef290f95e0df80549d2a6cbd7edae104c82709.tar.bz2 edk2-deef290f95e0df80549d2a6cbd7edae104c82709.zip |
EmbeddedPkg/DmaLib: add routine to allocate aligned buffers
DmaLib's purpose is to manage memory that is shared between the host
and DMA capable devices. In some cases, this requires a larger alignment
than page size, and we currently don't cater for that in DmaLib. So add
a variant of DmaAllocateBuffer () that takes an alignment parameter.
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
Diffstat (limited to 'EmbeddedPkg/Include')
-rw-r--r-- | EmbeddedPkg/Include/Library/DmaLib.h | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/EmbeddedPkg/Include/Library/DmaLib.h b/EmbeddedPkg/Include/Library/DmaLib.h index 3814291c28..1843814c65 100644 --- a/EmbeddedPkg/Include/Library/DmaLib.h +++ b/EmbeddedPkg/Include/Library/DmaLib.h @@ -155,5 +155,33 @@ DmaFreeBuffer ( );
-#endif
+/**
+ Allocates pages that are suitable for an DmaMap() of type
+ MapOperationBusMasterCommonBuffer mapping, at the requested alignment.
+
+ @param MemoryType The type of memory to allocate, EfiBootServicesData or
+ EfiRuntimeServicesData.
+ @param Pages The number of pages to allocate.
+ @param Alignment Alignment in bytes of the base of the returned
+ buffer (must be a power of 2)
+ @param HostAddress A pointer to store the base system memory address of 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 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
+EFIAPI
+DmaAllocateAlignedBuffer (
+ IN EFI_MEMORY_TYPE MemoryType,
+ IN UINTN Pages,
+ IN UINTN Alignment,
+ OUT VOID **HostAddress
+ );
+
+
+#endif
|