1212#pragma once
1313
1414#include < cstddef>
15+ #include < cstring>
1516#include < filesystem>
1617#include < fstream>
1718#include < iostream>
@@ -63,9 +64,14 @@ class HwAccessor : public Logger, private boost::noncopyable {
6364 void _wr_mem32 (uint32_t offs, const void * __restrict__ mem, size_t size);
6465 void _wr_mem64 (uint32_t offs, const void * __restrict__ mem, size_t size);
6566
67+ virtual std::vector<uint8_t > read_bulk ([[maybe_unused]] uint32_t offs,
68+ [[maybe_unused]] uint32_t size) {
69+ return {};
70+ }
71+
6672 /* *
6773 * @brief Read register from UIO interface
68- *
74+ *
6975 * @tparam C Register data type
7076 * @param offs Register offset into address space
7177 * @return C Value read from register
@@ -87,7 +93,7 @@ class HwAccessor : public Logger, private boost::noncopyable {
8793
8894 /* *
8995 * @brief Write register to UIO interface
90- *
96+ *
9197 * @tparam C Register data type
9298 * @param offs Register offset into address space
9399 * @param value Value to write
@@ -223,6 +229,14 @@ class HwAccessorMmap : public HwAccessor {
223229 return irq_count;
224230 }
225231
232+ std::vector<uint8_t > read_bulk (uint32_t offs, uint32_t size) final override {
233+ std::vector<uint8_t > result;
234+ result.resize (size);
235+ auto src = _mem_ptr<uint8_t >(offs);
236+ memcpy (&result[0 ], const_cast <uint8_t *>(src), size);
237+ return result;
238+ }
239+
226240 public:
227241 UioRegion get_phys_region () const final override {
228242 const size_t access_offs =
0 commit comments