summaryrefslogtreecommitdiffstats
path: root/user_channel/channelcommands.cpp
diff options
context:
space:
mode:
authorAyushi Smriti <smriti.ayushi@intel.com>2019-04-12 18:51:31 +0000
committerVernon Mauery <vernon.mauery@linux.intel.com>2019-06-14 16:59:29 +0000
commit6fd812d17402f1c8db242ea8b454fe896711ba71 (patch)
treed5ed665cddebe2d9842cdce5142d274cd799c78b /user_channel/channelcommands.cpp
parentf6092898e6058af10e2a1545ac5bf35a62b3ec90 (diff)
downloadphosphor-host-ipmid-6fd812d17402f1c8db242ea8b454fe896711ba71.tar.gz
phosphor-host-ipmid-6fd812d17402f1c8db242ea8b454fe896711ba71.zip
Add get channel payload version command
Implement get channel payload version command (IPMI specification section 24.9). As per the specification, this command is basically a hard-coded value that says we are using IPMI 2.0. Tested: ipmitool raw 6 0x4F 3 1 // Command 10 // Response Change-Id: Id16723e7257361814b98f3c14d759f2919ad4c03 Signed-off-by: Ayushi Smriti <smriti.ayushi@intel.com> Signed-off-by: Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com> Signed-off-by: Vernon Mauery <vernon.mauery@linux.intel.com>
Diffstat (limited to 'user_channel/channelcommands.cpp')
-rw-r--r--user_channel/channelcommands.cpp40
1 files changed, 40 insertions, 0 deletions
diff --git a/user_channel/channelcommands.cpp b/user_channel/channelcommands.cpp
index 2e1b196..9d3b4d2 100644
--- a/user_channel/channelcommands.cpp
+++ b/user_channel/channelcommands.cpp
@@ -344,6 +344,43 @@ RspType<uint16_t, // stdPayloadType
rspRsvd);
}
+/** @brief implements the get channel payload version command
+ * @param ctx - IPMI context pointer (for channel)
+ * @param chNum - channel number to get info about
+ * @param reserved - skip 4 bits
+ * @param payloadTypeNum - to get payload type info
+
+ * @returns IPMI completion code plus response data
+ * - formatVersion - BCD encoded format version info
+ */
+
+RspType<uint8_t> // formatVersion
+ ipmiGetChannelPayloadVersion(Context::ptr ctx, uint4_t chNum,
+ uint4_t reserved, uint8_t payloadTypeNum)
+{
+ uint8_t channel =
+ convertCurrentChannelNum(static_cast<uint8_t>(chNum), ctx->channel);
+
+ if (reserved || !isValidChannel(channel) ||
+ (getChannelSessionSupport(channel)) == EChannelSessSupported::none)
+ {
+ return responseInvalidFieldRequest();
+ }
+
+ if (!isValidPayloadType(static_cast<PayloadType>(payloadTypeNum)))
+ {
+ log<level::ERR>("Channel payload version - Payload type unavailable");
+
+ constexpr uint8_t payloadTypeNotSupported = 0x80;
+ return response(payloadTypeNotSupported);
+ }
+
+ // BCD encoded version representation - 1.0
+ constexpr uint8_t formatVersion = 0x10;
+
+ return responseSuccess(formatVersion);
+}
+
void registerChannelFunctions() __attribute__((constructor));
void registerChannelFunctions()
{
@@ -360,6 +397,9 @@ void registerChannelFunctions()
registerHandler(prioOpenBmcBase, netFnApp, app::cmdGetChannelPayloadSupport,
Privilege::User, ipmiGetChannelPayloadSupport);
+
+ registerHandler(prioOpenBmcBase, netFnApp, app::cmdGetChannelPayloadVersion,
+ Privilege::User, ipmiGetChannelPayloadVersion);
}
} // namespace ipmi
OpenPOWER on IntegriCloud