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