1c6e8fb50SDeepak Kodihalli #pragma once 2c6e8fb50SDeepak Kodihalli 3c6e8fb50SDeepak Kodihalli #include "effecters.hpp" 4*e53193faSGeorge Liu #include "libpldmresponder/pdr_utils.hpp" 5aa8ae72fSSampa Misra #include "utils.hpp" 6c6e8fb50SDeepak Kodihalli 7c6e8fb50SDeepak Kodihalli #include <stdint.h> 8c6e8fb50SDeepak Kodihalli 9c6e8fb50SDeepak Kodihalli #include <filesystem> 10c6e8fb50SDeepak Kodihalli #include <fstream> 11c6e8fb50SDeepak Kodihalli #include <functional> 12aa8ae72fSSampa Misra #include <iostream> 13c6e8fb50SDeepak Kodihalli #include <map> 14c6e8fb50SDeepak Kodihalli #include <nlohmann/json.hpp> 15c6e8fb50SDeepak Kodihalli #include <string> 16c6e8fb50SDeepak Kodihalli #include <vector> 17c6e8fb50SDeepak Kodihalli #include <xyz/openbmc_project/Common/error.hpp> 18c6e8fb50SDeepak Kodihalli 19*e53193faSGeorge Liu #include "libpldm/pdr.h" 20c6e8fb50SDeepak Kodihalli #include "libpldm/platform.h" 21c6e8fb50SDeepak Kodihalli 22c6e8fb50SDeepak Kodihalli using InternalFailure = 23c6e8fb50SDeepak Kodihalli sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure; 24c6e8fb50SDeepak Kodihalli namespace fs = std::filesystem; 25c6e8fb50SDeepak Kodihalli 26*e53193faSGeorge Liu using namespace pldm::responder::pdr_utils; 27*e53193faSGeorge Liu 28c6e8fb50SDeepak Kodihalli namespace pldm 29c6e8fb50SDeepak Kodihalli { 30c6e8fb50SDeepak Kodihalli 31c6e8fb50SDeepak Kodihalli namespace responder 32c6e8fb50SDeepak Kodihalli { 33c6e8fb50SDeepak Kodihalli 34c6e8fb50SDeepak Kodihalli namespace pdr 35c6e8fb50SDeepak Kodihalli { 36c6e8fb50SDeepak Kodihalli /** @brief Parse PDR JSONs and build PDR repository 37c6e8fb50SDeepak Kodihalli * 38c6e8fb50SDeepak Kodihalli * @param[in] dir - directory housing platform specific PDR JSON files 39*e53193faSGeorge Liu * @param[in] repo - instance of the concrete implementation of RepoInterface 40c6e8fb50SDeepak Kodihalli */ 41*e53193faSGeorge Liu void generate(const std::string& dir, RepoInterface& repo); 42c6e8fb50SDeepak Kodihalli 43c6e8fb50SDeepak Kodihalli /** @brief Build (if not built already) and retrieve PDR 44c6e8fb50SDeepak Kodihalli * 45c6e8fb50SDeepak Kodihalli * @param[in] dir - directory housing platform specific PDR JSON files 46c6e8fb50SDeepak Kodihalli * 47*e53193faSGeorge Liu * @return RepoInterface& - Reference to instance of pdr::RepoInterface 48c6e8fb50SDeepak Kodihalli */ 49*e53193faSGeorge Liu RepoInterface& getRepo(const std::string& dir); 50*e53193faSGeorge Liu 51*e53193faSGeorge Liu /** @brief Build (if not built already) and retrieve PDR by the PDR types 52*e53193faSGeorge Liu * 53*e53193faSGeorge Liu * @param[in] dir - directory housing platform specific PDR JSON files 54*e53193faSGeorge Liu * @param[in] pdrType - the type of PDRs 55*e53193faSGeorge Liu * 56*e53193faSGeorge Liu * @return Repo - Instance of pdr::Repo 57*e53193faSGeorge Liu */ 58*e53193faSGeorge Liu Repo getRepoByType(const std::string& dir, Type pdrType); 59*e53193faSGeorge Liu 60*e53193faSGeorge Liu /** @brief Get the record of PDR by the record handle 61*e53193faSGeorge Liu * 62*e53193faSGeorge Liu * @param[in] pdrRepo - pdr::RepoInterface 63*e53193faSGeorge Liu * @param[in] recordHandle - The recordHandle value for the PDR to be 64*e53193faSGeorge Liu * retrieved. 65*e53193faSGeorge Liu * @param[out] pdrEntry - PDR entry structure reference 66*e53193faSGeorge Liu * 67*e53193faSGeorge Liu * @return pldm_pdr_record - Instance of pdr::RepoInterface 68*e53193faSGeorge Liu */ 69*e53193faSGeorge Liu const pldm_pdr_record* getRecordByHandle(RepoInterface& pdrRepo, 70*e53193faSGeorge Liu RecordHandle recordHandle, 71*e53193faSGeorge Liu PdrEntry& pdrEntry); 72c6e8fb50SDeepak Kodihalli 73c6e8fb50SDeepak Kodihalli } // namespace pdr 74c6e8fb50SDeepak Kodihalli } // namespace responder 75c6e8fb50SDeepak Kodihalli } // namespace pldm 76