pldmd: Remove hard coded effecter id
This commit removes the hard coded effecter id from the
dbus_to_host_effecter.json for Phyp to boot from standby
to runtime. The effecter id will be fetched from Host PDR
instead.
Change-Id: I1829c99557a0f1b89d88c58b3ddef6d7d58ed2f6
Signed-off-by: Sampa Misra <sampmisr@in.ibm.com>
diff --git a/common/utils.cpp b/common/utils.cpp
index 1dac2e5..74fcd06 100644
--- a/common/utils.cpp
+++ b/common/utils.cpp
@@ -395,7 +395,7 @@
uint16_t findStateEffecterId(const pldm_pdr* pdrRepo, uint16_t entityType,
uint16_t entityInstance, uint16_t containerId,
- uint16_t stateSetId)
+ uint16_t stateSetId, bool localOrRemote)
{
uint8_t* pdrData = nullptr;
uint32_t pdrSize{};
@@ -404,7 +404,7 @@
{
record = pldm_pdr_find_record_by_type(pdrRepo, PLDM_STATE_EFFECTER_PDR,
record, &pdrData, &pdrSize);
- if (record)
+ if (record && (localOrRemote ^ pldm_pdr_record_is_remote(record)))
{
auto pdr = reinterpret_cast<pldm_state_effecter_pdr*>(pdrData);
auto compositeEffecterCount = pdr->composite_effecter_count;
diff --git a/common/utils.hpp b/common/utils.hpp
index 8c5c4f5..4e702d8 100644
--- a/common/utils.hpp
+++ b/common/utils.hpp
@@ -294,12 +294,14 @@
* @param[in] entityInstance - entity instance number
* @param[in] containerId - container id
* @param[in] stateSetId - state set id
+ * @param[in] localOrRemote - true for checking local repo and false for remote
+ * repo
*
* @return uint16_t - the effecter id
*/
uint16_t findStateEffecterId(const pldm_pdr* pdrRepo, uint16_t entityType,
uint16_t entityInstance, uint16_t containerId,
- uint16_t stateSetId);
+ uint16_t stateSetId, bool localOrRemote);
/** @brief Emit the sensor event signal
*
diff --git a/configurations/host/dbus_to_host_effecter.json b/configurations/host/dbus_to_host_effecter.json
index dd95b17..b6c2c6b 100644
--- a/configurations/host/dbus_to_host_effecter.json
+++ b/configurations/host/dbus_to_host_effecter.json
@@ -3,7 +3,6 @@
{
"mctp_eid": 9,
"effecter_info": {
- "effecterID": 4,
"containerID": 0,
"entityType": 33,
"entityInstance": 0,
diff --git a/host-bmc/dbus_to_host_effecters.cpp b/host-bmc/dbus_to_host_effecters.cpp
index b2fc092..c59b62a 100644
--- a/host-bmc/dbus_to_host_effecters.cpp
+++ b/host-bmc/dbus_to_host_effecters.cpp
@@ -135,13 +135,15 @@
if (effecterId == PLDM_INVALID_EFFECTER_ID)
{
+ constexpr auto localOrRemote = false;
effecterId = findStateEffecterId(
pdrRepo, hostEffecterInfo[effecterInfoIndex].entityType,
hostEffecterInfo[effecterInfoIndex].entityInstance,
hostEffecterInfo[effecterInfoIndex].containerId,
hostEffecterInfo[effecterInfoIndex]
.dbusInfo[dbusInfoIndex]
- .state.stateSetId);
+ .state.stateSetId,
+ localOrRemote);
if (effecterId == PLDM_INVALID_EFFECTER_ID)
{
std::cerr << "Effecter id not found in pdr repo \n";
diff --git a/test/libpldmresponder_pdr_effecter_test.cpp b/test/libpldmresponder_pdr_effecter_test.cpp
index 60181d6..a2a7288 100644
--- a/test/libpldmresponder_pdr_effecter_test.cpp
+++ b/test/libpldmresponder_pdr_effecter_test.cpp
@@ -200,11 +200,11 @@
uint16_t containerId = 0;
uint16_t stateSetId = 196;
auto effecterId = findStateEffecterId(inPDRRepo, entityType, entityInstance,
- containerId, stateSetId);
+ containerId, stateSetId, true);
ASSERT_EQ(effecterId, 1);
stateSetId = 300;
effecterId = findStateEffecterId(inPDRRepo, entityType, entityInstance,
- containerId, stateSetId);
+ containerId, stateSetId, true);
ASSERT_EQ(effecterId, PLDM_INVALID_EFFECTER_ID);
pldm_pdr_destroy(inPDRRepo);
}