155dcadaeSBrandon Kim #pragma once 255dcadaeSBrandon Kim 3*1d0c3566SBrandon Kim #include "data_interface.hpp" 4*1d0c3566SBrandon Kim 555dcadaeSBrandon Kim #include <stdplus/fd/managed.hpp> 655dcadaeSBrandon Kim #include <stdplus/fd/mmap.hpp> 755dcadaeSBrandon Kim 855dcadaeSBrandon Kim #include <cstdint> 955dcadaeSBrandon Kim #include <memory> 1055dcadaeSBrandon Kim #include <span> 1155dcadaeSBrandon Kim #include <vector> 1255dcadaeSBrandon Kim 1355dcadaeSBrandon Kim namespace bios_bmc_smm_error_logger 1455dcadaeSBrandon Kim { 1555dcadaeSBrandon Kim 1655dcadaeSBrandon Kim /** 1755dcadaeSBrandon Kim * Data handler for reading and writing data via the PCI bridge. 1855dcadaeSBrandon Kim * 1955dcadaeSBrandon Kim */ 2055dcadaeSBrandon Kim class PciDataHandler : public DataInterface 2155dcadaeSBrandon Kim { 2255dcadaeSBrandon Kim public: 2355dcadaeSBrandon Kim explicit PciDataHandler(uint32_t regionAddress, size_t regionSize, 2455dcadaeSBrandon Kim std::unique_ptr<stdplus::fd::Fd> fd); 2555dcadaeSBrandon Kim 2655dcadaeSBrandon Kim std::vector<uint8_t> read(uint32_t offset, uint32_t length) override; 2755dcadaeSBrandon Kim uint32_t write(const uint32_t offset, 2855dcadaeSBrandon Kim const std::span<const uint8_t> bytes) override; 2955dcadaeSBrandon Kim uint32_t getMemoryRegionSize() override; 3055dcadaeSBrandon Kim 3155dcadaeSBrandon Kim private: 3255dcadaeSBrandon Kim uint32_t regionSize; 3355dcadaeSBrandon Kim 3455dcadaeSBrandon Kim std::unique_ptr<stdplus::fd::Fd> fd; 3555dcadaeSBrandon Kim stdplus::fd::MMap mmap; 3655dcadaeSBrandon Kim }; 3755dcadaeSBrandon Kim 3855dcadaeSBrandon Kim } // namespace bios_bmc_smm_error_logger 39