oem-ampere: eventManager: Handle `BootProgress` sensor event
Add Ampere OEM code to handle the `sensorEvent` for PLDM `BootProgress`
sensor. In Ampere system, the SOC termini will have the TID 1 or 2. The
Ampere OEM EventManager will check the terminus TID to confirm about the
terminus type. Base on the value of `BootProgress` sensor, the OEM code
will add the Redfish Log to report the boot progress of Ampere SoC.
Tested:
1. Power on the host.
2. Check the Redfish SEL log.
Signed-off-by: Chau Ly <chaul@amperecomputing.com>
Signed-off-by: Thu Nguyen <thu@os.amperecomputing.com>
Change-Id: Icc51537ef17ee8eb4b5b571eafeea7b5d7763cbe
diff --git a/oem/ampere/oem_ampere.hpp b/oem/ampere/oem_ampere.hpp
new file mode 100644
index 0000000..00d8b90
--- /dev/null
+++ b/oem/ampere/oem_ampere.hpp
@@ -0,0 +1,109 @@
+#pragma once
+#include "../../common/utils.hpp"
+#include "../../libpldmresponder/base.hpp"
+#include "../../libpldmresponder/bios.hpp"
+#include "../../libpldmresponder/fru.hpp"
+#include "../../libpldmresponder/platform.hpp"
+#include "../../oem/ampere/event/oem_event_manager.hpp"
+#include "../../platform-mc/manager.hpp"
+#include "../../pldmd/invoker.hpp"
+#include "../../requester/request.hpp"
+
+namespace pldm
+{
+namespace oem_ampere
+{
+
+/**
+ * @class OemAMPERE
+ *
+ * @brief class for creating all the OEM AMPERE handlers
+ *
+ * Only in case of OEM_AMPERE this class object will be instantiated
+ */
+class OemAMPERE
+{
+ public:
+ OemAMPERE() = delete;
+ OemAMPERE& operator=(const OemAMPERE&) = delete;
+ OemAMPERE(OemAMPERE&&) = delete;
+ OemAMPERE& operator=(OemAMPERE&&) = delete;
+
+ public:
+ /** Constructs OemAMPERE object
+ *
+ * @param[in] dBusIntf - D-Bus handler
+ * @param[in] mctp_fd - fd of MCTP communications socket
+ * @param[in] mctp_eid - MCTP EID of remote host firmware
+ * @param[in] repo - pointer to BMC's primary PDR repo
+ * @param[in] instanceIdDb - pointer to an InstanceIdDb object
+ * @param[in] event - sd_event handler
+ * @param[in] invoker - invoker handler
+ * @param[in] hostPDRHandler - hostPDRHandler handler
+ * @param[in] platformHandler - platformHandler handler
+ * @param[in] fruHandler - fruHandler handler
+ * @param[in] baseHandler - baseHandler handler
+ * @param[in] biosHandler - biosHandler handler
+ * @param[in] reqHandler - reqHandler handler
+ */
+ explicit OemAMPERE(
+ const pldm::utils::DBusHandler* /* dBusIntf */, int /* mctp_fd */,
+ pldm_pdr* /* repo */, pldm::InstanceIdDb& instanceIdDb,
+ sdeventplus::Event& event, responder::Invoker& /* invoker */,
+ HostPDRHandler* /* hostPDRHandler */,
+ responder::platform::Handler* platformHandler,
+ responder::fru::Handler* /* fruHandler */,
+ responder::base::Handler* /* baseHandler */,
+ responder::bios::Handler* /* biosHandler */,
+ platform_mc::Manager* /* platformManager */,
+ pldm::requester::Handler<pldm::requester::Request>* reqHandler) :
+ instanceIdDb(instanceIdDb), event(event),
+ platformHandler(platformHandler), reqHandler(reqHandler)
+ {
+ oemEventManager = std::make_shared<oem_ampere::OemEventManager>(
+ this->event, this->reqHandler, this->instanceIdDb);
+ createOemEventHandler(oemEventManager);
+ }
+
+ private:
+ /** @brief Method for creating OemEventManager
+ *
+ * This method also assigns the OemEventManager to the below
+ * different handlers.
+ */
+ void createOemEventHandler(
+ std::shared_ptr<oem_ampere::OemEventManager> oemEventManager)
+ {
+ platformHandler->registerEventHandlers(
+ PLDM_SENSOR_EVENT,
+ {[&oemEventManager](const pldm_msg* request, size_t payloadLength,
+ uint8_t formatVersion, uint8_t tid,
+ size_t eventDataOffset) {
+ return oemEventManager->handleSensorEvent(
+ request, payloadLength, formatVersion, tid,
+ eventDataOffset);
+ }});
+ }
+
+ private:
+ /** @brief reference to an Instance ID database object, used to obtain PLDM
+ * instance IDs
+ */
+ pldm::InstanceIdDb& instanceIdDb;
+
+ /** @brief reference of main event loop of pldmd, primarily used to schedule
+ * work
+ */
+ sdeventplus::Event& event;
+
+ /** @brief Platform handler*/
+ responder::platform::Handler* platformHandler = nullptr;
+
+ /** @brief pointer to the requester class*/
+ requester::Handler<requester::Request>* reqHandler = nullptr;
+
+ std::shared_ptr<oem_ampere::OemEventManager> oemEventManager{};
+};
+
+} // namespace oem_ampere
+} // namespace pldm