| #pragma once |
| |
| #include <cstdint> |
| #include <utility> |
| #include <vector> |
| |
| namespace ipmi_flash |
| { |
| |
| /** |
| * Different LPC (or P2a) memory map implementations may require different |
| * mechanisms for specific tasks such as mapping the memory window or copying |
| * out data. |
| */ |
| class HardwareMapperInterface |
| { |
| public: |
| virtual ~HardwareMapperInterface() = default; |
| |
| /** |
| * Close the mapper. This could mean, send an ioctl to turn off the region, |
| * or unmap anything mmapped. |
| */ |
| virtual void close() = 0; |
| |
| /** |
| * Returns a windowOffset and windowSize if the requested window was mapped. |
| * |
| * TODO: If the length requested is too large, windowSize will be written |
| * with the max size that the BMC can map and returns false. |
| * |
| * @param[in] address - The address for mapping (passed to LPC window) |
| * @param[in] length - The length of the region |
| * @return windowOffset, windowSize - The offset into the window and |
| * length of the region. On failure, length is set to 0. |
| */ |
| virtual std::pair<std::uint32_t, std::uint32_t> |
| mapWindow(std::uint32_t address, std::uint32_t length) = 0; |
| |
| /** |
| * Returns the bytes from the mapped window. |
| * |
| * @param[in] length - the number of bytes to copy. |
| * @return the bytes copied out of the region. |
| */ |
| virtual std::vector<std::uint8_t> copyFrom(std::uint32_t length) = 0; |
| }; |
| |
| } // namespace ipmi_flash |