1 #pragma once 2 3 #include "interface.hpp" 4 #include "internal/sys.hpp" 5 #include "io.hpp" 6 #include "pci.hpp" 7 #include "progress.hpp" 8 9 #include <cstdint> 10 #include <ipmiblob/blob_interface.hpp> 11 12 constexpr std::uint16_t aspeedVendorId = 0x1a03; 13 constexpr std::uint16_t aspeedDeviceId = 0x2000; 14 constexpr std::size_t aspeedP2aOffset = 0x10000; 15 constexpr std::size_t aspeedP2aConfig = 0x0f000; 16 constexpr std::size_t aspeedP2aBridge = 0x0f004; 17 constexpr std::uint32_t p2ABridgeEnabled = 0x1; 18 19 namespace host_tool 20 { 21 22 class P2aDataHandler : public DataInterface 23 { 24 public: 25 P2aDataHandler(ipmiblob::BlobInterface* blob, HostIoInterface* io, 26 PciUtilInterface* pci, ProgressInterface* progress, 27 const internal::Sys* sys = &internal::sys_impl) : 28 blob(blob), 29 io(io), pci(pci), progress(progress), sys(sys) 30 { 31 } 32 33 bool sendContents(const std::string& input, std::uint16_t session) override; 34 ipmi_flash::FirmwareFlags::UpdateFlags supportedType() const override 35 { 36 return ipmi_flash::FirmwareFlags::UpdateFlags::p2a; 37 } 38 39 private: 40 ipmiblob::BlobInterface* blob; 41 HostIoInterface* io; 42 PciUtilInterface* pci; 43 ProgressInterface* progress; 44 const internal::Sys* sys; 45 }; 46 47 } // namespace host_tool 48