nvidia-oem: Implement GetHostInterfaceIPMIChannel
his command is used by BIOS before creating SMBIOS record
type 42. BIOS gets USBDescription information from BMC.
Note:
The implementation in this PR is for
HostInterfaceIPMIChannelNumber.
The support for other device descriptors will be added in
upcoming PRs.
Design Document for RHI:
[1] https://gerrit.openbmc.org/c/openbmc/docs/+/79327
Redfish Host Interface specification:
[2] https://www.dmtf.org/sites/default/files/standards/documents/DSP0270_1.3.0.pdf
Tested:
Tested on gb200nvl-obmc platform:
root@gb200nvl-obmc:~# ipmitool raw 0x3c 0x33
03
Change-Id: Ib2c556e1474ee057a0c28c4fee029e5df95b1419
Signed-off-by: Prithvi Pai <ppai@nvidia.com>
diff --git a/oem/nvidia/bootstrap-credentials-oem-cmds.cpp b/oem/nvidia/bootstrap-credentials-oem-cmds.cpp
index 408cf6c..0a40c65 100644
--- a/oem/nvidia/bootstrap-credentials-oem-cmds.cpp
+++ b/oem/nvidia/bootstrap-credentials-oem-cmds.cpp
@@ -80,6 +80,37 @@
std::vector<uint8_t>(hostName.begin(), hostName.end()));
return ipmi::responseSuccess(hostNamePayload);
}
+
+ipmi::RspType<uint8_t> ipmiGetIpmiChannelRfHi()
+{
+ constexpr auto redfishHostInterfaceChannel = "usb0";
+ uint8_t chNum = ipmi::getChannelByName(redfishHostInterfaceChannel);
+ ChannelInfo chInfo{};
+ Cc compCode = ipmi::getChannelInfo(chNum, chInfo);
+ if (compCode != ipmi::ccSuccess)
+ {
+ lg2::error(
+ "ipmiGetIpmiChannelRfHi failed for channel {CHANNEL} with error {ERROR}",
+ "CHANNEL", chNum, "ERROR", compCode);
+ return ipmi::responseUnspecifiedError();
+ }
+
+ if (chInfo.mediumType !=
+ static_cast<uint8_t>(EChannelMediumType::lan8032) ||
+ chInfo.protocolType !=
+ static_cast<uint8_t>(EChannelProtocolType::ipmbV10) ||
+ chInfo.sessionSupported !=
+ static_cast<uint8_t>(EChannelSessSupported::multi) ||
+ chInfo.isIpmi != true)
+ {
+ lg2::error(
+ "ipmiGetIpmiChannelRfHi: channel {CHANNEL} lacks required config",
+ "CHANNEL", chNum);
+ return responseSensorInvalid();
+ }
+ return ipmi::responseSuccess(static_cast<uint8_t>(chNum));
+}
+
} // namespace ipmi
void registerBootstrapCredentialsOemCommands()
@@ -98,4 +129,9 @@
ipmi::prioOemBase, ipmi::groupNvidia,
ipmi::bootstrap_credentials_oem::cmdGetRedfishHostName,
ipmi::Privilege::Admin, ipmi::ipmiGetRedfishHostName);
+
+ ipmi::registerHandler(
+ ipmi::prioOemBase, ipmi::groupNvidia,
+ ipmi::bootstrap_credentials_oem::cmdGetIpmiChannelRfHi,
+ ipmi::Privilege::Admin, ipmi::ipmiGetIpmiChannelRfHi);
}