host-bmc: Implement Board interface
Adding support to host Board dbus interface. Based on the PDRs received
from remote PLDM terminus, PLDM hosts the dbus interface based on the
entity type. The Board interface is defined at [1].
Tested:
Functional test passed
[1]: https://github.com/openbmc/phosphor-dbus-interfaces/blob/master/yaml/xyz/openbmc_project/Inventory/Item/Board.interface.yaml
Change-Id: I672abd2972eb18a4b1a81155811a544927884627
Signed-off-by: Archana Kakani <archana.kakani@ibm.com>
diff --git a/host-bmc/dbus/board.hpp b/host-bmc/dbus/board.hpp
new file mode 100644
index 0000000..a9cfde5
--- /dev/null
+++ b/host-bmc/dbus/board.hpp
@@ -0,0 +1,36 @@
+#pragma once
+
+#include <sdbusplus/bus.hpp>
+#include <sdbusplus/server.hpp>
+#include <sdbusplus/server/object.hpp>
+#include <xyz/openbmc_project/Inventory/Item/Board/server.hpp>
+
+#include <string>
+
+namespace pldm
+{
+namespace dbus
+{
+using ItemBoard = sdbusplus::server::object_t<
+ sdbusplus::xyz::openbmc_project::Inventory::Item::server::Board>;
+
+class Board : public ItemBoard
+{
+ public:
+ Board() = delete;
+ ~Board() = default;
+ Board(const Board&) = delete;
+ Board& operator=(const Board&) = delete;
+ Board(Board&&) = delete;
+ Board& operator=(Board&&) = delete;
+
+ Board(sdbusplus::bus_t& bus, const std::string& objPath) :
+ ItemBoard(bus, objPath.c_str()), path(objPath)
+ {}
+
+ private:
+ std::string path;
+};
+
+} // namespace dbus
+} // namespace pldm
diff --git a/host-bmc/dbus/custom_dbus.cpp b/host-bmc/dbus/custom_dbus.cpp
index 42acc59..1108b4a 100644
--- a/host-bmc/dbus/custom_dbus.cpp
+++ b/host-bmc/dbus/custom_dbus.cpp
@@ -137,6 +137,16 @@
}
}
+void CustomDBus::implementBoard(const std::string& path)
+{
+ if (!board.contains(path))
+ {
+ board.emplace(path,
+ std::make_unique<Board>(
+ pldm::utils::DBusHandler::getBus(), path.c_str()));
+ }
+}
+
void CustomDBus::implementPowerSupplyInterface(const std::string& path)
{
if (!powersupply.contains(path))
diff --git a/host-bmc/dbus/custom_dbus.hpp b/host-bmc/dbus/custom_dbus.hpp
index d8d9375..e83c955 100644
--- a/host-bmc/dbus/custom_dbus.hpp
+++ b/host-bmc/dbus/custom_dbus.hpp
@@ -2,6 +2,7 @@
#include "asset.hpp"
#include "availability.hpp"
+#include "board.hpp"
#include "cable.hpp"
#include "chassis.hpp"
#include "common/utils.hpp"
@@ -178,6 +179,13 @@
*/
void implementFabricAdapter(const std::string& path);
+ /** @brief Implement Board Interface
+ *
+ * @param[in] path - The object path
+ *
+ */
+ void implementBoard(const std::string& path);
+
/** @brief Implement Asset Interface
*
* @param[in] path - The object path
@@ -225,6 +233,7 @@
std::unordered_map<ObjectPath, std::unique_ptr<PCIeDevice>> pcieDevice;
std::unordered_map<ObjectPath, std::unique_ptr<PCIeSlot>> pcieSlot;
std::unordered_map<ObjectPath, std::unique_ptr<PowerSupply>> powersupply;
+ std::unordered_map<ObjectPath, std::unique_ptr<Board>> board;
std::unordered_map<ObjectPath, std::unique_ptr<FabricAdapter>>
fabricAdapter;
std::unordered_map<ObjectPath, std::unique_ptr<Cable>> cable;
diff --git a/host-bmc/host_pdr_handler.cpp b/host-bmc/host_pdr_handler.cpp
index f29591e..8da01a7 100644
--- a/host-bmc/host_pdr_handler.cpp
+++ b/host-bmc/host_pdr_handler.cpp
@@ -1186,6 +1186,9 @@
CustomDBus::getCustomDBus().implementConnecterInterface(
entity.first);
break;
+ case PLDM_ENTITY_BOARD:
+ CustomDBus::getCustomDBus().implementBoard(entity.first);
+ break;
case PLDM_ENTITY_CARD:
CustomDBus::getCustomDBus().implementPCIeDeviceInterface(
entity.first);