host-bmc PDR flow: support refreshEntireRepository
Support the refreshEntireRepository format of the
pldmPDRRepositoryChgEvent event, to fetch all PDRs of the host.
Signed-off-by: Deepak Kodihalli <dkodihal@in.ibm.com>
Change-Id: Ic91806e35c34b6fb9421df6be7e801d0c8c7c866
diff --git a/host-bmc/host_pdr_handler.cpp b/host-bmc/host_pdr_handler.cpp
index 3c8d54e..f8594d6 100644
--- a/host-bmc/host_pdr_handler.cpp
+++ b/host-bmc/host_pdr_handler.cpp
@@ -85,7 +85,7 @@
});
}
-void HostPDRHandler::fetchPDR(std::vector<uint32_t>&& recordHandles)
+void HostPDRHandler::fetchPDR(PDRRecordHandles&& recordHandles)
{
pdrRecordHandles.clear();
pdrRecordHandles = std::move(recordHandles);
@@ -107,7 +107,17 @@
auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
bool merged = false;
- for (auto recordHandle : pdrRecordHandles)
+ uint32_t nextRecordHandle{};
+ uint32_t recordHandle{};
+ bool isFormatRecHandles = false;
+ if (!pdrRecordHandles.empty())
+ {
+ recordHandle = pdrRecordHandles.front();
+ pdrRecordHandles.pop_front();
+ isFormatRecHandles = true;
+ }
+
+ do
{
auto instanceId = requester.getInstanceId(mctp_eid);
@@ -138,7 +148,6 @@
}
uint8_t completionCode{};
- uint32_t nextRecordHandle{};
uint32_t nextDataTransferHandle{};
uint8_t transferFlag{};
uint16_t respCount{};
@@ -194,8 +203,19 @@
pldm_pdr_add(repo, pdr.data(), respCount, 0, true);
}
}
+
+ recordHandle = nextRecordHandle;
+ if (!pdrRecordHandles.empty())
+ {
+ recordHandle = pdrRecordHandles.front();
+ pdrRecordHandles.pop_front();
+ }
+ else if (isFormatRecHandles)
+ {
+ break;
+ }
}
- }
+ } while (recordHandle);
if (merged)
{