xref: /openbmc/phosphor-bmc-code-mgmt/common/include/software_config.hpp (revision cc37235521b98887b31d07e8aedd0d86320eeb1d)
1*cc372355SAlexander Hansen #pragma once
2*cc372355SAlexander Hansen 
3*cc372355SAlexander Hansen #include "sdbusplus/async/context.hpp"
4*cc372355SAlexander Hansen 
5*cc372355SAlexander Hansen #include <cstdint>
6*cc372355SAlexander Hansen #include <string>
7*cc372355SAlexander Hansen 
8*cc372355SAlexander Hansen namespace phosphor::software::device
9*cc372355SAlexander Hansen {
10*cc372355SAlexander Hansen class Device;
11*cc372355SAlexander Hansen }
12*cc372355SAlexander Hansen 
13*cc372355SAlexander Hansen using namespace phosphor::software::device;
14*cc372355SAlexander Hansen 
15*cc372355SAlexander Hansen namespace phosphor::software::config
16*cc372355SAlexander Hansen {
17*cc372355SAlexander Hansen 
18*cc372355SAlexander Hansen /* This class represents the device software configuration we get from
19*cc372355SAlexander Hansen  * entity-manager via D-Bus. Each Code Updater can create its own configuration
20*cc372355SAlexander Hansen  * class that inherits from this to store additional properties from their
21*cc372355SAlexander Hansen  * device configuration, like bus/address/...
22*cc372355SAlexander Hansen  */
23*cc372355SAlexander Hansen class SoftwareConfig
24*cc372355SAlexander Hansen {
25*cc372355SAlexander Hansen   public:
26*cc372355SAlexander Hansen     SoftwareConfig(const std::string& objPath, uint32_t vendorIANA,
27*cc372355SAlexander Hansen                    const std::string& compatible, const std::string& configType,
28*cc372355SAlexander Hansen                    const std::string& name);
29*cc372355SAlexander Hansen 
30*cc372355SAlexander Hansen     // The dbus object path this configuration was fetched from
31*cc372355SAlexander Hansen     const std::string objectPath;
32*cc372355SAlexander Hansen 
33*cc372355SAlexander Hansen     // https://github.com/openbmc/entity-manager/blob/master/schemas/firmware.json
34*cc372355SAlexander Hansen 
35*cc372355SAlexander Hansen     // 'Name' field from the EM config
36*cc372355SAlexander Hansen     const std::string configName;
37*cc372355SAlexander Hansen 
38*cc372355SAlexander Hansen     // 'Type' field from the EM config
39*cc372355SAlexander Hansen     const std::string configType;
40*cc372355SAlexander Hansen 
41*cc372355SAlexander Hansen     // @returns        the object path of the inventory item which
42*cc372355SAlexander Hansen     //                 can be associated with this device.
43*cc372355SAlexander Hansen     sdbusplus::async::task<std::string> getInventoryItemObjectPath(
44*cc372355SAlexander Hansen         sdbusplus::async::context& ctx);
45*cc372355SAlexander Hansen 
46*cc372355SAlexander Hansen   private:
47*cc372355SAlexander Hansen     // 'VendorIANA' field from the EM config
48*cc372355SAlexander Hansen     const uint32_t vendorIANA; // e.g. "0x0000A015", 4 bytes as per PLDM spec
49*cc372355SAlexander Hansen 
50*cc372355SAlexander Hansen     // 'CompatibleHardware' field from the EM config
51*cc372355SAlexander Hansen     const std::string
52*cc372355SAlexander Hansen         compatibleHardware; // e.g.
53*cc372355SAlexander Hansen                             // "com.meta.Hardware.Yosemite4.MedusaBoard.CPLD.LCMX02_2000HC"
54*cc372355SAlexander Hansen 
55*cc372355SAlexander Hansen     friend Device;
56*cc372355SAlexander Hansen };
57*cc372355SAlexander Hansen 
58*cc372355SAlexander Hansen }; // namespace phosphor::software::config
59