xref: /openbmc/phosphor-ipmi-flash/bmc/firmware-handler/pci_handler.hpp (revision 42a44c281cce08be0ca6251955f4fb73d30c8ced)
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