xref: /openbmc/pldm/libpldmresponder/pdr.hpp (revision e53193fa)
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