oem:ibm :Implement SetFruRecordTable
The commit implements the setFruRecordTable command
and also updates the DBus property for the IBM cable cards
for which the host sends a setFruRecordTable command.
Tested: using pldmtool
Signed-off-by: Pavithra Barithaya <pavithra.b@ibm.com>
Change-Id: I70e4f85f627577d8ca1bc90447b10e9e2e8e7ccd
diff --git a/pldmd/pldmd.cpp b/pldmd/pldmd.cpp
index f510f75..e2ca648 100644
--- a/pldmd/pldmd.cpp
+++ b/pldmd/pldmd.cpp
@@ -62,6 +62,7 @@
#ifdef OEM_IBM
#include "libpldmresponder/file_io.hpp"
+#include "libpldmresponder/fru_oem_ibm.hpp"
#include "libpldmresponder/oem_ibm_handler.hpp"
#endif
@@ -227,6 +228,8 @@
std::unique_ptr<oem_platform::Handler> oemPlatformHandler{};
std::unique_ptr<platform_config::Handler> platformConfigHandler{};
platformConfigHandler = std::make_unique<platform_config::Handler>();
+ std::unique_ptr<oem_fru::Handler> oemFruHandler{};
+
#ifdef OEM_IBM
std::unique_ptr<pldm::responder::CodeUpdate> codeUpdate =
std::make_unique<pldm::responder::CodeUpdate>(&dbusHandler);
@@ -235,6 +238,7 @@
&dbusHandler, codeUpdate.get(), pldmTransport.getEventSource(), hostEID,
instanceIdDb, event, &reqHandler);
codeUpdate->setOemPlatformHandler(oemPlatformHandler.get());
+ oemFruHandler = std::make_unique<oem_ibm_fru::Handler>(pdrRepo.get());
invoker.registerHandler(PLDM_OEM, std::make_unique<oem_ibm::Handler>(
oemPlatformHandler.get(),
pldmTransport.getEventSource(),
@@ -260,9 +264,11 @@
auto biosHandler = std::make_unique<bios::Handler>(
pldmTransport.getEventSource(), hostEID, &instanceIdDb, &reqHandler,
platformConfigHandler.get());
+
auto fruHandler = std::make_unique<fru::Handler>(
FRU_JSONS_DIR, FRU_MASTER_JSON, pdrRepo.get(), entityTree.get(),
- bmcEntityTree.get());
+ bmcEntityTree.get(), oemFruHandler.get());
+
// FRU table is built lazily when a FRU command or Get PDR command is
// handled. To enable building FRU table, the FRU handler is passed to the
// Platform handler.
@@ -276,6 +282,11 @@
dynamic_cast<pldm::responder::oem_ibm_platform::Handler*>(
oemPlatformHandler.get());
oemIbmPlatformHandler->setPlatformHandler(platformHandler.get());
+
+ pldm::responder::oem_ibm_fru::Handler* oemIbmFruHandler =
+ dynamic_cast<pldm::responder::oem_ibm_fru::Handler*>(
+ oemFruHandler.get());
+ oemIbmFruHandler->setIBMFruHandler(fruHandler.get());
#endif
invoker.registerHandler(PLDM_BIOS, std::move(biosHandler));