xref: /openbmc/pldm/host-bmc/dbus/custom_dbus.hpp (revision d432b48b6b5c908248d9bc6cce316514a05f3ed0)
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