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