xref: /openbmc/pldm/libpldmresponder/fru.hpp (revision 366507c82a4781c4a893ab9b9ca7b38f2157a353)
170e8db0cSDeepak Kodihalli #pragma once
270e8db0cSDeepak Kodihalli 
370e8db0cSDeepak Kodihalli #include "fru_parser.hpp"
4a410c658SPavithra Barithaya #include "libpldmresponder/pdr_utils.hpp"
5a410c658SPavithra Barithaya #include "oem_handler.hpp"
61521f6d1SDeepak Kodihalli #include "pldmd/handler.hpp"
770e8db0cSDeepak Kodihalli 
8c453e164SGeorge Liu #include <libpldm/fru.h>
9c453e164SGeorge Liu #include <libpldm/pdr.h>
10c453e164SGeorge Liu 
1170e8db0cSDeepak Kodihalli #include <sdbusplus/message.hpp>
126492f524SGeorge Liu 
136492f524SGeorge Liu #include <map>
1470e8db0cSDeepak Kodihalli #include <string>
1570e8db0cSDeepak Kodihalli #include <variant>
1670e8db0cSDeepak Kodihalli #include <vector>
1770e8db0cSDeepak Kodihalli 
1870e8db0cSDeepak Kodihalli namespace pldm
1970e8db0cSDeepak Kodihalli {
2070e8db0cSDeepak Kodihalli 
2170e8db0cSDeepak Kodihalli namespace responder
2270e8db0cSDeepak Kodihalli {
2370e8db0cSDeepak Kodihalli 
2470e8db0cSDeepak Kodihalli namespace dbus
2570e8db0cSDeepak Kodihalli {
2670e8db0cSDeepak Kodihalli 
27754041d0SRiya Dixit using Value = std::variant<bool, uint8_t, int16_t, uint16_t, int32_t, uint32_t,
28754041d0SRiya Dixit                            int64_t, uint64_t, double, std::string,
29754041d0SRiya Dixit                            std::vector<uint8_t>, std::vector<std::string>>;
3070e8db0cSDeepak Kodihalli using PropertyMap = std::map<Property, Value>;
3170e8db0cSDeepak Kodihalli using InterfaceMap = std::map<Interface, PropertyMap>;
3270e8db0cSDeepak Kodihalli using ObjectValueTree = std::map<sdbusplus::message::object_path, InterfaceMap>;
333cd61814SDeepak Kodihalli using ObjectPath = std::string;
34c4ea6a90SGeorge Liu using AssociatedEntityMap = std::map<ObjectPath, pldm_entity>;
3570e8db0cSDeepak Kodihalli 
3670e8db0cSDeepak Kodihalli } // namespace dbus
3770e8db0cSDeepak Kodihalli 
3870e8db0cSDeepak Kodihalli /** @class FruImpl
3970e8db0cSDeepak Kodihalli  *
4070e8db0cSDeepak Kodihalli  *  @brief Builds the PLDM FRU table containing the FRU records
4170e8db0cSDeepak Kodihalli  */
4270e8db0cSDeepak Kodihalli class FruImpl
4370e8db0cSDeepak Kodihalli {
4470e8db0cSDeepak Kodihalli   public:
4570e8db0cSDeepak Kodihalli     /* @brief Header size for FRU record, it includes the FRU record set
4670e8db0cSDeepak Kodihalli      *        identifier, FRU record type, Number of FRU fields, Encoding type
4770e8db0cSDeepak Kodihalli      *        of FRU fields
4870e8db0cSDeepak Kodihalli      */
4970e8db0cSDeepak Kodihalli     static constexpr size_t recHeaderSize =
5070e8db0cSDeepak Kodihalli         sizeof(struct pldm_fru_record_data_format) -
5170e8db0cSDeepak Kodihalli         sizeof(struct pldm_fru_record_tlv);
5270e8db0cSDeepak Kodihalli 
5333e9c7eaSTom Joseph     /** @brief Constructor for FruImpl, the configPath is consumed to build the
5433e9c7eaSTom Joseph      *         FruParser object.
5570e8db0cSDeepak Kodihalli      *
5670e8db0cSDeepak Kodihalli      *  @param[in] configPath - path to the directory containing config files
5770e8db0cSDeepak Kodihalli      *                          for PLDM FRU
5803b01ca8SManojkiran Eda      *  @param[in] fruMasterJsonPath - path to the file containing the FRU D-Bus
5903b01ca8SManojkiran Eda      *                                 Lookup Map
6033e9c7eaSTom Joseph      *  @param[in] pdrRepo - opaque pointer to PDR repository
6133e9c7eaSTom Joseph      *  @param[in] entityTree - opaque pointer to the entity association tree
62c073a20eSSampa Misra      *  @param[in] bmcEntityTree - opaque pointer to bmc's entity association
63c073a20eSSampa Misra      *                             tree
64a410c658SPavithra Barithaya      *  @param[in] oemFruHandler - OEM fru handler
6570e8db0cSDeepak Kodihalli      */
FruImpl(const std::string & configPath,const std::filesystem::path & fruMasterJsonPath,pldm_pdr * pdrRepo,pldm_entity_association_tree * entityTree,pldm_entity_association_tree * bmcEntityTree)6603b01ca8SManojkiran Eda     FruImpl(const std::string& configPath,
6703b01ca8SManojkiran Eda             const std::filesystem::path& fruMasterJsonPath, pldm_pdr* pdrRepo,
68c073a20eSSampa Misra             pldm_entity_association_tree* entityTree,
69a881c170SGeorge Liu             pldm_entity_association_tree* bmcEntityTree) :
7016c2a0a0SPatrick Williams         parser(configPath, fruMasterJsonPath), pdrRepo(pdrRepo),
7116c2a0a0SPatrick Williams         entityTree(entityTree), bmcEntityTree(bmcEntityTree)
7233e9c7eaSTom Joseph     {}
7370e8db0cSDeepak Kodihalli 
749e6631e2SPavithra Barithaya     /** @brief Total length of the FRU table in bytes, this includes the pad
7570e8db0cSDeepak Kodihalli      *         bytes and the checksum.
7670e8db0cSDeepak Kodihalli      *
7770e8db0cSDeepak Kodihalli      *  @return size of the FRU table
7870e8db0cSDeepak Kodihalli      */
size() const7970e8db0cSDeepak Kodihalli     uint32_t size() const
8070e8db0cSDeepak Kodihalli     {
819e6631e2SPavithra Barithaya         return table.size();
8270e8db0cSDeepak Kodihalli     }
8370e8db0cSDeepak Kodihalli 
8470e8db0cSDeepak Kodihalli     /** @brief The checksum of the contents of the FRU table
8570e8db0cSDeepak Kodihalli      *
8670e8db0cSDeepak Kodihalli      *  @return checksum
8770e8db0cSDeepak Kodihalli      */
checkSum() const8870e8db0cSDeepak Kodihalli     uint32_t checkSum() const
8970e8db0cSDeepak Kodihalli     {
9070e8db0cSDeepak Kodihalli         return checksum;
9170e8db0cSDeepak Kodihalli     }
9270e8db0cSDeepak Kodihalli 
9370e8db0cSDeepak Kodihalli     /** @brief Number of record set identifiers in the FRU tables
9470e8db0cSDeepak Kodihalli      *
9570e8db0cSDeepak Kodihalli      *  @return number of record set identifiers
9670e8db0cSDeepak Kodihalli      */
numRSI() const9770e8db0cSDeepak Kodihalli     uint16_t numRSI() const
9870e8db0cSDeepak Kodihalli     {
9970e8db0cSDeepak Kodihalli         return rsi;
10070e8db0cSDeepak Kodihalli     }
10170e8db0cSDeepak Kodihalli 
10270e8db0cSDeepak Kodihalli     /** @brief The number of FRU records in the table
10370e8db0cSDeepak Kodihalli      *
10470e8db0cSDeepak Kodihalli      *  @return number of FRU records
10570e8db0cSDeepak Kodihalli      */
numRecords() const10670e8db0cSDeepak Kodihalli     uint16_t numRecords() const
10770e8db0cSDeepak Kodihalli     {
10870e8db0cSDeepak Kodihalli         return numRecs;
10970e8db0cSDeepak Kodihalli     }
11070e8db0cSDeepak Kodihalli 
11170e8db0cSDeepak Kodihalli     /** @brief Get the FRU table
11270e8db0cSDeepak Kodihalli      *
11370e8db0cSDeepak Kodihalli      *  @param[out] - Populate response with the FRU table
11470e8db0cSDeepak Kodihalli      */
11570e8db0cSDeepak Kodihalli     void getFRUTable(Response& response);
11670e8db0cSDeepak Kodihalli 
1179e6631e2SPavithra Barithaya     /** @brief Get the Fru Table MetaData
1189e6631e2SPavithra Barithaya      *
1199e6631e2SPavithra Barithaya      */
1209e6631e2SPavithra Barithaya     void getFRURecordTableMetadata();
1219e6631e2SPavithra Barithaya 
1229e82ad1fSJohn Wang     /** @brief Get FRU Record Table By Option
1239e82ad1fSJohn Wang      *  @param[out] response - Populate response with the FRU table got by
1249e82ad1fSJohn Wang      *                         options
1259e82ad1fSJohn Wang      *  @param[in] fruTableHandle - The fru table handle
1269e82ad1fSJohn Wang      *  @param[in] recordSetIdentifer - The record set identifier
1279e82ad1fSJohn Wang      *  @param[in] recordType - The record type
1289e82ad1fSJohn Wang      *  @param[in] fieldType - The field type
1299e82ad1fSJohn Wang      */
1309e82ad1fSJohn Wang     int getFRURecordByOption(Response& response, uint16_t fruTableHandle,
1319e82ad1fSJohn Wang                              uint16_t recordSetIdentifer, uint8_t recordType,
1329e82ad1fSJohn Wang                              uint8_t fieldType);
1339e82ad1fSJohn Wang 
13433e9c7eaSTom Joseph     /** @brief FRU table is built by processing the D-Bus inventory namespace
13533e9c7eaSTom Joseph      *         based on the config files for FRU. The table is populated based
13633e9c7eaSTom Joseph      *         on the isBuilt flag.
13733e9c7eaSTom Joseph      */
13833e9c7eaSTom Joseph     void buildFRUTable();
13933e9c7eaSTom Joseph 
140c4ea6a90SGeorge Liu     /** @brief Get std::map associated with the entity
141c4ea6a90SGeorge Liu      *         key: object path
142c4ea6a90SGeorge Liu      *         value: pldm_entity
143c4ea6a90SGeorge Liu      *
144c4ea6a90SGeorge Liu      *  @return std::map<ObjectPath, pldm_entity>
145c4ea6a90SGeorge Liu      */
146c4ea6a90SGeorge Liu     inline const pldm::responder::dbus::AssociatedEntityMap&
getAssociateEntityMap() const147c4ea6a90SGeorge Liu         getAssociateEntityMap() const
148c4ea6a90SGeorge Liu     {
149c4ea6a90SGeorge Liu         return associatedEntityMap;
150c4ea6a90SGeorge Liu     }
151c4ea6a90SGeorge Liu 
1525bfb0dcbSGeorge Liu     /** @brief Get pldm entity by the object path
1535bfb0dcbSGeorge Liu      *
1545bfb0dcbSGeorge Liu      *  @param[in] intfMaps - D-Bus interfaces and the associated property
1555bfb0dcbSGeorge Liu      *                        values for the FRU
1565bfb0dcbSGeorge Liu      *
1575bfb0dcbSGeorge Liu      *  @return pldm_entity
1585bfb0dcbSGeorge Liu      */
159*366507c8SPatrick Williams     std::optional<pldm_entity> getEntityByObjectPath(
160*366507c8SPatrick Williams         const dbus::InterfaceMap& intfMaps);
1615bfb0dcbSGeorge Liu 
1625bfb0dcbSGeorge Liu     /** @brief Update pldm entity to association tree
1635bfb0dcbSGeorge Liu      *
1645bfb0dcbSGeorge Liu      *  @param[in] objects - std::map The object value tree
1655bfb0dcbSGeorge Liu      *  @param[in] path    - Object path
1665bfb0dcbSGeorge Liu      *
1675bfb0dcbSGeorge Liu      *  Ex: Input path =
1685bfb0dcbSGeorge Liu      *  "/xyz/openbmc_project/inventory/system/chassis/motherboard/powersupply0"
1695bfb0dcbSGeorge Liu      *
1705bfb0dcbSGeorge Liu      *  Get the parent class in turn and store it in a temporary vector
1715bfb0dcbSGeorge Liu      *
1725bfb0dcbSGeorge Liu      *  Output tmpObjPaths = {
1735bfb0dcbSGeorge Liu      *  "/xyz/openbmc_project/inventory/system",
1745bfb0dcbSGeorge Liu      *  "/xyz/openbmc_project/inventory/system/chassis/",
1755bfb0dcbSGeorge Liu      *  "/xyz/openbmc_project/inventory/system/chassis/motherboard",
1765bfb0dcbSGeorge Liu      *  "/xyz/openbmc_project/inventory/system/chassis/motherboard/powersupply0"}
1775bfb0dcbSGeorge Liu      *
1785bfb0dcbSGeorge Liu      */
1795bfb0dcbSGeorge Liu     void updateAssociationTree(const dbus::ObjectValueTree& objects,
1805bfb0dcbSGeorge Liu                                const std::string& path);
1815bfb0dcbSGeorge Liu 
18247180ac9SPavithra Barithaya     /* @brief Method to populate the firmware version ID
18347180ac9SPavithra Barithaya      *
18447180ac9SPavithra Barithaya      * @return firmware version ID
18547180ac9SPavithra Barithaya      */
18647180ac9SPavithra Barithaya     std::string populatefwVersion();
18747180ac9SPavithra Barithaya 
1889e6631e2SPavithra Barithaya     /* @brief Method to resize the table
1899e6631e2SPavithra Barithaya      *
1909e6631e2SPavithra Barithaya      * @return resized table
1919e6631e2SPavithra Barithaya      */
1929e6631e2SPavithra Barithaya     std::vector<uint8_t> tableResize();
1939e6631e2SPavithra Barithaya 
194a410c658SPavithra Barithaya     /* @brief set FRU Record Table
195a410c658SPavithra Barithaya      *
196a410c658SPavithra Barithaya      * @param[in] fruData - the data of the fru
197a410c658SPavithra Barithaya      *
198a410c658SPavithra Barithaya      * @return PLDM completion code
199a410c658SPavithra Barithaya      */
200a410c658SPavithra Barithaya     int setFRUTable(const std::vector<uint8_t>& fruData);
201a410c658SPavithra Barithaya 
202a881c170SGeorge Liu     /* @brief Method to set the oem platform handler in fru handler class
203a881c170SGeorge Liu      *
204a881c170SGeorge Liu      * @param[in] handler - oem fru handler
205a881c170SGeorge Liu      */
setOemFruHandler(pldm::responder::oem_fru::Handler * handler)206a881c170SGeorge Liu     inline void setOemFruHandler(pldm::responder::oem_fru::Handler* handler)
207a881c170SGeorge Liu     {
208a881c170SGeorge Liu         oemFruHandler = handler;
209a881c170SGeorge Liu     }
210a881c170SGeorge Liu 
21170e8db0cSDeepak Kodihalli   private:
nextRSI()21270e8db0cSDeepak Kodihalli     uint16_t nextRSI()
21370e8db0cSDeepak Kodihalli     {
21470e8db0cSDeepak Kodihalli         return ++rsi;
21570e8db0cSDeepak Kodihalli     }
21670e8db0cSDeepak Kodihalli 
nextRecordHandle()2174f2538a6SPavithra Barithaya     uint32_t nextRecordHandle()
2184f2538a6SPavithra Barithaya     {
2194f2538a6SPavithra Barithaya         return ++rh;
2204f2538a6SPavithra Barithaya     }
2214f2538a6SPavithra Barithaya 
2224f2538a6SPavithra Barithaya     uint32_t rh = 0;
22370e8db0cSDeepak Kodihalli     uint16_t rsi = 0;
22470e8db0cSDeepak Kodihalli     uint16_t numRecs = 0;
22570e8db0cSDeepak Kodihalli     uint8_t padBytes = 0;
22670e8db0cSDeepak Kodihalli     std::vector<uint8_t> table;
22770e8db0cSDeepak Kodihalli     uint32_t checksum = 0;
22833e9c7eaSTom Joseph     bool isBuilt = false;
22970e8db0cSDeepak Kodihalli 
23033e9c7eaSTom Joseph     fru_parser::FruParser parser;
2313cd61814SDeepak Kodihalli     pldm_pdr* pdrRepo;
2323cd61814SDeepak Kodihalli     pldm_entity_association_tree* entityTree;
233c073a20eSSampa Misra     pldm_entity_association_tree* bmcEntityTree;
234a881c170SGeorge Liu     pldm::responder::oem_fru::Handler* oemFruHandler = nullptr;
235754041d0SRiya Dixit     dbus::ObjectValueTree objects;
2363cd61814SDeepak Kodihalli 
2373cd61814SDeepak Kodihalli     std::map<dbus::ObjectPath, pldm_entity_node*> objToEntityNode{};
2383cd61814SDeepak Kodihalli 
23970e8db0cSDeepak Kodihalli     /** @brief populateRecord builds the FRU records for an instance of FRU and
24070e8db0cSDeepak Kodihalli      *         updates the FRU table with the FRU records.
24170e8db0cSDeepak Kodihalli      *
24270e8db0cSDeepak Kodihalli      *  @param[in] interfaces - D-Bus interfaces and the associated property
24370e8db0cSDeepak Kodihalli      *                          values for the FRU
24470e8db0cSDeepak Kodihalli      *  @param[in] recordInfos - FRU record info to build the FRU records
2453cd61814SDeepak Kodihalli      *  @param[in/out] entity - PLDM entity corresponding to FRU instance
24670e8db0cSDeepak Kodihalli      */
247c4ea6a90SGeorge Liu     void populateRecords(const dbus::InterfaceMap& interfaces,
2483cd61814SDeepak Kodihalli                          const fru_parser::FruRecordInfos& recordInfos,
2493cd61814SDeepak Kodihalli                          const pldm_entity& entity);
250c4ea6a90SGeorge Liu 
251c4ea6a90SGeorge Liu     /** @brief Associate sensor/effecter to FRU entity
252c4ea6a90SGeorge Liu      */
253c4ea6a90SGeorge Liu     dbus::AssociatedEntityMap associatedEntityMap;
25470e8db0cSDeepak Kodihalli };
25570e8db0cSDeepak Kodihalli 
256e60c5822SDeepak Kodihalli namespace fru
257e60c5822SDeepak Kodihalli {
258e60c5822SDeepak Kodihalli 
259e60c5822SDeepak Kodihalli class Handler : public CmdHandler
260e60c5822SDeepak Kodihalli {
261e60c5822SDeepak Kodihalli   public:
Handler(const std::string & configPath,const std::filesystem::path & fruMasterJsonPath,pldm_pdr * pdrRepo,pldm_entity_association_tree * entityTree,pldm_entity_association_tree * bmcEntityTree)26203b01ca8SManojkiran Eda     Handler(const std::string& configPath,
26303b01ca8SManojkiran Eda             const std::filesystem::path& fruMasterJsonPath, pldm_pdr* pdrRepo,
264c073a20eSSampa Misra             pldm_entity_association_tree* entityTree,
265a881c170SGeorge Liu             pldm_entity_association_tree* bmcEntityTree) :
266a881c170SGeorge Liu         impl(configPath, fruMasterJsonPath, pdrRepo, entityTree, bmcEntityTree)
267e60c5822SDeepak Kodihalli     {
268d2e48991SDelphine CC Chiu         handlers.emplace(
269d2e48991SDelphine CC Chiu             PLDM_GET_FRU_RECORD_TABLE_METADATA,
270d2e48991SDelphine CC Chiu             [this](pldm_tid_t, const pldm_msg* request, size_t payloadLength) {
2716da4f91bSPatrick Williams                 return this->getFRURecordTableMetadata(request, payloadLength);
272e60c5822SDeepak Kodihalli             });
273d2e48991SDelphine CC Chiu         handlers.emplace(
274d2e48991SDelphine CC Chiu             PLDM_GET_FRU_RECORD_TABLE,
275d2e48991SDelphine CC Chiu             [this](pldm_tid_t, const pldm_msg* request, size_t payloadLength) {
2766da4f91bSPatrick Williams                 return this->getFRURecordTable(request, payloadLength);
277e60c5822SDeepak Kodihalli             });
278d2e48991SDelphine CC Chiu         handlers.emplace(
279d2e48991SDelphine CC Chiu             PLDM_GET_FRU_RECORD_BY_OPTION,
280d2e48991SDelphine CC Chiu             [this](pldm_tid_t, const pldm_msg* request, size_t payloadLength) {
2816da4f91bSPatrick Williams                 return this->getFRURecordByOption(request, payloadLength);
2829e82ad1fSJohn Wang             });
283a410c658SPavithra Barithaya         handlers.emplace(
284a410c658SPavithra Barithaya             PLDM_SET_FRU_RECORD_TABLE,
285a410c658SPavithra Barithaya             [this](pldm_tid_t, const pldm_msg* request, size_t payloadLength) {
286a410c658SPavithra Barithaya                 return this->setFRURecordTable(request, payloadLength);
287a410c658SPavithra Barithaya             });
288e60c5822SDeepak Kodihalli     }
289e60c5822SDeepak Kodihalli 
290e60c5822SDeepak Kodihalli     /** @brief Handler for Get FRURecordTableMetadata
291e60c5822SDeepak Kodihalli      *
292e60c5822SDeepak Kodihalli      *  @param[in] request - Request message payload
293e60c5822SDeepak Kodihalli      *  @param[in] payloadLength - Request payload length
294e60c5822SDeepak Kodihalli      *
295e60c5822SDeepak Kodihalli      *  @return PLDM response message
296e60c5822SDeepak Kodihalli      */
297e60c5822SDeepak Kodihalli     Response getFRURecordTableMetadata(const pldm_msg* request,
298e60c5822SDeepak Kodihalli                                        size_t payloadLength);
299e60c5822SDeepak Kodihalli 
300e60c5822SDeepak Kodihalli     /** @brief Handler for GetFRURecordTable
301e60c5822SDeepak Kodihalli      *
302e60c5822SDeepak Kodihalli      *  @param[in] request - Request message payload
303e60c5822SDeepak Kodihalli      *  @param[in] payloadLength - Request payload length
304e60c5822SDeepak Kodihalli      *
305e60c5822SDeepak Kodihalli      *  @return PLDM response message
306e60c5822SDeepak Kodihalli      */
307e60c5822SDeepak Kodihalli     Response getFRURecordTable(const pldm_msg* request, size_t payloadLength);
3083cd61814SDeepak Kodihalli 
30933e9c7eaSTom Joseph     /** @brief Build FRU table is bnot already built
31033e9c7eaSTom Joseph      *
31133e9c7eaSTom Joseph      */
buildFRUTable()31233e9c7eaSTom Joseph     void buildFRUTable()
31333e9c7eaSTom Joseph     {
31433e9c7eaSTom Joseph         impl.buildFRUTable();
31533e9c7eaSTom Joseph     }
31633e9c7eaSTom Joseph 
317c4ea6a90SGeorge Liu     /** @brief Get std::map associated with the entity
318c4ea6a90SGeorge Liu      *         key: object path
319c4ea6a90SGeorge Liu      *         value: pldm_entity
320c4ea6a90SGeorge Liu      *
321c4ea6a90SGeorge Liu      *  @return std::map<ObjectPath, pldm_entity>
322c4ea6a90SGeorge Liu      */
getAssociateEntityMap() const323*366507c8SPatrick Williams     const pldm::responder::dbus::AssociatedEntityMap& getAssociateEntityMap()
324*366507c8SPatrick Williams         const
325c4ea6a90SGeorge Liu     {
326c4ea6a90SGeorge Liu         return impl.getAssociateEntityMap();
327c4ea6a90SGeorge Liu     }
328c4ea6a90SGeorge Liu 
3299e82ad1fSJohn Wang     /** @brief Handler for GetFRURecordByOption
3309e82ad1fSJohn Wang      *
3319e82ad1fSJohn Wang      *  @param[in] request - Request message payload
3329e82ad1fSJohn Wang      *  @param[in] payloadLength - Request payload length
3339e82ad1fSJohn Wang      *
3349e82ad1fSJohn Wang      *  @return PLDM response message
3359e82ad1fSJohn Wang      */
3369e82ad1fSJohn Wang     Response getFRURecordByOption(const pldm_msg* request,
3379e82ad1fSJohn Wang                                   size_t payloadLength);
3389e82ad1fSJohn Wang 
339a410c658SPavithra Barithaya     /** @brief Handler for SetFRURecordTable
340a410c658SPavithra Barithaya      *
341a410c658SPavithra Barithaya      *  @param[in] request - Request message
342a410c658SPavithra Barithaya      *  @param[in] payloadLength - Request payload length
343a410c658SPavithra Barithaya      *
344a410c658SPavithra Barithaya      *  @return PLDM response message
345a410c658SPavithra Barithaya      */
346a410c658SPavithra Barithaya     Response setFRURecordTable(const pldm_msg* request, size_t payloadLength);
347a410c658SPavithra Barithaya 
348a881c170SGeorge Liu     /* @brief Method to set the oem platform handler in fru handler class
349a881c170SGeorge Liu      *
350a881c170SGeorge Liu      * @param[in] handler - oem fru handler
351a881c170SGeorge Liu      */
setOemFruHandler(pldm::responder::oem_fru::Handler * handler)352a881c170SGeorge Liu     void setOemFruHandler(pldm::responder::oem_fru::Handler* handler)
353a881c170SGeorge Liu     {
354a881c170SGeorge Liu         impl.setOemFruHandler(handler);
355a881c170SGeorge Liu     }
356a881c170SGeorge Liu 
357a410c658SPavithra Barithaya     using Table = std::vector<uint8_t>;
358a410c658SPavithra Barithaya 
3593cd61814SDeepak Kodihalli   private:
3603cd61814SDeepak Kodihalli     FruImpl impl;
361e60c5822SDeepak Kodihalli };
362e60c5822SDeepak Kodihalli 
363e60c5822SDeepak Kodihalli } // namespace fru
364e60c5822SDeepak Kodihalli 
36570e8db0cSDeepak Kodihalli } // namespace responder
36670e8db0cSDeepak Kodihalli 
36770e8db0cSDeepak Kodihalli } // namespace pldm
368