buffer: Implement "updateReadPtr"
This is a helper function for reading the circular buffer
Tested: Unit tested
Signed-off-by: Brandon Kim <brandonkim@google.com>
Change-Id: I1c34a40bd279ee601de33669aabfec27a959ec44
diff --git a/src/buffer.cpp b/src/buffer.cpp
index 524984a..c07bba6 100644
--- a/src/buffer.cpp
+++ b/src/buffer.cpp
@@ -9,6 +9,7 @@
#include <algorithm>
#include <array>
+#include <cstddef>
#include <cstdint>
#include <memory>
#include <span>
@@ -85,4 +86,27 @@
return cachedBufferHeader;
}
+void BufferImpl::updateReadPtr(const uint32_t newReadPtr)
+{
+ constexpr uint8_t bmcReadPtrOffset =
+ offsetof(struct CircularBufferHeader, bmcReadPtr);
+
+ little_uint16_t truncatedReadPtr =
+ boost::endian::native_to_little(newReadPtr & 0xffff);
+ uint8_t* truncatedReadPtrPtr =
+ reinterpret_cast<uint8_t*>(&truncatedReadPtr);
+
+ size_t writtenSize = dataInterface->write(
+ bmcReadPtrOffset, std::span<const uint8_t>{
+ truncatedReadPtrPtr,
+ truncatedReadPtrPtr + sizeof(little_uint16_t)});
+ if (writtenSize != sizeof(little_uint16_t))
+ {
+ throw std::runtime_error(fmt::format(
+ "[updateReadPtr] Wrote '{}' bytes, instead of expected '{}'",
+ writtenSize, sizeof(little_uint16_t)));
+ }
+ cachedBufferHeader.bmcReadPtr = truncatedReadPtr;
+}
+
} // namespace bios_bmc_smm_error_logger