11d0c3566SBrandon Kim #pragma once 21d0c3566SBrandon Kim 31d0c3566SBrandon Kim #include <cstdint> 41d0c3566SBrandon Kim #include <span> 51d0c3566SBrandon Kim #include <vector> 61d0c3566SBrandon Kim 71d0c3566SBrandon Kim namespace bios_bmc_smm_error_logger 81d0c3566SBrandon Kim { 91d0c3566SBrandon Kim 101d0c3566SBrandon Kim /** 111d0c3566SBrandon Kim * Each data transport mechanism must implement the DataInterface. 121d0c3566SBrandon Kim */ 131d0c3566SBrandon Kim class DataInterface 141d0c3566SBrandon Kim { 151d0c3566SBrandon Kim public: 161d0c3566SBrandon Kim virtual ~DataInterface() = default; 171d0c3566SBrandon Kim 181d0c3566SBrandon Kim /** 191d0c3566SBrandon Kim * Read bytes from shared buffer (blocking call). 201d0c3566SBrandon Kim * 21*35d4335eSBrandon Kim * @param[in] offset - offset to read from relative to MMIO space 221d0c3566SBrandon Kim * @param[in] length - number of bytes to read 231d0c3566SBrandon Kim * @return the bytes read 241d0c3566SBrandon Kim */ 251d0c3566SBrandon Kim virtual std::vector<uint8_t> read(const uint32_t offset, 261d0c3566SBrandon Kim const uint32_t length) = 0; 271d0c3566SBrandon Kim 281d0c3566SBrandon Kim /** 291d0c3566SBrandon Kim * Write bytes to shared buffer. 301d0c3566SBrandon Kim * 31*35d4335eSBrandon Kim * @param[in] offset - offset to write to relative to MMIO space 321d0c3566SBrandon Kim * @param[in] bytes - byte vector of data. 331d0c3566SBrandon Kim * @return return the byte length written 341d0c3566SBrandon Kim */ 351d0c3566SBrandon Kim virtual uint32_t write(const uint32_t offset, 361d0c3566SBrandon Kim const std::span<const uint8_t> bytes) = 0; 371d0c3566SBrandon Kim 381d0c3566SBrandon Kim /** 391d0c3566SBrandon Kim * Getter for Memory Region Size 401d0c3566SBrandon Kim * 411d0c3566SBrandon Kim * @return return Memory Region size allocated 421d0c3566SBrandon Kim */ 431d0c3566SBrandon Kim virtual uint32_t getMemoryRegionSize() = 0; 441d0c3566SBrandon Kim }; 451d0c3566SBrandon Kim 461d0c3566SBrandon Kim } // namespace bios_bmc_smm_error_logger 47