#pragma once #include "async_resp.hpp" #include "dbus_utility.hpp" #include "error_messages.hpp" #include "generated/enums/pcie_device.hpp" #include "generated/enums/pcie_slots.hpp" #include "http/utility.hpp" #include "utils/collection.hpp" #include #include #include #include #include #include #include #include namespace redfish { namespace pcie_util { /** * @brief Populate the PCIe Device list from a GetSubTreePaths search of * inventory * * @param[i,o] asyncResp Async response object * @param[i] Name Key to store the list of PCIe devices in asyncResp * * @return void */ inline void getPCIeDeviceList(const std::shared_ptr& asyncResp, const nlohmann::json::json_pointer& jsonKeyName) { static constexpr std::array pcieDeviceInterface = { "xyz.openbmc_project.Inventory.Item.PCIeDevice"}; const boost::urls::url pcieDeviceUrl = boost::urls::url("/redfish/v1/Systems/system/PCIeDevices"); collection_util::getCollectionToKey( asyncResp, pcieDeviceUrl, pcieDeviceInterface, "/xyz/openbmc_project/inventory", jsonKeyName); } inline std::optional dbusSlotTypeToRf(const std::string& slotType) { if (slotType == "xyz.openbmc_project.Inventory.Item.PCIeSlot.SlotTypes.FullLength") { return pcie_slots::SlotTypes::FullLength; } if (slotType == "xyz.openbmc_project.Inventory.Item.PCIeSlot.SlotTypes.HalfLength") { return pcie_slots::SlotTypes::HalfLength; } if (slotType == "xyz.openbmc_project.Inventory.Item.PCIeSlot.SlotTypes.LowProfile") { return pcie_slots::SlotTypes::LowProfile; } if (slotType == "xyz.openbmc_project.Inventory.Item.PCIeSlot.SlotTypes.Mini") { return pcie_slots::SlotTypes::Mini; } if (slotType == "xyz.openbmc_project.Inventory.Item.PCIeSlot.SlotTypes.M_2") { return pcie_slots::SlotTypes::M2; } if (slotType == "xyz.openbmc_project.Inventory.Item.PCIeSlot.SlotTypes.OEM") { return pcie_slots::SlotTypes::OEM; } if (slotType == "xyz.openbmc_project.Inventory.Item.PCIeSlot.SlotTypes.OCP3Small") { return pcie_slots::SlotTypes::OCP3Small; } if (slotType == "xyz.openbmc_project.Inventory.Item.PCIeSlot.SlotTypes.OCP3Large") { return pcie_slots::SlotTypes::OCP3Large; } if (slotType == "xyz.openbmc_project.Inventory.Item.PCIeSlot.SlotTypes.U_2") { return pcie_slots::SlotTypes::U2; } if (slotType == "xyz.openbmc_project.Inventory.Item.PCIeSlot.SlotTypes.Unknown") { return std::nullopt; } return pcie_slots::SlotTypes::Invalid; } inline std::optional redfishPcieGenerationFromDbus(const std::string& generationInUse) { if (generationInUse == "xyz.openbmc_project.Inventory.Item.PCIeSlot.Generations.Gen1") { return pcie_device::PCIeTypes::Gen1; } if (generationInUse == "xyz.openbmc_project.Inventory.Item.PCIeSlot.Generations.Gen2") { return pcie_device::PCIeTypes::Gen2; } if (generationInUse == "xyz.openbmc_project.Inventory.Item.PCIeSlot.Generations.Gen3") { return pcie_device::PCIeTypes::Gen3; } if (generationInUse == "xyz.openbmc_project.Inventory.Item.PCIeSlot.Generations.Gen4") { return pcie_device::PCIeTypes::Gen4; } if (generationInUse == "xyz.openbmc_project.Inventory.Item.PCIeSlot.Generations.Gen5") { return pcie_device::PCIeTypes::Gen5; } if (generationInUse.empty() || generationInUse == "xyz.openbmc_project.Inventory.Item.PCIeSlot.Generations.Unknown") { return std::nullopt; } return pcie_device::PCIeTypes::Invalid; } } // namespace pcie_util } // namespace redfish