platform-mc: discovery FRU data from terminus
As [1], `pldmd` will host Fru D-Bus inventory object path and Fru
`xyz.openbmc_project.Inventory.Decorator.*` D-Bus interfaces of one PLDM
terminus.
[1] https://github.com/openbmc/docs/blob/master/designs/pldm-stack.md#processing-pldm-fru-information-sent-down-by-the-host-firmware
Support getting FRU data from terminus in the terminus discovery phase
and expose FRU data to the Fru D-Bus properties in
`xyz.openbmc_project.Inventory.Decorator.Asset`,
`xyz.openbmc_project.Inventory.Decorator.AssetTag`,
`xyz.openbmc_project.Inventory.Decorator.Compatible` and
`xyz.openbmc_project.Inventory.Decorator.Revision` interfaces of
`xyz/openbmc_project/FruPldm/<Terminus_Name>` D-Bus object path which is
created by `xyz.openbmc_project.PLDM` D-Bus service. The object path
will be available until the endpoint EID is removed from the MCTP
D-Bus.
```
busctl introspect xyz.openbmc_project.PLDM /xyz/openbmc_project/inventory/system/board/S0
NAME TYPE SIGNATURE RESULT/VALUE FLAGS
org.freedesktop.DBus.Introspectable interface - - -
.Introspect method - s -
org.freedesktop.DBus.Peer interface - - -
.GetMachineId method - s -
.Ping method - - -
org.freedesktop.DBus.Properties interface - - -
.Get method ss v -
.GetAll method s a{sv} -
.Set method ssv - -
.PropertiesChanged signal sa{sv}as - -
xyz.openbmc_project.Inventory.Decorator.Asset interface - - -
.BuildDate property s "" emits-change writable
.Manufacturer property s "" emits-change writable
.Model property s "00014003" emits-change writable
.PartNumber property s "" emits-change writable
.SerialNumber property s "000000218" emits-change writable
.SparePartNumber property s "" emits-change writable
.SubModel property s "" emits-change writable
xyz.openbmc_project.Inventory.Decorator.AssetTag interface - - -
.AssetTag property s "" emits-change writable
xyz.openbmc_project.Inventory.Decorator.Compatible interface - - -
.Names property as 0 emits-change writable
xyz.openbmc_project.Inventory.Decorator.Revision interface - - -
.Version property s "x.x.00008.004" emits-change writable
xyz.openbmc_project.Inventory.Item.Board interface - - -
```
Signed-off-by: Dung Cao <dung@os.amperecomputing.com>
Signed-off-by: Thu Nguyen <thu@os.amperecomputing.com>
Change-Id: I4f8869f8fee0fc0f8a5a5670d9a42fc7f48cc798
diff --git a/platform-mc/dbus_impl_fru.hpp b/platform-mc/dbus_impl_fru.hpp
new file mode 100644
index 0000000..0eba375
--- /dev/null
+++ b/platform-mc/dbus_impl_fru.hpp
@@ -0,0 +1,96 @@
+#pragma once
+
+#include "xyz/openbmc_project/Inventory/Decorator/Asset/server.hpp"
+#include "xyz/openbmc_project/Inventory/Decorator/AssetTag/server.hpp"
+#include "xyz/openbmc_project/Inventory/Decorator/Compatible/server.hpp"
+#include "xyz/openbmc_project/Inventory/Decorator/Revision/server.hpp"
+#include "xyz/openbmc_project/Inventory/Item/Board/server.hpp"
+
+#include <sdbusplus/bus.hpp>
+#include <sdbusplus/server/object.hpp>
+
+#include <map>
+
+namespace pldm
+{
+namespace dbus_api
+{
+
+using assetserver =
+ sdbusplus::xyz::openbmc_project::Inventory::Decorator::server::Asset;
+using assettagserver =
+ sdbusplus::xyz::openbmc_project::Inventory::Decorator::server::AssetTag;
+using revisionserver =
+ sdbusplus::xyz::openbmc_project::Inventory::Decorator::server::Revision;
+using compatibleserver =
+ sdbusplus::xyz::openbmc_project::Inventory::Decorator::server::Compatible;
+using boardserver =
+ sdbusplus::xyz::openbmc_project::Inventory::Item::server::Board;
+
+using AssetIntf = sdbusplus::server::object::object<assetserver>;
+using AssetTagIntf = sdbusplus::server::object::object<assettagserver>;
+using RevisionIntf = sdbusplus::server::object::object<revisionserver>;
+using CompatibleIntf = sdbusplus::server::object::object<compatibleserver>;
+using BoardIntf = sdbusplus::server::object::object<boardserver>;
+
+/** @class PldmEntityRequester
+ * @brief OpenBMC PLDM Inventory entity implementation.
+ * @details A concrete implementation for the PLDM Inventory entity DBus APIs.
+ */
+class PldmEntityReq :
+ public AssetIntf,
+ public AssetTagIntf,
+ public RevisionIntf,
+ public CompatibleIntf,
+ public BoardIntf
+{
+ public:
+ PldmEntityReq() = delete;
+ PldmEntityReq(const PldmEntityReq&) = delete;
+ PldmEntityReq& operator=(const PldmEntityReq&) = delete;
+ PldmEntityReq(PldmEntityReq&&) = delete;
+ PldmEntityReq& operator=(PldmEntityReq&&) = delete;
+ virtual ~PldmEntityReq() = default;
+
+ /** @brief Constructor to put object onto bus at a dbus path.
+ * @param[in] bus - Bus to attach to.
+ * @param[in] path - Path to attach at.
+ */
+ PldmEntityReq(sdbusplus::bus_t& bus, const std::string& path) :
+ AssetIntf(bus, path.c_str()), AssetTagIntf(bus, path.c_str()),
+ RevisionIntf(bus, path.c_str()), CompatibleIntf(bus, path.c_str()),
+ BoardIntf(bus, path.c_str()) {};
+
+ /** @brief Set value of partNumber in Decorator.Asset */
+ std::string partNumber(std::string value);
+
+ /** @brief Set value of serialNumber in Decorator.Asset */
+ std::string serialNumber(std::string value);
+
+ /** @brief Set value of manufacturer in Decorator.Asset */
+ std::string manufacturer(std::string value);
+
+ /** @brief Set value of buildDate in Decorator.Asset */
+ std::string buildDate(std::string value);
+
+ /** @brief Set value of model in Decorator.Asset */
+ std::string model(std::string value);
+
+ /** @brief Set value of subModel in Decorator.Asset */
+ std::string subModel(std::string value);
+
+ /** @brief Set value of sparePartNumber in Decorator.Asset */
+ std::string sparePartNumber(std::string value);
+
+ /** @brief Set value of assetTag in Decorator.AssetTag */
+ std::string assetTag(std::string value);
+
+ /** @brief Set value of version in Decorator.Revision */
+ std::string version(std::string value);
+
+ /** @brief Set value of names in in Decorator.Compatible */
+ std::vector<std::string> names(std::vector<std::string> values);
+};
+
+} // namespace dbus_api
+} // namespace pldm