114107a10SKamalkumar Patel #pragma once 214107a10SKamalkumar Patel 31634a6e9SArchana Kakani #include "asset.hpp" 4f935537dSArchana Kakani #include "availability.hpp" 5*d432b48bSArchana Kakani #include "board.hpp" 6b40f4f8fSArchana Kakani #include "cable.hpp" 7db65c3b4SArchana Kakani #include "chassis.hpp" 814107a10SKamalkumar Patel #include "common/utils.hpp" 917b1e8a8SArchana Kakani #include "connector.hpp" 1056da5740SKamalkumar Patel #include "cpu_core.hpp" 1142876b6cSArchana Kakani #include "fabric_adapter.hpp" 12413f51eaSArchana Kakani #include "fan.hpp" 13c366447aSArchana Kakani #include "inventory_item.hpp" 142ed986c9SKamalkumar Patel #include "motherboard.hpp" 15765cf03dSArchana Kakani #include "panel.hpp" 16733b39daSArchana Kakani #include "pcie_device.hpp" 17bf1fd27bSArchana Kakani #include "pcie_slot.hpp" 1824e9a9bbSArchana Kakani #include "power_supply.hpp" 192832f2cdSArchana Kakani #include "vrm.hpp" 2014107a10SKamalkumar Patel 2114107a10SKamalkumar Patel #include <sdbusplus/server.hpp> 2214107a10SKamalkumar Patel #include <xyz/openbmc_project/Inventory/Decorator/LocationCode/server.hpp> 2314107a10SKamalkumar Patel 2414107a10SKamalkumar Patel #include <memory> 2514107a10SKamalkumar Patel #include <optional> 2614107a10SKamalkumar Patel #include <string> 2714107a10SKamalkumar Patel #include <unordered_map> 2814107a10SKamalkumar Patel 2914107a10SKamalkumar Patel namespace pldm 3014107a10SKamalkumar Patel { 3114107a10SKamalkumar Patel namespace dbus 3214107a10SKamalkumar Patel { 3314107a10SKamalkumar Patel using ObjectPath = std::string; 3414107a10SKamalkumar Patel 3514107a10SKamalkumar Patel using LocationIntf = 3614107a10SKamalkumar Patel sdbusplus::server::object_t<sdbusplus::xyz::openbmc_project::Inventory:: 3714107a10SKamalkumar Patel Decorator::server::LocationCode>; 3814107a10SKamalkumar Patel 3914107a10SKamalkumar Patel /** @class CustomDBus 4014107a10SKamalkumar Patel * @brief This is a custom D-Bus object, used to add D-Bus interface and update 4114107a10SKamalkumar Patel * the corresponding properties value. 4214107a10SKamalkumar Patel */ 4314107a10SKamalkumar Patel class CustomDBus 4414107a10SKamalkumar Patel { 4514107a10SKamalkumar Patel private: CustomDBus()4614107a10SKamalkumar Patel CustomDBus() {} 4714107a10SKamalkumar Patel 4814107a10SKamalkumar Patel public: 4914107a10SKamalkumar Patel CustomDBus(const CustomDBus&) = delete; 5014107a10SKamalkumar Patel CustomDBus(CustomDBus&&) = delete; 5114107a10SKamalkumar Patel CustomDBus& operator=(const CustomDBus&) = delete; 5214107a10SKamalkumar Patel CustomDBus& operator=(CustomDBus&&) = delete; 5314107a10SKamalkumar Patel ~CustomDBus() = default; 5414107a10SKamalkumar Patel getCustomDBus()5514107a10SKamalkumar Patel static CustomDBus& getCustomDBus() 5614107a10SKamalkumar Patel { 5714107a10SKamalkumar Patel static CustomDBus customDBus; 5814107a10SKamalkumar Patel return customDBus; 5914107a10SKamalkumar Patel } 6014107a10SKamalkumar Patel 6114107a10SKamalkumar Patel public: 6214107a10SKamalkumar Patel /** @brief Set the LocationCode property 6314107a10SKamalkumar Patel * 6414107a10SKamalkumar Patel * @param[in] path - The object path 6514107a10SKamalkumar Patel * 6614107a10SKamalkumar Patel * @param[in] value - The value of the LocationCode property 6714107a10SKamalkumar Patel */ 6814107a10SKamalkumar Patel void setLocationCode(const std::string& path, std::string value); 6914107a10SKamalkumar Patel 7014107a10SKamalkumar Patel /** @brief Get the LocationCode property 7114107a10SKamalkumar Patel * 7214107a10SKamalkumar Patel * @param[in] path - The object path 7314107a10SKamalkumar Patel * 7414107a10SKamalkumar Patel * @return std::optional<std::string> - The value of the LocationCode 7514107a10SKamalkumar Patel * property 7614107a10SKamalkumar Patel */ 7714107a10SKamalkumar Patel std::optional<std::string> getLocationCode(const std::string& path) const; 7856da5740SKamalkumar Patel /** @brief Implement CpuCore Interface 7956da5740SKamalkumar Patel * 8056da5740SKamalkumar Patel * @param[in] path - The object path 8156da5740SKamalkumar Patel * 8256da5740SKamalkumar Patel */ 8356da5740SKamalkumar Patel void implementCpuCoreInterface(const std::string& path); 8456da5740SKamalkumar Patel /** @brief Set the microcode property 8556da5740SKamalkumar Patel * 8656da5740SKamalkumar Patel * @param[in] path - The object path 8756da5740SKamalkumar Patel * 8856da5740SKamalkumar Patel * @param[in] value - microcode value 8956da5740SKamalkumar Patel */ 9056da5740SKamalkumar Patel void setMicroCode(const std::string& path, uint32_t value); 9156da5740SKamalkumar Patel 9256da5740SKamalkumar Patel /** @brief Get the microcode property 9356da5740SKamalkumar Patel * 9456da5740SKamalkumar Patel * @param[in] path - The object path 9556da5740SKamalkumar Patel * 9656da5740SKamalkumar Patel * @return std::optional<uint32_t> - The value of the microcode value 9756da5740SKamalkumar Patel */ 9856da5740SKamalkumar Patel std::optional<uint32_t> getMicroCode(const std::string& path) const; 9914107a10SKamalkumar Patel 100bf1fd27bSArchana Kakani /** @brief Implement PCIeSlot Interface 101bf1fd27bSArchana Kakani * 102bf1fd27bSArchana Kakani * @param[in] path - the object path 103bf1fd27bSArchana Kakani */ 104bf1fd27bSArchana Kakani void implementPCIeSlotInterface(const std::string& path); 105bf1fd27bSArchana Kakani 106bf1fd27bSArchana Kakani /** @brief Set the slot type 107bf1fd27bSArchana Kakani * 108bf1fd27bSArchana Kakani * @param[in] path - the object path 109bf1fd27bSArchana Kakani * @param[in] slot type - Slot type 110bf1fd27bSArchana Kakani */ 111bf1fd27bSArchana Kakani void setSlotType(const std::string& path, const std::string& slotType); 112bf1fd27bSArchana Kakani 113733b39daSArchana Kakani /** @brief Implement PCIe Device Interface 114733b39daSArchana Kakani * 115733b39daSArchana Kakani * @param[in] path - the object path 116733b39daSArchana Kakani */ 117733b39daSArchana Kakani void implementPCIeDeviceInterface(const std::string& path); 118733b39daSArchana Kakani 119733b39daSArchana Kakani /** @brief Set PCIe Device Lanes in use property 120733b39daSArchana Kakani * 121733b39daSArchana Kakani * @param[in] path - the object path 122733b39daSArchana Kakani * @param[in] lanesInUse - Lanes in use 123733b39daSArchana Kakani * @param[in] value - Generation in use 124733b39daSArchana Kakani */ 125733b39daSArchana Kakani void setPCIeDeviceProps(const std::string& path, size_t lanesInUse, 126733b39daSArchana Kakani const std::string& value); 127733b39daSArchana Kakani 128b40f4f8fSArchana Kakani /** @brief Implement PCIe Cable Interface 129b40f4f8fSArchana Kakani * 130b40f4f8fSArchana Kakani * @param[in] path - the object path 131b40f4f8fSArchana Kakani */ 132b40f4f8fSArchana Kakani void implementCableInterface(const std::string& path); 133b40f4f8fSArchana Kakani 134b40f4f8fSArchana Kakani /** @brief set cable attributes 135b40f4f8fSArchana Kakani * 136b40f4f8fSArchana Kakani * @param[in] path - the object path 137b40f4f8fSArchana Kakani * @param[in] length - length of the wire 138b40f4f8fSArchana Kakani * @param[in] cableDescription - cable details 139b40f4f8fSArchana Kakani */ 140b40f4f8fSArchana Kakani void setCableAttributes(const std::string& path, double length, 141b40f4f8fSArchana Kakani const std::string& cableDescription); 1422ed986c9SKamalkumar Patel /** @brief Implement interface for motherboard property 1432ed986c9SKamalkumar Patel * 1442ed986c9SKamalkumar Patel * @param[in] path - The object path 1452ed986c9SKamalkumar Patel * 1462ed986c9SKamalkumar Patel */ 1472ed986c9SKamalkumar Patel void implementMotherboardInterface(const std::string& path); 148b40f4f8fSArchana Kakani 149413f51eaSArchana Kakani /** @brief Implement Fan Interface 150413f51eaSArchana Kakani * 151413f51eaSArchana Kakani * @param[in] path - The object path 152413f51eaSArchana Kakani * 153413f51eaSArchana Kakani */ 154413f51eaSArchana Kakani void implementFanInterface(const std::string& path); 155413f51eaSArchana Kakani 156db65c3b4SArchana Kakani /** @brief Implement Chassis Interface 157db65c3b4SArchana Kakani * @param[in] path - the object path 158db65c3b4SArchana Kakani */ 159db65c3b4SArchana Kakani void implementChassisInterface(const std::string& path); 160db65c3b4SArchana Kakani 16124e9a9bbSArchana Kakani /** @brief Implement PowerSupply Interface 16224e9a9bbSArchana Kakani * 16324e9a9bbSArchana Kakani * @param[in] path - The object path 16424e9a9bbSArchana Kakani * 16524e9a9bbSArchana Kakani */ 16624e9a9bbSArchana Kakani void implementPowerSupplyInterface(const std::string& path); 16724e9a9bbSArchana Kakani 16817b1e8a8SArchana Kakani /** @brief Implement Connector Interface 16917b1e8a8SArchana Kakani * 17017b1e8a8SArchana Kakani * @param[in] path - The object path 17117b1e8a8SArchana Kakani * 17217b1e8a8SArchana Kakani */ 17317b1e8a8SArchana Kakani void implementConnecterInterface(const std::string& path); 17417b1e8a8SArchana Kakani 17542876b6cSArchana Kakani /** @brief Implement Fabric Adapter Interface 17642876b6cSArchana Kakani * 17742876b6cSArchana Kakani * @param[in] path - The object path 17842876b6cSArchana Kakani * 17942876b6cSArchana Kakani */ 18042876b6cSArchana Kakani void implementFabricAdapter(const std::string& path); 18142876b6cSArchana Kakani 182*d432b48bSArchana Kakani /** @brief Implement Board Interface 183*d432b48bSArchana Kakani * 184*d432b48bSArchana Kakani * @param[in] path - The object path 185*d432b48bSArchana Kakani * 186*d432b48bSArchana Kakani */ 187*d432b48bSArchana Kakani void implementBoard(const std::string& path); 188*d432b48bSArchana Kakani 1891634a6e9SArchana Kakani /** @brief Implement Asset Interface 1901634a6e9SArchana Kakani * 1911634a6e9SArchana Kakani * @param[in] path - The object path 1921634a6e9SArchana Kakani * 1931634a6e9SArchana Kakani */ 1941634a6e9SArchana Kakani void implementAssetInterface(const std::string& path); 1951634a6e9SArchana Kakani 196f935537dSArchana Kakani /** @brief Set the availability state property 197f935537dSArchana Kakani * 198f935537dSArchana Kakani * @param[in] path - The object path 199f935537dSArchana Kakani * 200f935537dSArchana Kakani * @param[in] state - Availability state 201f935537dSArchana Kakani */ 202f935537dSArchana Kakani void setAvailabilityState(const std::string& path, const bool& state); 203f935537dSArchana Kakani 204c366447aSArchana Kakani /** @brief Set the Inventory Item property 205c366447aSArchana Kakani * @param[in] path - The object path 206c366447aSArchana Kakani * @param[in] bool - the presence of fru 207c366447aSArchana Kakani */ 208c366447aSArchana Kakani void updateItemPresentStatus(const std::string& path, bool isPresent); 209c366447aSArchana Kakani 210765cf03dSArchana Kakani /** @brief Implement Panel Interface 211765cf03dSArchana Kakani * 212765cf03dSArchana Kakani * @param[in] path - The object path 213765cf03dSArchana Kakani * 214765cf03dSArchana Kakani */ 215765cf03dSArchana Kakani void implementPanelInterface(const std::string& path); 216765cf03dSArchana Kakani 2172832f2cdSArchana Kakani /** @brief Implement Voltage Regulator Module Interface 2182832f2cdSArchana Kakani * 2192832f2cdSArchana Kakani * @param[in] path - The object path 2202832f2cdSArchana Kakani * 2212832f2cdSArchana Kakani */ 2222832f2cdSArchana Kakani void implementVRMInterface(const std::string& path); 2232832f2cdSArchana Kakani 22414107a10SKamalkumar Patel private: 2251634a6e9SArchana Kakani std::unordered_map<ObjectPath, std::unique_ptr<Asset>> asset; 226f935537dSArchana Kakani std::unordered_map<ObjectPath, std::unique_ptr<Availability>> 227f935537dSArchana Kakani availabilityState; 22814107a10SKamalkumar Patel std::unordered_map<ObjectPath, std::unique_ptr<LocationIntf>> location; 229c366447aSArchana Kakani std::unordered_map<ObjectPath, std::unique_ptr<InventoryItem>> 230c366447aSArchana Kakani presentStatus; 23156da5740SKamalkumar Patel std::unordered_map<ObjectPath, std::unique_ptr<CPUCore>> cpuCore; 232db65c3b4SArchana Kakani std::unordered_map<ObjectPath, std::unique_ptr<ItemChassis>> chassis; 233733b39daSArchana Kakani std::unordered_map<ObjectPath, std::unique_ptr<PCIeDevice>> pcieDevice; 234bf1fd27bSArchana Kakani std::unordered_map<ObjectPath, std::unique_ptr<PCIeSlot>> pcieSlot; 23524e9a9bbSArchana Kakani std::unordered_map<ObjectPath, std::unique_ptr<PowerSupply>> powersupply; 236*d432b48bSArchana Kakani std::unordered_map<ObjectPath, std::unique_ptr<Board>> board; 23742876b6cSArchana Kakani std::unordered_map<ObjectPath, std::unique_ptr<FabricAdapter>> 23842876b6cSArchana Kakani fabricAdapter; 239b40f4f8fSArchana Kakani std::unordered_map<ObjectPath, std::unique_ptr<Cable>> cable; 2402ed986c9SKamalkumar Patel std::unordered_map<ObjectPath, std::unique_ptr<Motherboard>> motherboard; 241413f51eaSArchana Kakani std::unordered_map<ObjectPath, std::unique_ptr<Fan>> fan; 24217b1e8a8SArchana Kakani std::unordered_map<ObjectPath, std::unique_ptr<Connector>> connector; 243765cf03dSArchana Kakani std::unordered_map<ObjectPath, std::unique_ptr<Panel>> panel; 2442832f2cdSArchana Kakani std::unordered_map<ObjectPath, std::unique_ptr<VRM>> vrm; 24514107a10SKamalkumar Patel }; 24614107a10SKamalkumar Patel 24714107a10SKamalkumar Patel } // namespace dbus 24814107a10SKamalkumar Patel } // namespace pldm 249