summaryrefslogtreecommitdiff
path: root/meta-ibs/meta-cp2-5422/recipes-ibs/ipmi/intel-ipmi-oem/0001-Rikor-smbios-mdrv1-support.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-ibs/meta-cp2-5422/recipes-ibs/ipmi/intel-ipmi-oem/0001-Rikor-smbios-mdrv1-support.patch')
-rw-r--r--meta-ibs/meta-cp2-5422/recipes-ibs/ipmi/intel-ipmi-oem/0001-Rikor-smbios-mdrv1-support.patch222
1 files changed, 222 insertions, 0 deletions
diff --git a/meta-ibs/meta-cp2-5422/recipes-ibs/ipmi/intel-ipmi-oem/0001-Rikor-smbios-mdrv1-support.patch b/meta-ibs/meta-cp2-5422/recipes-ibs/ipmi/intel-ipmi-oem/0001-Rikor-smbios-mdrv1-support.patch
new file mode 100644
index 0000000000..8c6bdb0aa8
--- /dev/null
+++ b/meta-ibs/meta-cp2-5422/recipes-ibs/ipmi/intel-ipmi-oem/0001-Rikor-smbios-mdrv1-support.patch
@@ -0,0 +1,222 @@
+diff --git a/src/smbioshandler.cpp b/src/smbioshandler.cpp
+index e330e5a..632274f 100644
+--- a/src/smbioshandler.cpp
++++ b/src/smbioshandler.cpp
+@@ -26,6 +26,7 @@
+ #include <iostream>
+ #include <string>
+ #include <vector>
++#include <functional>
+
+ using InternalFailure =
+ sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure;
+@@ -43,6 +44,8 @@ ipmi_ret_t cmd_region_status(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
+ ipmi_request_t request, ipmi_response_t response,
+ ipmi_data_len_t data_len, ipmi_context_t context)
+ {
++ std::cout << __PRETTY_FUNCTION__ << std::endl;
++
+ auto requestData = reinterpret_cast<const RegionStatusRequest*>(request);
+ std::vector<uint8_t> status;
+
+@@ -127,7 +130,7 @@ static int set_regionId(uint8_t regionId, std::string& service)
+ return 0;
+ }
+
+-ipmi_ret_t cmd_region_complete(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
++ipmi_ret_t cmd_region_complete_base(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
+ ipmi_request_t request, ipmi_response_t response,
+ ipmi_data_len_t data_len, ipmi_context_t context)
+ {
+@@ -145,6 +148,10 @@ ipmi_ret_t cmd_region_complete(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
+ uint8_t regionId = requestData->regionId - 1;
+ *data_len = 0;
+
++ std::cout << __PRETTY_FUNCTION__
++ << " session: " << static_cast<int>(requestData->sessionId)
++ << " regionId: " << static_cast<int>(requestData->regionId) << std::endl;
++
+ if (regionId >= maxMDRId)
+ {
+ phosphor::logging::log<level::ERR>("Invalid region");
+@@ -170,15 +177,15 @@ ipmi_ret_t cmd_region_complete(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
+ return IPMI_CC_PARAMETER_NOT_SUPPORT_IN_PRESENT_STATE;
+ }
+
+- if (0 > sdplus_mdrv1_get_property("SessionId", value, service))
+- {
+- phosphor::logging::log<level::ERR>("Error getting sessionId");
+- return IPMI_CC_UNSPECIFIED_ERROR;
+- }
+- if (requestData->sessionId != std::get<uint8_t>(value))
+- {
+- return IPMI_CC_OEM_SET_IN_PROCESS;
+- }
++ // if (0 > sdplus_mdrv1_get_property("SessionId", value, service))
++ // {
++ // phosphor::logging::log<level::ERR>("Error getting sessionId");
++ // return IPMI_CC_UNSPECIFIED_ERROR;
++ // }
++ // if (requestData->sessionId != std::get<uint8_t>(value))
++ // {
++ // return IPMI_CC_OEM_SET_IN_PROCESS;
++ // }
+
+ auto method = bus->new_method_call(service.c_str(), MDRV1_PATH,
+ MDRV1_INTERFACE, "RegionComplete");
+@@ -204,10 +211,22 @@ ipmi_ret_t cmd_region_complete(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
+ return IPMI_CC_OK;
+ }
+
++ipmi_ret_t cmd_region_complete(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
++ ipmi_request_t request, ipmi_response_t response,
++ ipmi_data_len_t data_len, ipmi_context_t context)
++{
++ auto retval = cmd_region_complete_base(netfn, cmd, request, response, data_len, context);
++ std::cout << __FUNCTION__ << " retval: " << static_cast<int>(retval) << std::endl;
++ return retval;
++}
++
++
+ ipmi_ret_t cmd_region_read(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
+ ipmi_request_t request, ipmi_response_t response,
+ ipmi_data_len_t data_len, ipmi_context_t context)
+ {
++ std::cout << __PRETTY_FUNCTION__ << std::endl;
++
+ auto requestData = reinterpret_cast<const RegionReadRequest*>(request);
+ auto responseData = reinterpret_cast<RegionReadResponse*>(response);
+ std::variant<uint8_t, uint16_t> regUsedVal;
+@@ -303,6 +322,8 @@ ipmi_ret_t cmd_region_write(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
+ ipmi_request_t request, ipmi_response_t response,
+ ipmi_data_len_t data_len, ipmi_context_t context)
+ {
++ std::cout << __PRETTY_FUNCTION__ << std::endl;
++
+ auto requestData = reinterpret_cast<const RegionWriteRequest*>(request);
+ uint8_t regionId = requestData->regionId - 1;
+ std::string res;
+@@ -336,36 +357,60 @@ ipmi_ret_t cmd_region_write(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
+ return IPMI_CC_UNSPECIFIED_ERROR;
+ }
+
+- if (0 > sdplus_mdrv1_get_property("LockPolicy", value, service))
+- {
+- phosphor::logging::log<level::ERR>("Error getting lockPolicy");
+- return IPMI_CC_UNSPECIFIED_ERROR;
+- }
+- if (regionLockUnlocked == std::get<uint8_t>(value))
+- {
+- return IPMI_CC_PARAMETER_NOT_SUPPORT_IN_PRESENT_STATE;
+- }
+-
+- if (0 > sdplus_mdrv1_get_property("SessionId", value, service))
+- {
+- phosphor::logging::log<level::ERR>("Error getting sessionId");
+- return IPMI_CC_UNSPECIFIED_ERROR;
+- }
+- if (requestData->sessionId != std::get<uint8_t>(value))
+- {
+- return IPMI_CC_OEM_SET_IN_PROCESS;
+- }
+-
+- std::copy(&(requestData->length), &(requestData->data[requestData->length]),
+- tmp);
++ // if (0 > sdplus_mdrv1_get_property("LockPolicy", value, service))
++ // {
++ // phosphor::logging::log<level::ERR>("Error getting lockPolicy");
++ // return IPMI_CC_UNSPECIFIED_ERROR;
++ // }
++ // if (regionLockUnlocked == std::get<uint8_t>(value))
++ // {
++ // std::cout << "shaj: regionLockUnlocked " << regionLockUnlocked << " " << std::get<uint8_t>(value) << std::endl;
++ // return IPMI_CC_PARAMETER_NOT_SUPPORT_IN_PRESENT_STATE;
++ // }
++
++ // if (0 > sdplus_mdrv1_get_property("SessionId", value, service))
++ // {
++ // phosphor::logging::log<level::ERR>("Error getting sessionId");
++ // return IPMI_CC_UNSPECIFIED_ERROR;
++ // }
++ // if (requestData->sessionId != std::get<uint8_t>(value))
++ // {
++ // std::cout << "shaj: requestData->sessionId " << static_cast<int>(requestData->sessionId) << std::endl;
++ // std::cout << "shaj: requestData (value) " << static_cast<int>(std::get<uint8_t>(value)) << std::endl;
++ // return IPMI_CC_OEM_SET_IN_PROCESS;
++ // }
++
++ std::copy(&(requestData->length), &(requestData->data[requestData->length]), tmp);
+ writeData.push_back(regionId);
+ for (index = 0; index < minInputLen + requestData->length - 2; index++)
+ {
+ writeData.push_back(tmp[index]);
+ }
+
+- auto method = bus->new_method_call(service.c_str(), MDRV1_PATH,
+- MDRV1_INTERFACE, "RegionWrite");
++ // [Строка](https://github.com/openbmc/entity-manager/blob/e45d8c71bdbae39f14a638137da9dc03474536c1/include/utils.hpp#L112)
++ // std::hash<std::vector<uint8_t>> h_f;
++ // std::hash<std::string> h_f;
++
++ size_t d_hash = 0;
++ std::for_each(writeData.cbegin()+3, writeData.cend(), [&d_hash](auto c){d_hash ^= std::hash<uint8_t>{}(c);});
++
++ std::cout << "shaj: HOST string hash: " << d_hash << std::endl;
++
++ // std::cout << "shaj: mdrv1 write: " << service.c_str() << " " << MDRV1_PATH << " " << MDRV1_INTERFACE
++ // << " region Id " << static_cast<int>(regionId) << std::endl;
++
++ // std::cout << std::hex;
++ // for(int ii=0; ii<3; ii++)
++ // {
++ // for(int jj=0; jj<16; jj++)
++ // {
++ // std::cout << std::setfill('0') << std::setw(2) << static_cast<int>(tmp[ii*16+jj]) << " ";
++ // }
++ // std::cout << std::endl;
++ // }
++ // std::cout << std::resetiosflags(std::ios_base::basefield);
++
++ auto method = bus->new_method_call(service.c_str(), MDRV1_PATH, MDRV1_INTERFACE, "RegionWrite");
+
+ method.append(writeData);
+
+@@ -394,7 +439,7 @@ ipmi_ret_t cmd_region_write(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
+ return IPMI_CC_OK;
+ }
+
+-ipmi_ret_t cmd_region_lock(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
++ipmi_ret_t cmd_region_lock_base(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
+ ipmi_request_t request, ipmi_response_t response,
+ ipmi_data_len_t data_len, ipmi_context_t context)
+ {
+@@ -404,6 +449,10 @@ ipmi_ret_t cmd_region_lock(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
+ auto res = reinterpret_cast<uint8_t*>(response);
+ uint8_t lockResponse;
+
++ std::cout << __PRETTY_FUNCTION__
++ << " session: " << static_cast<int>(requestData->sessionId)
++ << " regionId: " << static_cast<int>(requestData->regionId) << std::endl;
++
+ if (*data_len != sizeof(RegionLockRequest))
+ {
+ *data_len = 0;
+@@ -476,6 +525,18 @@ ipmi_ret_t cmd_region_lock(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
+ return IPMI_CC_OK;
+ }
+
++
++ipmi_ret_t cmd_region_lock(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
++ ipmi_request_t request, ipmi_response_t response,
++ ipmi_data_len_t data_len, ipmi_context_t context)
++{
++ auto retval = cmd_region_lock_base(netfn, cmd, request, response, data_len, context);
++ std::cout << __FUNCTION__ << " retval: " << static_cast<int>(retval) << std::endl;
++ std::cout << "shaj: sessionId: " << static_cast<int>(*(reinterpret_cast<uint8_t*>(response))) << std::endl;
++ return retval;
++}
++
++
+ static void register_netfn_smbios_functions(void)
+ {
+ #ifdef MDR_V1_SUPPORT