diff --git a/src/asset_info.cpp b/src/asset_info.cpp
index 78a7c85..af03fce 100644
--- a/src/asset_info.cpp
+++ b/src/asset_info.cpp
@@ -201,7 +201,7 @@
 
 void registerOEMFunctions(void)
 {
-    ipmi_register_callback(netFnIei, iei::cmdSetAssetInfo, nullptr,
+    ipmi_register_callback(netFnIEI, iei::cmdSetAssetInfo, nullptr,
                            ipmiOemIEIAssetInfo, SYSTEM_INTERFACE);
 }
 
diff --git a/src/firmware_version.cpp b/src/firmware_version.cpp
new file mode 100644
index 0000000..fced513
--- /dev/null
+++ b/src/firmware_version.cpp
@@ -0,0 +1,95 @@
+#include "types.hpp"
+#include "utils.hpp"
+
+#include <ipmid/api.hpp>
+
+#include <regex>
+
+namespace ipmi
+{
+namespace iei
+{
+namespace firmware_version
+{
+
+void registerIEIFirmwareVersionFunctions() __attribute__((constructor));
+
+static constexpr auto versionInterface = "xyz.openbmc_project.Software.Version";
+
+std::string getBMCVersionValue(ipmi::Context::ptr ctx,
+                               const std::string& objPath,
+                               const std::string& interface)
+{
+    std::string value{};
+    auto cc = iei::getDbusProperty(ctx, objPath, interface, "Version", value);
+    if (cc)
+    {
+        return "";
+    }
+
+    const std::regex patternId("v[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}");
+    std::smatch result;
+    if (!std::regex_search(value, result, patternId))
+    {
+        return "";
+    }
+    std::string versionStr = result[0];
+    return versionStr.substr(1);
+}
+
+std::string getFWVersionValue(ipmi::Context::ptr ctx,
+                              const std::string& objPath,
+                              const std::string& interface)
+{
+    std::string value{};
+    auto cc = iei::getDbusProperty(ctx, objPath, interface, "Version", value);
+    if (cc)
+    {
+        return "";
+    }
+    return value;
+}
+
+enum FirmwareType : uint8_t
+{
+    BMC = 0x01,
+    BIOS = 0x03,
+};
+
+RspType<std::string> ipmiIEIGetFWVersion(ipmi::Context::ptr ctx,
+                                         uint8_t fwIndex,
+                                         uint8_t /* devIndex */)
+{
+    std::string fwPath{};
+    std::string value{};
+
+    switch (fwIndex)
+    {
+        case BMC:
+        {
+            fwPath = "/xyz/openbmc_project/software/bmc_active";
+            value = getBMCVersionValue(ctx, fwPath, versionInterface);
+            break;
+        }
+        case BIOS:
+        {
+            fwPath = "/xyz/openbmc_project/software/bios_active";
+            value = getFWVersionValue(ctx, fwPath, versionInterface);
+            break;
+        }
+        default:
+            return ipmi::responseParmOutOfRange();
+    }
+
+    return ipmi::responseSuccess(value);
+}
+
+void registerIEIFirmwareVersionFunctions()
+{
+    ipmi::registerHandler(prioOemBase, netFnIEI, cmdGetFWVersion,
+                          ipmi::Privilege::User, ipmiIEIGetFWVersion);
+}
+
+} // namespace firmware_version
+} // namespace iei
+} // namespace ipmi
diff --git a/src/meson.build b/src/meson.build
index 65ecd02..260c160 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -8,6 +8,7 @@
 
 sources = [
   'asset_info.cpp',
+  'firmware_version.cpp',
   'utils.cpp',
 ]
 
diff --git a/src/types.hpp b/src/types.hpp
index 2054d06..0fc6f72 100644
--- a/src/types.hpp
+++ b/src/types.hpp
@@ -4,14 +4,14 @@
 namespace ipmi
 {
 
-constexpr ipmi::NetFn netFnIei = 0x3C;
+constexpr ipmi::NetFn netFnIEI = 0x3C;
 constexpr ipmi::NetFn netFnIntelMe = 0x30;
 
 namespace iei
 {
 
 constexpr ipmi::Cmd cmdSetAssetInfo = 0x01;
-constexpr ipmi::Cmd cmdGetBMCFWInfo = 0x37;
+constexpr ipmi::Cmd cmdGetFWVersion = 0x03;
 
 } // namespace iei
 
