1ded66d0fSJason Ling #pragma once 2ded66d0fSJason Ling 3ded66d0fSJason Ling #include "data_handler.hpp" 4ded66d0fSJason Ling #include "internal/sys.hpp" 5ded66d0fSJason Ling 6ded66d0fSJason Ling #include <cstdint> 7ded66d0fSJason Ling #include <string> 8ded66d0fSJason Ling #include <vector> 9ded66d0fSJason Ling 10ded66d0fSJason Ling namespace ipmi_flash 11ded66d0fSJason Ling { 12ded66d0fSJason Ling 13ded66d0fSJason Ling /** 14ded66d0fSJason Ling * Data handler for reading and writing data via the P2A bridge. 15ded66d0fSJason Ling * 16ded66d0fSJason Ling * @note: Currently implemented to support only aspeed-p2a-ctrl. 17ded66d0fSJason Ling */ 18ded66d0fSJason Ling class PciDataHandler : public DataInterface 19ded66d0fSJason Ling { 20ded66d0fSJason Ling public: PciDataHandler(std::uint32_t regionAddress,std::size_t regionSize,const internal::Sys * sys=& internal::sys_impl)21ded66d0fSJason Ling PciDataHandler(std::uint32_t regionAddress, std::size_t regionSize, 22ded66d0fSJason Ling const internal::Sys* sys = &internal::sys_impl) : 23*42a44c28SPatrick Williams regionAddress(regionAddress), memoryRegionSize(regionSize), sys(sys) {}; 24ded66d0fSJason Ling 25ded66d0fSJason Ling bool open() override; 26ded66d0fSJason Ling bool close() override; 27ded66d0fSJason Ling std::vector<std::uint8_t> copyFrom(std::uint32_t length) override; 28ded66d0fSJason Ling bool writeMeta(const std::vector<std::uint8_t>& configuration) override; 29ded66d0fSJason Ling std::vector<std::uint8_t> readMeta() override; 30ded66d0fSJason Ling 31ded66d0fSJason Ling private: 32ded66d0fSJason Ling std::uint32_t regionAddress; 33ded66d0fSJason Ling std::uint32_t memoryRegionSize; 34ded66d0fSJason Ling const internal::Sys* sys; 35ded66d0fSJason Ling 36ded66d0fSJason Ling int mappedFd = -1; 37ded66d0fSJason Ling std::uint8_t* mapped = nullptr; 38ded66d0fSJason Ling static const std::string p2aControlPath; 39ded66d0fSJason Ling }; 40ded66d0fSJason Ling 41ded66d0fSJason Ling } // namespace ipmi_flash 42