diff --git a/command/sol_cmds.cpp b/command/sol_cmds.cpp
index c06e310..8203a6e 100644
--- a/command/sol_cmds.cpp
+++ b/command/sol_cmds.cpp
@@ -68,96 +68,6 @@
     msgHandler.sendUnsolicitedIPMIPayload(netfnTransport, solActivatingCmd,
                                           outPayload);
 }
-
-std::vector<uint8_t> getConfParams(const std::vector<uint8_t>& inPayload,
-                                   std::shared_ptr<message::Handler>& handler)
-{
-    std::vector<uint8_t> outPayload(sizeof(GetConfParamsResponse));
-    auto request =
-        reinterpret_cast<const GetConfParamsRequest*>(inPayload.data());
-    auto response = reinterpret_cast<GetConfParamsResponse*>(outPayload.data());
-    response->completionCode = IPMI_CC_OK;
-    response->paramRev = parameterRevision;
-
-    // Update latest property values from dbus to sol mananger
-    sol::Manager::get().updateSOLParameter(ipmi::convertCurrentChannelNum(
-        ipmi::currentChNum, getInterfaceIndex()));
-    if (request->getParamRev)
-    {
-        return outPayload;
-    }
-
-    switch (static_cast<Parameter>(request->paramSelector))
-    {
-        case Parameter::PROGRESS:
-        {
-            outPayload.push_back(sol::Manager::get().progress);
-            break;
-        }
-        case Parameter::ENABLE:
-        {
-            outPayload.push_back(sol::Manager::get().enable);
-            break;
-        }
-        case Parameter::AUTHENTICATION:
-        {
-            Auth value{0};
-
-            value.encrypt = sol::Manager::get().forceEncrypt;
-            value.auth = sol::Manager::get().forceAuth;
-            value.privilege =
-                static_cast<uint8_t>(sol::Manager::get().solMinPrivilege);
-            auto buffer = reinterpret_cast<const uint8_t*>(&value);
-
-            std::copy_n(buffer, sizeof(value), std::back_inserter(outPayload));
-            break;
-        }
-        case Parameter::ACCUMULATE:
-        {
-            Accumulate value{0};
-
-            value.interval = sol::Manager::get().accumulateInterval.count() /
-                             sol::accIntervalFactor;
-            value.threshold = sol::Manager::get().sendThreshold;
-            auto buffer = reinterpret_cast<const uint8_t*>(&value);
-
-            std::copy_n(buffer, sizeof(value), std::back_inserter(outPayload));
-            break;
-        }
-        case Parameter::RETRY:
-        {
-            Retry value{0};
-
-            value.count = sol::Manager::get().retryCount;
-            value.interval = sol::Manager::get().retryInterval.count() /
-                             sol::retryIntervalFactor;
-            auto buffer = reinterpret_cast<const uint8_t*>(&value);
-
-            std::copy_n(buffer, sizeof(value), std::back_inserter(outPayload));
-            break;
-        }
-        case Parameter::PORT:
-        {
-            auto port = endian::to_ipmi<uint16_t>(IPMI_STD_PORT);
-            auto buffer = reinterpret_cast<const uint8_t*>(&port);
-
-            std::copy_n(buffer, sizeof(port), std::back_inserter(outPayload));
-            break;
-        }
-        case Parameter::CHANNEL:
-        {
-            outPayload.push_back(sol::Manager::get().channel);
-            break;
-        }
-        case Parameter::NVBITRATE:
-        case Parameter::VBITRATE:
-        default:
-            response->completionCode = ipmiCCParamNotSupported;
-    }
-
-    return outPayload;
-}
-
 } // namespace command
 
 } // namespace sol
diff --git a/command/sol_cmds.hpp b/command/sol_cmds.hpp
index 3e05e0f..9aedfdd 100644
--- a/command/sol_cmds.hpp
+++ b/command/sol_cmds.hpp
@@ -62,174 +62,6 @@
  */
 void activating(uint8_t payloadInstance, uint32_t sessionID);
 
-/** @enum Parameter
- *
- *  SOL parameters are volatile, they are initialized by the SOL manager.
- *  They can be read using Get SOL configuration parameters command and updated
- *  using Set SOL configuration parameters command.
- */
-enum class Parameter
-{
-    PROGRESS,       //!< Set In Progress.
-    ENABLE,         //!< SOL Enable.
-    AUTHENTICATION, //!< SOL Authentication.
-    ACCUMULATE,     //!< Character Accumulate Interval & Send Threshold.
-    RETRY,          //!< SOL Retry.
-    NVBITRATE,      //!< SOL non-volatile bit rate.
-    VBITRATE,       //!< SOL volatile bit rate.
-    CHANNEL,        //!< SOL payload channel.
-    PORT,           //!< SOL payload port.
-};
-
-constexpr uint8_t progressMask = 0x03;
-constexpr uint8_t enableMask = 0x01;
-
-/** @struct Auth
- *
- *  SOL authentication parameter.
- */
-struct Auth
-{
-#if BYTE_ORDER == LITTLE_ENDIAN
-    uint8_t privilege : 4; //!< SOL privilege level.
-    uint8_t reserved : 2;  //!< Reserved.
-    uint8_t auth : 1;      //!< Force SOL payload Authentication.
-    uint8_t encrypt : 1;   //!< Force SOL payload encryption.
-#endif
-
-#if BYTE_ORDER == BIG_ENDIAN
-    uint8_t encrypt : 1;   //!< Force SOL payload encryption.
-    uint8_t auth : 1;      //!< Force SOL payload Authentication.
-    uint8_t reserved : 2;  //!< Reserved.
-    uint8_t privilege : 4; //!< SOL privilege level.
-#endif
-} __attribute__((packed));
-
-/** @struct Accumulate
- *
- *  Character accumulate interval & Character send threshold.
- */
-struct Accumulate
-{
-    uint8_t interval;  //!< Character accumulate interval.
-    uint8_t threshold; //!< Character send threshold.
-} __attribute__((packed));
-
-constexpr uint8_t retryCountMask = 0x07;
-
-/** @struct Retry
- *
- *  SOL retry count and interval.
- */
-struct Retry
-{
-#if BYTE_ORDER == LITTLE_ENDIAN
-    uint8_t count : 3;    //!< SOL retry count.
-    uint8_t reserved : 5; //!< Reserved.
-#endif
-
-#if BYTE_ORDER == BIG_ENDIAN
-    uint8_t reserved : 5; //!< Reserved.
-    uint8_t count : 3;    //!< SOL retry count.
-#endif
-
-    uint8_t interval; //!< SOL retry interval.
-} __attribute__((packed));
-
-constexpr uint8_t ipmiCCParamNotSupported = 0x80;
-constexpr uint8_t ipmiCCInvalidSetInProgress = 0x81;
-constexpr uint8_t ipmiCCWriteReadParameter = 0x82;
-constexpr uint8_t ipmiCCReadWriteParameter = 0x83;
-constexpr uint8_t parameterRevision = 0x11;
-
-/** @struct SetConfParamsRequest
- *
- *  IPMI payload for Set SOL configuration parameters command request.
- */
-struct SetConfParamsRequest
-{
-#if BYTE_ORDER == LITTLE_ENDIAN
-    uint8_t channelNumber : 4; //!< Channel number.
-    uint8_t reserved : 4;      //!< Reserved.
-#endif
-
-#if BYTE_ORDER == BIG_ENDIAN
-    uint8_t reserved : 4;      //!< Reserved.
-    uint8_t channelNumber : 4; //!< Channel number.
-#endif
-
-    uint8_t paramSelector; //!< Parameter selector.
-    union
-    {
-        uint8_t value;         //!< Represents one byte SOL parameters.
-        struct Accumulate acc; //!< Character accumulate values.
-        struct Retry retry;    //!< Retry values.
-        struct Auth auth;      //!< Authentication parameters.
-    };
-} __attribute__((packed));
-
-/** @struct SetConfParamsResponse
- *
- *  IPMI payload for Set SOL configuration parameters command response.
- */
-struct SetConfParamsResponse
-{
-    uint8_t completionCode; //!< Completion code.
-} __attribute__((packed));
-
-/** @brief Set SOL configuration parameters command.
- *
- *  @param[in] inPayload - Request data for the command.
- *  @param[in] handler - Reference to the message handler.
- *
- *  @return Response data for the command.
- */
-std::vector<uint8_t> setConfParams(const std::vector<uint8_t>& inPayload,
-                                   std::shared_ptr<message::Handler>& handler);
-
-/** @struct GetConfParamsRequest
- *
- *  IPMI payload for Get SOL configuration parameters command request.
- */
-struct GetConfParamsRequest
-{
-#if BYTE_ORDER == LITTLE_ENDIAN
-    uint8_t channelNum : 4;  //!< Channel number.
-    uint8_t reserved : 3;    //!< Reserved.
-    uint8_t getParamRev : 1; //!< Get parameter or Get parameter revision
-#endif
-
-#if BYTE_ORDER == BIG_ENDIAN
-    uint8_t getParamRev : 1; //!< Get parameter or Get parameter revision
-    uint8_t reserved : 3;    //!< Reserved.
-    uint8_t channelNum : 4;  //!< Channel number.
-#endif
-
-    uint8_t paramSelector; //!< Parameter selector.
-    uint8_t setSelector;   //!< Set selector.
-    uint8_t blockSelector; //!< Block selector.
-} __attribute__((packed));
-
-/** @struct GetConfParamsResponse
- *
- *  IPMI payload for Get SOL configuration parameters command response.
- */
-struct GetConfParamsResponse
-{
-    uint8_t completionCode; //!< Completion code.
-    uint8_t paramRev;       //!< Parameter revision.
-} __attribute__((packed));
-
-/** @brief Get SOL configuration parameters command.
- *
- *  @param[in] inPayload - Request data for the command.
- *  @param[in] handler - Reference to the message handler.
- *
- *  @return Response data for the command.
- */
-std::vector<uint8_t> getConfParams(const std::vector<uint8_t>& inPayload,
-                                   std::shared_ptr<message::Handler>& handler);
-
 } // namespace command
 
 } // namespace sol
diff --git a/sol_module.cpp b/sol_module.cpp
index d9a9a7c..21196d8 100644
--- a/sol_module.cpp
+++ b/sol_module.cpp
@@ -41,12 +41,6 @@
          &getPayloadInfo,
          session::Privilege::USER,
          false},
-        // Get SOL Configuration Parameters
-        {{(static_cast<uint32_t>(message::PayloadType::IPMI) << 16) |
-          static_cast<uint16_t>(::command::NetFns::TRANSPORT) | 0x22},
-         &getConfParams,
-         session::Privilege::USER,
-         false},
     };
 
     for (const auto& iter : commands)
