Move getPCIeDeviceList to pcie_util

Currently, getPCIeDeviceList is only used by systems.hpp to obtain the
list of PCIe devices. However, there are plans to use this function in
other parts of the PCIe code as well. To better organize our code and
make the function more reusable, this commit moves getPCIeDeviceList to
pcie_util.hpp, a common location for PCIe-related utilities.

Tested:
'''
curl -k https://$bmc/redfish/v1/Systems/system

{
  "@odata.id": "/redfish/v1/Systems/system",
  "@odata.type": "#ComputerSystem.v1_16_0.ComputerSystem",
  "Actions": {
    "#ComputerSystem.Reset": {
      "@Redfish.ActionInfo": "/redfish/v1/Systems/system/ResetActionInfo",
      "target": "/redfish/v1/Systems/system/Actions/ComputerSystem.Reset"
    }
  },
  .....
  .....
  "PCIeDevices": [
    {
      "@odata.id": "/redfish/v1/Systems/system/PCIeDevices/dp0_drive2"
    },
    {
      "@odata.id": "/redfish/v1/Systems/system/PCIeDevices/dp0_drive3"
    },
    .....
    .....
    {
      "@odata.id": "/redfish/v1/Systems/system/PCIeDevices/pcie_card0"
    },
    {
      "@odata.id": "/redfish/v1/Systems/system/PCIeDevices/pcie_card1"
    },
    {
      "@odata.id": "/redfish/v1/Systems/system/PCIeDevices/pcie_card10"
    },
    .....
    {
      "@odata.id": "/redfish/v1/Systems/system/PCIeDevices/pcie_card9"
    }
  ],
  "PCIeDevices@odata.count": 20,
  .....
  .....
'''

Change-Id: I3aaa5b55e8574929154ffd743db53da6fbaeb75d
Signed-off-by: Lakshmi Yadlapati <lakshmiy@us.ibm.com>
diff --git a/redfish-core/include/utils/pcie_util.hpp b/redfish-core/include/utils/pcie_util.hpp
new file mode 100644
index 0000000..51423b4
--- /dev/null
+++ b/redfish-core/include/utils/pcie_util.hpp
@@ -0,0 +1,76 @@
+#pragma once
+
+#include "async_resp.hpp"
+#include "dbus_utility.hpp"
+#include "error_messages.hpp"
+#include "http/utility.hpp"
+
+#include <boost/system/error_code.hpp>
+#include <boost/url/format.hpp>
+#include <nlohmann/json.hpp>
+
+#include <array>
+#include <memory>
+#include <string>
+#include <string_view>
+
+namespace redfish
+{
+namespace pcie_util
+{
+
+/**
+ * @brief Populate the PCIe Device list from a GetSubTreePaths search of
+ *        inventory
+ *
+ * @param[i,o] aResp  Async response object
+ * @param[i]   Name   Key to store the list of PCIe devices in aResp
+ *
+ * @return void
+ */
+
+inline void
+    getPCIeDeviceList(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
+                      const std::string& name)
+{
+    static constexpr std::array<std::string_view, 1> pcieDeviceInterface = {
+        "xyz.openbmc_project.Inventory.Item.PCIeDevice"};
+
+    dbus::utility::getSubTreePaths(
+        "/xyz/openbmc_project/inventory", 0, pcieDeviceInterface,
+        [asyncResp, name](const boost::system::error_code& ec,
+                          const dbus::utility::MapperGetSubTreePathsResponse&
+                              pcieDevicePaths) {
+        if (ec)
+        {
+            BMCWEB_LOG_DEBUG << "no PCIe device paths found ec: "
+                             << ec.message();
+            // Not an error, system just doesn't have PCIe info
+            return;
+        }
+        nlohmann::json& pcieDeviceList = asyncResp->res.jsonValue[name];
+        pcieDeviceList = nlohmann::json::array();
+        for (const std::string& pcieDevicePath : pcieDevicePaths)
+        {
+            size_t devStart = pcieDevicePath.rfind('/');
+            if (devStart == std::string::npos)
+            {
+                continue;
+            }
+
+            std::string devName = pcieDevicePath.substr(devStart + 1);
+            if (devName.empty())
+            {
+                continue;
+            }
+            nlohmann::json::object_t pcieDevice;
+            pcieDevice["@odata.id"] = boost::urls::format(
+                "/redfish/v1/Systems/system/PCIeDevices/{}", devName);
+            pcieDeviceList.emplace_back(std::move(pcieDevice));
+        }
+        asyncResp->res.jsonValue[name + "@odata.count"] = pcieDeviceList.size();
+        });
+}
+
+} // namespace pcie_util
+} // namespace redfish
diff --git a/redfish-core/lib/pcie.hpp b/redfish-core/lib/pcie.hpp
index 93b15c3..f98d6c8 100644
--- a/redfish-core/lib/pcie.hpp
+++ b/redfish-core/lib/pcie.hpp
@@ -96,46 +96,6 @@
         });
 }
 
-static inline void
-    getPCIeDeviceList(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-                      const std::string& name)
-{
-    dbus::utility::getSubTreePaths(
-        inventoryPath, 0, pcieDeviceInterface,
-        [asyncResp, name](const boost::system::error_code& ec,
-                          const dbus::utility::MapperGetSubTreePathsResponse&
-                              pcieDevicePaths) {
-        if (ec)
-        {
-            BMCWEB_LOG_DEBUG << "no PCIe device paths found ec: "
-                             << ec.message();
-            // Not an error, system just doesn't have PCIe info
-            return;
-        }
-        nlohmann::json& pcieDeviceList = asyncResp->res.jsonValue[name];
-        pcieDeviceList = nlohmann::json::array();
-        for (const std::string& pcieDevicePath : pcieDevicePaths)
-        {
-            size_t devStart = pcieDevicePath.rfind('/');
-            if (devStart == std::string::npos)
-            {
-                continue;
-            }
-
-            std::string devName = pcieDevicePath.substr(devStart + 1);
-            if (devName.empty())
-            {
-                continue;
-            }
-            nlohmann::json::object_t pcieDevice;
-            pcieDevice["@odata.id"] = boost::urls::format(
-                "/redfish/v1/Systems/system/PCIeDevices/{}", devName);
-            pcieDeviceList.emplace_back(std::move(pcieDevice));
-        }
-        asyncResp->res.jsonValue[name + "@odata.count"] = pcieDeviceList.size();
-        });
-}
-
 static inline void handlePCIeDeviceCollectionGet(
     crow::App& app, const crow::Request& req,
     const std::shared_ptr<bmcweb::AsyncResp>& aResp,
diff --git a/redfish-core/lib/systems.hpp b/redfish-core/lib/systems.hpp
index 573bf88..19444b2 100644
--- a/redfish-core/lib/systems.hpp
+++ b/redfish-core/lib/systems.hpp
@@ -23,12 +23,12 @@
 #include "health.hpp"
 #include "hypervisor_system.hpp"
 #include "led.hpp"
-#include "pcie.hpp"
 #include "query.hpp"
 #include "redfish_util.hpp"
 #include "registries/privilege_registry.hpp"
 #include "utils/dbus_utils.hpp"
 #include "utils/json_utils.hpp"
+#include "utils/pcie_util.hpp"
 #include "utils/sw_utils.hpp"
 #include "utils/time_utils.hpp"
 
@@ -3182,7 +3182,7 @@
         getBootProperties(asyncResp);
         getBootProgress(asyncResp);
         getBootProgressLastStateTime(asyncResp);
-        getPCIeDeviceList(asyncResp, "PCIeDevices");
+        pcie_util::getPCIeDeviceList(asyncResp, "PCIeDevices");
         getHostWatchdogTimer(asyncResp);
         getPowerRestorePolicy(asyncResp);
         getAutomaticRetryPolicy(asyncResp);