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