xref: /openbmc/phosphor-bmc-code-mgmt/cpld/cpld_interface.cpp (revision f6470b5e95618fa0eeb8b03b37c53a311dfc1ef3)
1*f6470b5eSDaniel Hsu #include "cpld_interface.hpp"
2*f6470b5eSDaniel Hsu 
3*f6470b5eSDaniel Hsu #include "lattice/interface.hpp"
4*f6470b5eSDaniel Hsu 
5*f6470b5eSDaniel Hsu namespace phosphor::software::cpld
6*f6470b5eSDaniel Hsu {
7*f6470b5eSDaniel Hsu 
8*f6470b5eSDaniel Hsu CPLDFactory& CPLDFactory::instance()
9*f6470b5eSDaniel Hsu {
10*f6470b5eSDaniel Hsu     static CPLDFactory factory;
11*f6470b5eSDaniel Hsu     return factory;
12*f6470b5eSDaniel Hsu }
13*f6470b5eSDaniel Hsu 
14*f6470b5eSDaniel Hsu void CPLDFactory::registerCPLD(const std::string& vendorName, Creator creator)
15*f6470b5eSDaniel Hsu {
16*f6470b5eSDaniel Hsu     creators[vendorName] = std::move(creator);
17*f6470b5eSDaniel Hsu }
18*f6470b5eSDaniel Hsu 
19*f6470b5eSDaniel Hsu std::unique_ptr<CPLDInterface> CPLDFactory::create(
20*f6470b5eSDaniel Hsu     const std::string& vendorName, sdbusplus::async::context& ctx,
21*f6470b5eSDaniel Hsu     const std::string& chipName, uint16_t bus, uint8_t address) const
22*f6470b5eSDaniel Hsu {
23*f6470b5eSDaniel Hsu     auto it = creators.find(vendorName);
24*f6470b5eSDaniel Hsu     if (it != creators.end())
25*f6470b5eSDaniel Hsu     {
26*f6470b5eSDaniel Hsu         return (it->second)(ctx, chipName, bus, address);
27*f6470b5eSDaniel Hsu     }
28*f6470b5eSDaniel Hsu     return nullptr;
29*f6470b5eSDaniel Hsu }
30*f6470b5eSDaniel Hsu 
31*f6470b5eSDaniel Hsu std::vector<std::string> CPLDFactory::getConfigs()
32*f6470b5eSDaniel Hsu {
33*f6470b5eSDaniel Hsu     std::vector<std::string> configs;
34*f6470b5eSDaniel Hsu     configs.reserve(creators.size());
35*f6470b5eSDaniel Hsu 
36*f6470b5eSDaniel Hsu     std::transform(creators.begin(), creators.end(),
37*f6470b5eSDaniel Hsu                    std::back_inserter(configs),
38*f6470b5eSDaniel Hsu                    [](const auto& pair) { return pair.first; });
39*f6470b5eSDaniel Hsu 
40*f6470b5eSDaniel Hsu     return configs;
41*f6470b5eSDaniel Hsu }
42*f6470b5eSDaniel Hsu 
43*f6470b5eSDaniel Hsu } // namespace phosphor::software::cpld
44