diff --git a/libpldmresponder/file_io.cpp b/libpldmresponder/file_io.cpp
index ed043c6..06d683b 100644
--- a/libpldmresponder/file_io.cpp
+++ b/libpldmresponder/file_io.cpp
@@ -40,8 +40,8 @@
 
 constexpr auto xdmaDev = "/dev/xdma";
 
-int transferDataHost(const fs::path& path, uint32_t offset, uint32_t length,
-                     uint64_t address, bool upstream)
+int DMA::transferDataHost(const fs::path& path, uint32_t offset,
+                          uint32_t length, uint64_t address, bool upstream)
 {
     static const size_t pageSize = getpagesize();
     uint32_t numPages = length / pageSize;
@@ -126,38 +126,6 @@
 
 } // namespace dma
 
-void transferAll(uint8_t command, fs::path& path, uint32_t offset,
-                 uint32_t length, uint64_t address, bool upstream,
-                 pldm_msg* response)
-{
-    uint32_t origLength = length;
-
-    while (length > dma::maxSize)
-    {
-        auto rc = dma::transferDataHost(path, offset, dma::maxSize, address,
-                                        upstream);
-        if (rc < 0)
-        {
-            encode_rw_file_memory_resp(0, command, PLDM_ERROR, 0, response);
-            return;
-        }
-
-        offset += dma::maxSize;
-        length -= dma::maxSize;
-        address += dma::maxSize;
-    }
-
-    auto rc = dma::transferDataHost(path, offset, length, address, upstream);
-    if (rc < 0)
-    {
-        encode_rw_file_memory_resp(0, command, PLDM_ERROR, 0, response);
-        return;
-    }
-
-    encode_rw_file_memory_resp(0, command, PLDM_SUCCESS, origLength, response);
-    return;
-}
-
 void readFileIntoMemory(const uint8_t* request, size_t payloadLength,
                         pldm_msg* response)
 {
@@ -209,8 +177,10 @@
         return;
     }
 
-    transferAll(PLDM_READ_FILE_INTO_MEMORY, path, offset, length, address, true,
-                response);
+    using namespace dma;
+    DMA intf;
+    transferAll<DMA>(&intf, PLDM_READ_FILE_INTO_MEMORY, path, offset, length,
+                     address, true, response);
 }
 
 void writeFileFromMemory(const uint8_t* request, size_t payloadLength,
@@ -259,8 +229,10 @@
         return;
     }
 
-    transferAll(PLDM_WRITE_FILE_FROM_MEMORY, path, offset, length, address,
-                false, response);
+    using namespace dma;
+    DMA intf;
+    transferAll<DMA>(&intf, PLDM_WRITE_FILE_FROM_MEMORY, path, offset, length,
+                     address, false, response);
 }
 
 } // namespace responder
