1 #pragma once 2 3 #include "async_resp.hpp" 4 #include "dbus_utility.hpp" 5 #include "error_messages.hpp" 6 #include "http/utility.hpp" 7 8 #include <boost/system/error_code.hpp> 9 #include <boost/url/format.hpp> 10 #include <nlohmann/json.hpp> 11 12 #include <array> 13 #include <memory> 14 #include <string> 15 #include <string_view> 16 17 namespace redfish 18 { 19 namespace pcie_util 20 { 21 22 /** 23 * @brief Populate the PCIe Device list from a GetSubTreePaths search of 24 * inventory 25 * 26 * @param[i,o] asyncResp Async response object 27 * @param[i] Name Key to store the list of PCIe devices in asyncResp 28 * 29 * @return void 30 */ 31 32 inline void 33 getPCIeDeviceList(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, 34 const std::string& name) 35 { 36 static constexpr std::array<std::string_view, 1> pcieDeviceInterface = { 37 "xyz.openbmc_project.Inventory.Item.PCIeDevice"}; 38 39 dbus::utility::getSubTreePaths( 40 "/xyz/openbmc_project/inventory", 0, pcieDeviceInterface, 41 [asyncResp, name](const boost::system::error_code& ec, 42 const dbus::utility::MapperGetSubTreePathsResponse& 43 pcieDevicePaths) { 44 if (ec) 45 { 46 BMCWEB_LOG_DEBUG << "no PCIe device paths found ec: " 47 << ec.message(); 48 // Not an error, system just doesn't have PCIe info 49 return; 50 } 51 nlohmann::json& pcieDeviceList = asyncResp->res.jsonValue[name]; 52 pcieDeviceList = nlohmann::json::array(); 53 for (const std::string& pcieDevicePath : pcieDevicePaths) 54 { 55 size_t devStart = pcieDevicePath.rfind('/'); 56 if (devStart == std::string::npos) 57 { 58 continue; 59 } 60 61 std::string devName = pcieDevicePath.substr(devStart + 1); 62 if (devName.empty()) 63 { 64 continue; 65 } 66 nlohmann::json::object_t pcieDevice; 67 pcieDevice["@odata.id"] = boost::urls::format( 68 "/redfish/v1/Systems/system/PCIeDevices/{}", devName); 69 pcieDeviceList.emplace_back(std::move(pcieDevice)); 70 } 71 asyncResp->res.jsonValue[name + "@odata.count"] = pcieDeviceList.size(); 72 }); 73 } 74 75 } // namespace pcie_util 76 } // namespace redfish 77