]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ArmVirtPkg/Library/QemuFwCfgLib/QemuFwCfgLib.c
ArmVirtPkg/QemuFwCfgLib: extract generic DmaTransferBytes() function
[mirror_edk2.git] / ArmVirtPkg / Library / QemuFwCfgLib / QemuFwCfgLib.c
index 1b19893709fcdc408d423ce1834c4e41fb48c96f..bd0f34720eec3465b7d4cef68d0de1dc241b7643 100644 (file)
@@ -250,26 +250,41 @@ MmioReadBytes (
 \r
 \r
 /**\r
-  Fast READ_BYTES_FUNCTION.\r
+  Transfer an array of bytes, or skip a number of bytes, using the DMA\r
+  interface.\r
+\r
+  @param[in]     Size     Size in bytes to transfer or skip.\r
+\r
+  @param[in,out] Buffer   Buffer to read data into or write data from. Ignored,\r
+                          and may be NULL, if Size is zero, or Control is\r
+                          FW_CFG_DMA_CTL_SKIP.\r
+\r
+  @param[in]     Control  One of the following:\r
+                          FW_CFG_DMA_CTL_WRITE - write to fw_cfg from Buffer.\r
+                          FW_CFG_DMA_CTL_READ  - read from fw_cfg into Buffer.\r
+                          FW_CFG_DMA_CTL_SKIP  - skip bytes in fw_cfg.\r
 **/\r
 STATIC\r
 VOID\r
-EFIAPI\r
-DmaReadBytes (\r
-  IN UINTN Size,\r
-  IN VOID  *Buffer OPTIONAL\r
+DmaTransferBytes (\r
+  IN     UINTN  Size,\r
+  IN OUT VOID   *Buffer OPTIONAL,\r
+  IN     UINT32 Control\r
   )\r
 {\r
   volatile FW_CFG_DMA_ACCESS Access;\r
   UINT32                     Status;\r
 \r
+  ASSERT (Control == FW_CFG_DMA_CTL_WRITE || Control == FW_CFG_DMA_CTL_READ ||\r
+    Control == FW_CFG_DMA_CTL_SKIP);\r
+\r
   if (Size == 0) {\r
     return;\r
   }\r
 \r
   ASSERT (Size <= MAX_UINT32);\r
 \r
-  Access.Control = SwapBytes32 (FW_CFG_DMA_CTL_READ);\r
+  Access.Control = SwapBytes32 (Control);\r
   Access.Length  = SwapBytes32 ((UINT32)Size);\r
   Access.Address = SwapBytes64 ((UINT64)(UINTN)Buffer);\r
 \r
@@ -304,6 +319,21 @@ DmaReadBytes (
 }\r
 \r
 \r
+/**\r
+  Fast READ_BYTES_FUNCTION.\r
+**/\r
+STATIC\r
+VOID\r
+EFIAPI\r
+DmaReadBytes (\r
+  IN UINTN Size,\r
+  IN VOID  *Buffer OPTIONAL\r
+  )\r
+{\r
+  DmaTransferBytes (Size, Buffer, FW_CFG_DMA_CTL_READ);\r
+}\r
+\r
+\r
 /**\r
   Reads firmware configuration bytes into a buffer\r
 \r