1ded66d0fSJason Ling #pragma once 2ded66d0fSJason Ling 3ded66d0fSJason Ling #include "internal/sys.hpp" 4ded66d0fSJason Ling #include "window_hw_interface.hpp" 5ded66d0fSJason Ling 6ded66d0fSJason Ling #include <cstdint> 7ded66d0fSJason Ling #include <memory> 8ded66d0fSJason Ling #include <utility> 9ded66d0fSJason Ling #include <vector> 10ded66d0fSJason Ling 11ded66d0fSJason Ling namespace ipmi_flash 12ded66d0fSJason Ling { 13ded66d0fSJason Ling 14ded66d0fSJason Ling class LpcMapperNuvoton : public HardwareMapperInterface 15ded66d0fSJason Ling { 16ded66d0fSJason Ling public: 17*42a44c28SPatrick Williams static std::unique_ptr<HardwareMapperInterface> createNuvotonMapper( 18*42a44c28SPatrick Williams std::uint32_t regionAddress, std::uint32_t regionSize); 19ded66d0fSJason Ling 20ded66d0fSJason Ling /** 21ded66d0fSJason Ling * Create an LpcMapper for Nuvoton. 22ded66d0fSJason Ling * 23ded66d0fSJason Ling * @param[in] regionAddress - where to map the window into BMC memory. 24ded66d0fSJason Ling * @param[in] regionSize - the size to map for copying data. 25ded66d0fSJason Ling * @param[in] a sys call interface pointer. 26ded66d0fSJason Ling * @todo Needs reserved memory region's physical address and size. 27ded66d0fSJason Ling */ LpcMapperNuvoton(std::uint32_t regionAddress,std::uint32_t regionSize,const internal::Sys * sys=& internal::sys_impl)28ded66d0fSJason Ling LpcMapperNuvoton(std::uint32_t regionAddress, std::uint32_t regionSize, 29ded66d0fSJason Ling const internal::Sys* sys = &internal::sys_impl) : 30*42a44c28SPatrick Williams regionAddress(regionAddress), memoryRegionSize(regionSize), sys(sys) {}; 31ded66d0fSJason Ling 32ded66d0fSJason Ling /** Attempt to map the window for copying bytes, after mapWindow is called. 33ded66d0fSJason Ling * throws MapperException 34ded66d0fSJason Ling */ 35ded66d0fSJason Ling MemorySet open() override; 36ded66d0fSJason Ling 37ded66d0fSJason Ling void close() override; 38ded66d0fSJason Ling 39ded66d0fSJason Ling WindowMapResult mapWindow(std::uint32_t address, 40ded66d0fSJason Ling std::uint32_t length) override; 41ded66d0fSJason Ling 42ded66d0fSJason Ling private: 43ded66d0fSJason Ling std::uint32_t regionAddress; 44ded66d0fSJason Ling std::uint32_t memoryRegionSize; 45ded66d0fSJason Ling const internal::Sys* sys; 46ded66d0fSJason Ling 47ded66d0fSJason Ling /* The file handle to /dev/mem. */ 48ded66d0fSJason Ling int mappedFd = -1; 49ded66d0fSJason Ling 50ded66d0fSJason Ling /* The pointer to the memory-mapped region. */ 51ded66d0fSJason Ling std::uint8_t* mapped = nullptr; 52ded66d0fSJason Ling }; 53ded66d0fSJason Ling 54ded66d0fSJason Ling } // namespace ipmi_flash 55