xref: /openbmc/pldm/libpldmresponder/pdr.cpp (revision 7c14fc4793a4a5fca7210377c32bd241127e96d5)
1c6e8fb50SDeepak Kodihalli #include "pdr.hpp"
2c6e8fb50SDeepak Kodihalli 
3a2870726SGeorge Liu #include "pdr_state_effecter.hpp"
4c682fe2dSDeepak Kodihalli 
5c6e8fb50SDeepak Kodihalli namespace pldm
6c6e8fb50SDeepak Kodihalli {
7c6e8fb50SDeepak Kodihalli 
8c6e8fb50SDeepak Kodihalli namespace responder
9c6e8fb50SDeepak Kodihalli {
10c6e8fb50SDeepak Kodihalli 
11c6e8fb50SDeepak Kodihalli namespace pdr
12c6e8fb50SDeepak Kodihalli {
13e53193faSGeorge Liu using namespace pldm::responder::pdr_utils;
14c6e8fb50SDeepak Kodihalli 
getRepoByType(const Repo & inRepo,Repo & outRepo,Type pdrType)15c682fe2dSDeepak Kodihalli void getRepoByType(const Repo& inRepo, Repo& outRepo, Type pdrType)
16c6e8fb50SDeepak Kodihalli {
17e53193faSGeorge Liu     uint8_t* pdrData = nullptr;
18e53193faSGeorge Liu     uint32_t pdrSize{};
19*7c14fc47SJayanth Othayoth     auto record = pldm_pdr_find_record_by_type(inRepo.getPdr(), pdrType,
20*7c14fc47SJayanth Othayoth                                                nullptr, &pdrData, &pdrSize);
21e53193faSGeorge Liu     while (record)
22e53193faSGeorge Liu     {
23e53193faSGeorge Liu         PdrEntry pdrEntry{};
24e53193faSGeorge Liu         pdrEntry.data = pdrData;
25e53193faSGeorge Liu         pdrEntry.size = pdrSize;
26c682fe2dSDeepak Kodihalli         pdrEntry.handle.recordHandle = inRepo.getRecordHandle(record);
27c682fe2dSDeepak Kodihalli         outRepo.addRecord(pdrEntry);
28e53193faSGeorge Liu 
29e53193faSGeorge Liu         pdrData = nullptr;
30e53193faSGeorge Liu         pdrSize = 0;
31c682fe2dSDeepak Kodihalli         record = pldm_pdr_find_record_by_type(inRepo.getPdr(), pdrType, record,
32e53193faSGeorge Liu                                               &pdrData, &pdrSize);
33e53193faSGeorge Liu     }
34e53193faSGeorge Liu }
35e53193faSGeorge Liu 
getRecordByHandle(const RepoInterface & pdrRepo,RecordHandle recordHandle,PdrEntry & pdrEntry)3616c2a0a0SPatrick Williams const pldm_pdr_record* getRecordByHandle(
3716c2a0a0SPatrick Williams     const RepoInterface& pdrRepo, RecordHandle recordHandle, PdrEntry& pdrEntry)
38e53193faSGeorge Liu {
39e53193faSGeorge Liu     uint8_t* pdrData = nullptr;
4016c2a0a0SPatrick Williams     auto record =
4116c2a0a0SPatrick Williams         pldm_pdr_find_record(pdrRepo.getPdr(), recordHandle, &pdrData,
4216c2a0a0SPatrick Williams                              &pdrEntry.size, &pdrEntry.handle.nextRecordHandle);
43e53193faSGeorge Liu     if (record)
44e53193faSGeorge Liu     {
45e53193faSGeorge Liu         pdrEntry.data = pdrData;
46e53193faSGeorge Liu     }
47e53193faSGeorge Liu 
48e53193faSGeorge Liu     return record;
49e53193faSGeorge Liu }
50e53193faSGeorge Liu 
51c6e8fb50SDeepak Kodihalli } // namespace pdr
52c6e8fb50SDeepak Kodihalli } // namespace responder
53c6e8fb50SDeepak Kodihalli } // namespace pldm
54