1*1d0c3566SBrandon Kim #pragma once 2*1d0c3566SBrandon Kim 3*1d0c3566SBrandon Kim #include <cstdint> 4*1d0c3566SBrandon Kim #include <span> 5*1d0c3566SBrandon Kim #include <vector> 6*1d0c3566SBrandon Kim 7*1d0c3566SBrandon Kim namespace bios_bmc_smm_error_logger 8*1d0c3566SBrandon Kim { 9*1d0c3566SBrandon Kim 10*1d0c3566SBrandon Kim /** 11*1d0c3566SBrandon Kim * Each data transport mechanism must implement the DataInterface. 12*1d0c3566SBrandon Kim */ 13*1d0c3566SBrandon Kim class DataInterface 14*1d0c3566SBrandon Kim { 15*1d0c3566SBrandon Kim public: 16*1d0c3566SBrandon Kim virtual ~DataInterface() = default; 17*1d0c3566SBrandon Kim 18*1d0c3566SBrandon Kim /** 19*1d0c3566SBrandon Kim * Read bytes from shared buffer (blocking call). 20*1d0c3566SBrandon Kim * 21*1d0c3566SBrandon Kim * @param[in] offset - offset to read from 22*1d0c3566SBrandon Kim * @param[in] length - number of bytes to read 23*1d0c3566SBrandon Kim * @return the bytes read 24*1d0c3566SBrandon Kim */ 25*1d0c3566SBrandon Kim virtual std::vector<uint8_t> read(const uint32_t offset, 26*1d0c3566SBrandon Kim const uint32_t length) = 0; 27*1d0c3566SBrandon Kim 28*1d0c3566SBrandon Kim /** 29*1d0c3566SBrandon Kim * Write bytes to shared buffer. 30*1d0c3566SBrandon Kim * 31*1d0c3566SBrandon Kim * @param[in] offset - offset to write to 32*1d0c3566SBrandon Kim * @param[in] bytes - byte vector of data. 33*1d0c3566SBrandon Kim * @return return the byte length written 34*1d0c3566SBrandon Kim */ 35*1d0c3566SBrandon Kim virtual uint32_t write(const uint32_t offset, 36*1d0c3566SBrandon Kim const std::span<const uint8_t> bytes) = 0; 37*1d0c3566SBrandon Kim 38*1d0c3566SBrandon Kim /** 39*1d0c3566SBrandon Kim * Getter for Memory Region Size 40*1d0c3566SBrandon Kim * 41*1d0c3566SBrandon Kim * @return return Memory Region size allocated 42*1d0c3566SBrandon Kim */ 43*1d0c3566SBrandon Kim virtual uint32_t getMemoryRegionSize() = 0; 44*1d0c3566SBrandon Kim }; 45*1d0c3566SBrandon Kim 46*1d0c3566SBrandon Kim } // namespace bios_bmc_smm_error_logger 47