diff options
author | Ayushi Smriti <smriti.ayushi@intel.com> | 2019-04-12 18:51:31 +0000 |
---|---|---|
committer | Vernon Mauery <vernon.mauery@linux.intel.com> | 2019-06-14 16:59:29 +0000 |
commit | 6fd812d17402f1c8db242ea8b454fe896711ba71 (patch) | |
tree | d5ed665cddebe2d9842cdce5142d274cd799c78b /user_channel/channelcommands.cpp | |
parent | f6092898e6058af10e2a1545ac5bf35a62b3ec90 (diff) | |
download | phosphor-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.cpp | 40 |
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 |