1*cab87e9cSJagpal Singh Gill #pragma once 2*cab87e9cSJagpal Singh Gill 3*cab87e9cSJagpal Singh Gill #include "activation.hpp" 4*cab87e9cSJagpal Singh Gill #include "item_updater_helper.hpp" 5*cab87e9cSJagpal Singh Gill #include "msl_verify.hpp" 6*cab87e9cSJagpal Singh Gill #include "update_manager.hpp" 7*cab87e9cSJagpal Singh Gill #include "version.hpp" 8*cab87e9cSJagpal Singh Gill #include "xyz/openbmc_project/Collection/DeleteAll/server.hpp" 9*cab87e9cSJagpal Singh Gill 10*cab87e9cSJagpal Singh Gill #include <sdbusplus/async.hpp> 11*cab87e9cSJagpal Singh Gill #include <sdbusplus/server.hpp> 12*cab87e9cSJagpal Singh Gill #include <xyz/openbmc_project/Association/Definitions/server.hpp> 13*cab87e9cSJagpal Singh Gill #include <xyz/openbmc_project/Common/FactoryReset/server.hpp> 14*cab87e9cSJagpal Singh Gill #include <xyz/openbmc_project/Control/FieldMode/server.hpp> 15*cab87e9cSJagpal Singh Gill #include <xyz/openbmc_project/Software/MinimumVersion/server.hpp> 16*cab87e9cSJagpal Singh Gill 17*cab87e9cSJagpal Singh Gill #include <string> 18*cab87e9cSJagpal Singh Gill #include <vector> 19*cab87e9cSJagpal Singh Gill 20*cab87e9cSJagpal Singh Gill namespace phosphor 21*cab87e9cSJagpal Singh Gill { 22*cab87e9cSJagpal Singh Gill namespace software 23*cab87e9cSJagpal Singh Gill { 24*cab87e9cSJagpal Singh Gill namespace updater 25*cab87e9cSJagpal Singh Gill { 26*cab87e9cSJagpal Singh Gill 27*cab87e9cSJagpal Singh Gill using ActivationIntf = 28*cab87e9cSJagpal Singh Gill sdbusplus::xyz::openbmc_project::Software::server::Activation; 29*cab87e9cSJagpal Singh Gill using ItemUpdaterInherit = sdbusplus::server::object_t< 30*cab87e9cSJagpal Singh Gill sdbusplus::server::xyz::openbmc_project::common::FactoryReset, 31*cab87e9cSJagpal Singh Gill sdbusplus::server::xyz::openbmc_project::control::FieldMode, 32*cab87e9cSJagpal Singh Gill sdbusplus::server::xyz::openbmc_project::association::Definitions, 33*cab87e9cSJagpal Singh Gill sdbusplus::server::xyz::openbmc_project::collection::DeleteAll>; 34*cab87e9cSJagpal Singh Gill using MinimumVersionInherit = sdbusplus::server::object_t< 35*cab87e9cSJagpal Singh Gill sdbusplus::server::xyz::openbmc_project::software::MinimumVersion>; 36*cab87e9cSJagpal Singh Gill 37*cab87e9cSJagpal Singh Gill namespace MatchRules = sdbusplus::bus::match::rules; 38*cab87e9cSJagpal Singh Gill using VersionClass = phosphor::software::manager::Version; 39*cab87e9cSJagpal Singh Gill using AssociationList = 40*cab87e9cSJagpal Singh Gill std::vector<std::tuple<std::string, std::string, std::string>>; 41*cab87e9cSJagpal Singh Gill using UpdateManager = phosphor::software::update::Manager; 42*cab87e9cSJagpal Singh Gill 43*cab87e9cSJagpal Singh Gill /** @class MinimumVersion 44*cab87e9cSJagpal Singh Gill * @brief OpenBMC MinimumVersion implementation. 45*cab87e9cSJagpal Singh Gill * @details A concrete implementation for 46*cab87e9cSJagpal Singh Gill * xyz.openbmc_project.Software.MinimumVersion DBus API. 47*cab87e9cSJagpal Singh Gill */ 48*cab87e9cSJagpal Singh Gill class MinimumVersion : public MinimumVersionInherit 49*cab87e9cSJagpal Singh Gill { 50*cab87e9cSJagpal Singh Gill public: 51*cab87e9cSJagpal Singh Gill /** @brief Constructs MinimumVersion 52*cab87e9cSJagpal Singh Gill * 53*cab87e9cSJagpal Singh Gill * @param[in] bus - The D-Bus bus object 54*cab87e9cSJagpal Singh Gill * @param[in] path - The D-bus object path 55*cab87e9cSJagpal Singh Gill */ MinimumVersion(sdbusplus::bus_t & bus,const std::string & path)56*cab87e9cSJagpal Singh Gill MinimumVersion(sdbusplus::bus_t& bus, const std::string& path) : 57*cab87e9cSJagpal Singh Gill MinimumVersionInherit(bus, path.c_str(), action::emit_interface_added) 58*cab87e9cSJagpal Singh Gill {} 59*cab87e9cSJagpal Singh Gill }; 60*cab87e9cSJagpal Singh Gill 61*cab87e9cSJagpal Singh Gill /** @class ItemUpdater 62*cab87e9cSJagpal Singh Gill * @brief Manages the activation of the BMC version items. 63*cab87e9cSJagpal Singh Gill */ 64*cab87e9cSJagpal Singh Gill class ItemUpdater : public ItemUpdaterInherit 65*cab87e9cSJagpal Singh Gill { 66*cab87e9cSJagpal Singh Gill public: 67*cab87e9cSJagpal Singh Gill /* 68*cab87e9cSJagpal Singh Gill * @brief Types of Activation status for image validation. 69*cab87e9cSJagpal Singh Gill */ 70*cab87e9cSJagpal Singh Gill enum class ActivationStatus 71*cab87e9cSJagpal Singh Gill { 72*cab87e9cSJagpal Singh Gill ready, 73*cab87e9cSJagpal Singh Gill invalid, 74*cab87e9cSJagpal Singh Gill active 75*cab87e9cSJagpal Singh Gill }; 76*cab87e9cSJagpal Singh Gill 77*cab87e9cSJagpal Singh Gill /** @brief Types of Updater. */ 78*cab87e9cSJagpal Singh Gill enum class UpdaterType 79*cab87e9cSJagpal Singh Gill { 80*cab87e9cSJagpal Singh Gill BMC, 81*cab87e9cSJagpal Singh Gill BIOS, 82*cab87e9cSJagpal Singh Gill ALL 83*cab87e9cSJagpal Singh Gill }; 84*cab87e9cSJagpal Singh Gill 85*cab87e9cSJagpal Singh Gill /** @brief Constructs ItemUpdater 86*cab87e9cSJagpal Singh Gill * 87*cab87e9cSJagpal Singh Gill * @param[in] bus - The D-Bus bus object 88*cab87e9cSJagpal Singh Gill */ ItemUpdater(sdbusplus::async::context & ctx,const std::string & path,UpdaterType type=UpdaterType::ALL,bool useUpdateDBusInterface=true)89*cab87e9cSJagpal Singh Gill ItemUpdater(sdbusplus::async::context& ctx, const std::string& path, 90*cab87e9cSJagpal Singh Gill UpdaterType type = UpdaterType::ALL, 91*cab87e9cSJagpal Singh Gill bool useUpdateDBusInterface = true) : 92*cab87e9cSJagpal Singh Gill ItemUpdaterInherit(ctx.get_bus(), path.c_str(), 93*cab87e9cSJagpal Singh Gill ItemUpdaterInherit::action::defer_emit), 94*cab87e9cSJagpal Singh Gill type(type), useUpdateDBusInterface(useUpdateDBusInterface), ctx(ctx), 95*cab87e9cSJagpal Singh Gill bus(ctx.get_bus()), helper(bus) 96*cab87e9cSJagpal Singh Gill { 97*cab87e9cSJagpal Singh Gill if (!useUpdateDBusInterface) 98*cab87e9cSJagpal Singh Gill { 99*cab87e9cSJagpal Singh Gill versionMatch = std::make_unique<sdbusplus::bus::match_t>( 100*cab87e9cSJagpal Singh Gill bus, 101*cab87e9cSJagpal Singh Gill MatchRules::interfacesAdded() + 102*cab87e9cSJagpal Singh Gill MatchRules::path("/xyz/openbmc_project/software"), 103*cab87e9cSJagpal Singh Gill std::bind(std::mem_fn(&ItemUpdater::createActivation), this, 104*cab87e9cSJagpal Singh Gill std::placeholders::_1)); 105*cab87e9cSJagpal Singh Gill } 106*cab87e9cSJagpal Singh Gill getRunningSlot(); 107*cab87e9cSJagpal Singh Gill setBMCInventoryPath(); 108*cab87e9cSJagpal Singh Gill if (type == UpdaterType::BMC || type == UpdaterType::ALL) 109*cab87e9cSJagpal Singh Gill { 110*cab87e9cSJagpal Singh Gill processBMCImage(); 111*cab87e9cSJagpal Singh Gill } 112*cab87e9cSJagpal Singh Gill if (type == UpdaterType::BIOS || type == UpdaterType::ALL) 113*cab87e9cSJagpal Singh Gill { 114*cab87e9cSJagpal Singh Gill #ifdef HOST_BIOS_UPGRADE 115*cab87e9cSJagpal Singh Gill createBIOSObject(); 116*cab87e9cSJagpal Singh Gill #endif 117*cab87e9cSJagpal Singh Gill } 118*cab87e9cSJagpal Singh Gill restoreFieldModeStatus(); 119*cab87e9cSJagpal Singh Gill emit_object_added(); 120*cab87e9cSJagpal Singh Gill }; 121*cab87e9cSJagpal Singh Gill 122*cab87e9cSJagpal Singh Gill /** @brief Save priority value to persistent storage (flash and optionally 123*cab87e9cSJagpal Singh Gill * a U-Boot environment variable) 124*cab87e9cSJagpal Singh Gill * 125*cab87e9cSJagpal Singh Gill * @param[in] versionId - The Id of the version 126*cab87e9cSJagpal Singh Gill * @param[in] value - The priority value 127*cab87e9cSJagpal Singh Gill * @return None 128*cab87e9cSJagpal Singh Gill */ 129*cab87e9cSJagpal Singh Gill void savePriority(const std::string& versionId, uint8_t value); 130*cab87e9cSJagpal Singh Gill 131*cab87e9cSJagpal Singh Gill /** @brief Sets the given priority free by incrementing 132*cab87e9cSJagpal Singh Gill * any existing priority with the same value by 1 133*cab87e9cSJagpal Singh Gill * 134*cab87e9cSJagpal Singh Gill * @param[in] value - The priority that needs to be set free. 135*cab87e9cSJagpal Singh Gill * @param[in] versionId - The Id of the version for which we 136*cab87e9cSJagpal Singh Gill * are trying to free up the priority. 137*cab87e9cSJagpal Singh Gill * @return None 138*cab87e9cSJagpal Singh Gill */ 139*cab87e9cSJagpal Singh Gill void freePriority(uint8_t value, const std::string& versionId); 140*cab87e9cSJagpal Singh Gill 141*cab87e9cSJagpal Singh Gill /** 142*cab87e9cSJagpal Singh Gill * @brief Create and populate the active BMC Version. 143*cab87e9cSJagpal Singh Gill */ 144*cab87e9cSJagpal Singh Gill void processBMCImage(); 145*cab87e9cSJagpal Singh Gill 146*cab87e9cSJagpal Singh Gill /** 147*cab87e9cSJagpal Singh Gill * @brief Verifies the image at filepath and creates the version and 148*cab87e9cSJagpal Singh Gill * activation object. In case activation object already exists for the 149*cab87e9cSJagpal Singh Gill * specified id, update the activation status based on image verification. 150*cab87e9cSJagpal Singh Gill * @param[in] id - The unique identifier for the update. 151*cab87e9cSJagpal Singh Gill * @param[in] path - The object path for the relevant objects. 152*cab87e9cSJagpal Singh Gill * @param[in] version - The version of the image. 153*cab87e9cSJagpal Singh Gill * @param[in] purpose - The purpose of the image. 154*cab87e9cSJagpal Singh Gill * @param[in] extendedVersion The extended version of the image. 155*cab87e9cSJagpal Singh Gill * @param[in] filePath - The file path where the image is located. 156*cab87e9cSJagpal Singh Gill * @param[in] compatibleNames - The compatible name for the image. 157*cab87e9cSJagpal Singh Gill * @param[out] Activations - Whether the image is ready to activate or not. 158*cab87e9cSJagpal Singh Gill */ 159*cab87e9cSJagpal Singh Gill ActivationIntf::Activations verifyAndCreateObjects( 160*cab87e9cSJagpal Singh Gill std::string& id, std::string& path, std::string& version, 161*cab87e9cSJagpal Singh Gill VersionClass::VersionPurpose purpose, std::string& extendedVersion, 162*cab87e9cSJagpal Singh Gill std ::string& filePath, std::vector<std::string>& compatibleNames); 163*cab87e9cSJagpal Singh Gill 164*cab87e9cSJagpal Singh Gill /** 165*cab87e9cSJagpal Singh Gill * @brief Creates the activation object 166*cab87e9cSJagpal Singh Gill * @param[in] id - The unique identifier for the update. 167*cab87e9cSJagpal Singh Gill * @param[in] path - The object path for the activation object. 168*cab87e9cSJagpal Singh Gill * @param[in] applyTime - The apply time for the image 169*cab87e9cSJagpal Singh Gill */ 170*cab87e9cSJagpal Singh Gill void createActivationWithApplyTime( 171*cab87e9cSJagpal Singh Gill std::string& id, std::string& path, 172*cab87e9cSJagpal Singh Gill ApplyTimeIntf::RequestedApplyTimes applyTime); 173*cab87e9cSJagpal Singh Gill 174*cab87e9cSJagpal Singh Gill /** 175*cab87e9cSJagpal Singh Gill * @brief Request the activation for the specified update. 176*cab87e9cSJagpal Singh Gill * @param[in] id - The unique identifier for the update. 177*cab87e9cSJagpal Singh Gill * @param[out] bool - status for the action. 178*cab87e9cSJagpal Singh Gill */ 179*cab87e9cSJagpal Singh Gill bool requestActivation(std::string& id); 180*cab87e9cSJagpal Singh Gill 181*cab87e9cSJagpal Singh Gill /** 182*cab87e9cSJagpal Singh Gill * @brief Change the activation status for the specified update. 183*cab87e9cSJagpal Singh Gill * @param[in] id - The unique identifier for the update. 184*cab87e9cSJagpal Singh Gill * @param[in] status - The activation status to set. 185*cab87e9cSJagpal Singh Gill * @param[out] bool - status for the action. 186*cab87e9cSJagpal Singh Gill */ 187*cab87e9cSJagpal Singh Gill bool updateActivationStatus(std::string& id, 188*cab87e9cSJagpal Singh Gill ActivationIntf::Activations status); 189*cab87e9cSJagpal Singh Gill 190*cab87e9cSJagpal Singh Gill /** 191*cab87e9cSJagpal Singh Gill * @brief Create the Update object 192*cab87e9cSJagpal Singh Gill * @param[in] id - The unique identifier for the update. 193*cab87e9cSJagpal Singh Gill * @param[in] path - The object path for the update object. 194*cab87e9cSJagpal Singh Gill */ 195*cab87e9cSJagpal Singh Gill void createUpdateObject(const std::string& id, const std::string& path); 196*cab87e9cSJagpal Singh Gill 197*cab87e9cSJagpal Singh Gill /** 198*cab87e9cSJagpal Singh Gill * @brief Erase specified entry D-Bus object 199*cab87e9cSJagpal Singh Gill * if Action property is not set to Active 200*cab87e9cSJagpal Singh Gill * 201*cab87e9cSJagpal Singh Gill * @param[in] entryId - unique identifier of the entry 202*cab87e9cSJagpal Singh Gill */ 203*cab87e9cSJagpal Singh Gill void erase(std::string entryId); 204*cab87e9cSJagpal Singh Gill 205*cab87e9cSJagpal Singh Gill /** 206*cab87e9cSJagpal Singh Gill * @brief Deletes all versions except for the current one 207*cab87e9cSJagpal Singh Gill */ 208*cab87e9cSJagpal Singh Gill void deleteAll() override; 209*cab87e9cSJagpal Singh Gill 210*cab87e9cSJagpal Singh Gill /** @brief Creates an active association to the 211*cab87e9cSJagpal Singh Gill * newly active software image 212*cab87e9cSJagpal Singh Gill * 213*cab87e9cSJagpal Singh Gill * @param[in] path - The path to create the association to. 214*cab87e9cSJagpal Singh Gill */ 215*cab87e9cSJagpal Singh Gill void createActiveAssociation(const std::string& path); 216*cab87e9cSJagpal Singh Gill 217*cab87e9cSJagpal Singh Gill /** @brief Removes the associations from the provided software image path 218*cab87e9cSJagpal Singh Gill * 219*cab87e9cSJagpal Singh Gill * @param[in] path - The path to remove the associations from. 220*cab87e9cSJagpal Singh Gill */ 221*cab87e9cSJagpal Singh Gill void removeAssociations(const std::string& path); 222*cab87e9cSJagpal Singh Gill 223*cab87e9cSJagpal Singh Gill /** @brief Determine if the given priority is the lowest 224*cab87e9cSJagpal Singh Gill * 225*cab87e9cSJagpal Singh Gill * @param[in] value - The priority that needs to be checked. 226*cab87e9cSJagpal Singh Gill * 227*cab87e9cSJagpal Singh Gill * @return boolean corresponding to whether the given 228*cab87e9cSJagpal Singh Gill * priority is lowest. 229*cab87e9cSJagpal Singh Gill */ 230*cab87e9cSJagpal Singh Gill bool isLowestPriority(uint8_t value); 231*cab87e9cSJagpal Singh Gill 232*cab87e9cSJagpal Singh Gill /** 233*cab87e9cSJagpal Singh Gill * @brief Updates the U-Boot variables to point to the requested 234*cab87e9cSJagpal Singh Gill * versionId, so that the systems boots from this version on 235*cab87e9cSJagpal Singh Gill * the next reboot. 236*cab87e9cSJagpal Singh Gill * 237*cab87e9cSJagpal Singh Gill * @param[in] versionId - The version to point the system to boot from. 238*cab87e9cSJagpal Singh Gill */ 239*cab87e9cSJagpal Singh Gill void updateUbootEnvVars(const std::string& versionId); 240*cab87e9cSJagpal Singh Gill 241*cab87e9cSJagpal Singh Gill /** 242*cab87e9cSJagpal Singh Gill * @brief Updates the uboot variables to point to BMC version with lowest 243*cab87e9cSJagpal Singh Gill * priority, so that the system boots from this version on the 244*cab87e9cSJagpal Singh Gill * next boot. 245*cab87e9cSJagpal Singh Gill */ 246*cab87e9cSJagpal Singh Gill void resetUbootEnvVars(); 247*cab87e9cSJagpal Singh Gill 248*cab87e9cSJagpal Singh Gill /** @brief Brings the total number of active BMC versions to 249*cab87e9cSJagpal Singh Gill * ACTIVE_BMC_MAX_ALLOWED -1. This function is intended to be 250*cab87e9cSJagpal Singh Gill * run before activating a new BMC version. If this function 251*cab87e9cSJagpal Singh Gill * needs to delete any BMC version(s) it will delete the 252*cab87e9cSJagpal Singh Gill * version(s) with the highest priority, skipping the 253*cab87e9cSJagpal Singh Gill * functional BMC version. 254*cab87e9cSJagpal Singh Gill * 255*cab87e9cSJagpal Singh Gill * @param[in] caller - The Activation object that called this function. 256*cab87e9cSJagpal Singh Gill */ 257*cab87e9cSJagpal Singh Gill void freeSpace(const Activation& caller); 258*cab87e9cSJagpal Singh Gill 259*cab87e9cSJagpal Singh Gill /** @brief Creates a updateable association to the 260*cab87e9cSJagpal Singh Gill * "running" BMC software image 261*cab87e9cSJagpal Singh Gill * 262*cab87e9cSJagpal Singh Gill * @param[in] path - The path to create the association. 263*cab87e9cSJagpal Singh Gill */ 264*cab87e9cSJagpal Singh Gill void createUpdateableAssociation(const std::string& path); 265*cab87e9cSJagpal Singh Gill 266*cab87e9cSJagpal Singh Gill /** @brief Persistent map of Version D-Bus objects and their 267*cab87e9cSJagpal Singh Gill * version id */ 268*cab87e9cSJagpal Singh Gill std::map<std::string, std::unique_ptr<VersionClass>> versions; 269*cab87e9cSJagpal Singh Gill 270*cab87e9cSJagpal Singh Gill /** @brief Vector of needed BMC images in the tarball*/ 271*cab87e9cSJagpal Singh Gill std::vector<std::string> imageUpdateList; 272*cab87e9cSJagpal Singh Gill 273*cab87e9cSJagpal Singh Gill /** @brief The slot of running BMC image */ 274*cab87e9cSJagpal Singh Gill uint32_t runningImageSlot = 0; 275*cab87e9cSJagpal Singh Gill 276*cab87e9cSJagpal Singh Gill /** @brief The type of updater. */ 277*cab87e9cSJagpal Singh Gill UpdaterType type; 278*cab87e9cSJagpal Singh Gill 279*cab87e9cSJagpal Singh Gill /** @brief Flag to indicate if the update interface is used or not */ 280*cab87e9cSJagpal Singh Gill bool useUpdateDBusInterface; 281*cab87e9cSJagpal Singh Gill 282*cab87e9cSJagpal Singh Gill private: 283*cab87e9cSJagpal Singh Gill /** @brief Callback function for Software.Version match. 284*cab87e9cSJagpal Singh Gill * @details Creates an Activation D-Bus object. 285*cab87e9cSJagpal Singh Gill * 286*cab87e9cSJagpal Singh Gill * @param[in] msg - Data associated with subscribed signal 287*cab87e9cSJagpal Singh Gill */ 288*cab87e9cSJagpal Singh Gill void createActivation(sdbusplus::message_t& msg); 289*cab87e9cSJagpal Singh Gill 290*cab87e9cSJagpal Singh Gill /** 291*cab87e9cSJagpal Singh Gill * @brief Validates the presence of SquashFS image in the image dir. 292*cab87e9cSJagpal Singh Gill * 293*cab87e9cSJagpal Singh Gill * @param[in] filePath - The path to the image dir. 294*cab87e9cSJagpal Singh Gill * @param[out] result - ActivationStatus Enum. 295*cab87e9cSJagpal Singh Gill * ready if validation was successful. 296*cab87e9cSJagpal Singh Gill * invalid if validation fail. 297*cab87e9cSJagpal Singh Gill * active if image is the current version. 298*cab87e9cSJagpal Singh Gill * 299*cab87e9cSJagpal Singh Gill */ 300*cab87e9cSJagpal Singh Gill ActivationStatus validateSquashFSImage(const std::string& filePath); 301*cab87e9cSJagpal Singh Gill 302*cab87e9cSJagpal Singh Gill /** @brief BMC factory reset - marks the read-write partition for 303*cab87e9cSJagpal Singh Gill * recreation upon reboot. */ 304*cab87e9cSJagpal Singh Gill void reset() override; 305*cab87e9cSJagpal Singh Gill 306*cab87e9cSJagpal Singh Gill /** 307*cab87e9cSJagpal Singh Gill * @brief Enables field mode, if value=true. 308*cab87e9cSJagpal Singh Gill * 309*cab87e9cSJagpal Singh Gill * @param[in] value - If true, enables field mode. 310*cab87e9cSJagpal Singh Gill * @param[out] result - Returns the current state of field mode. 311*cab87e9cSJagpal Singh Gill * 312*cab87e9cSJagpal Singh Gill */ 313*cab87e9cSJagpal Singh Gill bool fieldModeEnabled(bool value) override; 314*cab87e9cSJagpal Singh Gill 315*cab87e9cSJagpal Singh Gill /** @brief Sets the BMC inventory item path under 316*cab87e9cSJagpal Singh Gill * /xyz/openbmc_project/inventory/system/chassis/. */ 317*cab87e9cSJagpal Singh Gill void setBMCInventoryPath(); 318*cab87e9cSJagpal Singh Gill 319*cab87e9cSJagpal Singh Gill /** @brief The path to the BMC inventory item. */ 320*cab87e9cSJagpal Singh Gill std::string bmcInventoryPath; 321*cab87e9cSJagpal Singh Gill 322*cab87e9cSJagpal Singh Gill /** @brief Restores field mode status on reboot. */ 323*cab87e9cSJagpal Singh Gill void restoreFieldModeStatus(); 324*cab87e9cSJagpal Singh Gill 325*cab87e9cSJagpal Singh Gill /** @brief Creates a functional association to the 326*cab87e9cSJagpal Singh Gill * "running" BMC software image 327*cab87e9cSJagpal Singh Gill * 328*cab87e9cSJagpal Singh Gill * @param[in] path - The path to create the association to. 329*cab87e9cSJagpal Singh Gill */ 330*cab87e9cSJagpal Singh Gill void createFunctionalAssociation(const std::string& path); 331*cab87e9cSJagpal Singh Gill 332*cab87e9cSJagpal Singh Gill /** @brief D-Bus context */ 333*cab87e9cSJagpal Singh Gill sdbusplus::async::context& ctx; 334*cab87e9cSJagpal Singh Gill 335*cab87e9cSJagpal Singh Gill /** @brief Persistent sdbusplus D-Bus bus connection. */ 336*cab87e9cSJagpal Singh Gill sdbusplus::bus_t& bus; 337*cab87e9cSJagpal Singh Gill 338*cab87e9cSJagpal Singh Gill /** @brief The helper of image updater. */ 339*cab87e9cSJagpal Singh Gill Helper helper; 340*cab87e9cSJagpal Singh Gill 341*cab87e9cSJagpal Singh Gill /** @brief Persistent map of Activation D-Bus objects and their 342*cab87e9cSJagpal Singh Gill * version id */ 343*cab87e9cSJagpal Singh Gill std::map<std::string, std::unique_ptr<Activation>> activations; 344*cab87e9cSJagpal Singh Gill 345*cab87e9cSJagpal Singh Gill /** @brief sdbusplus signal match for Software.Version */ 346*cab87e9cSJagpal Singh Gill std::unique_ptr<sdbusplus::bus::match_t> versionMatch; 347*cab87e9cSJagpal Singh Gill 348*cab87e9cSJagpal Singh Gill /** @brief This entry's associations */ 349*cab87e9cSJagpal Singh Gill AssociationList assocs; 350*cab87e9cSJagpal Singh Gill 351*cab87e9cSJagpal Singh Gill /** @brief Clears read only partition for 352*cab87e9cSJagpal Singh Gill * given Activation D-Bus object. 353*cab87e9cSJagpal Singh Gill * 354*cab87e9cSJagpal Singh Gill * @param[in] versionId - The version id. 355*cab87e9cSJagpal Singh Gill */ 356*cab87e9cSJagpal Singh Gill void removeReadOnlyPartition(const std::string& versionId); 357*cab87e9cSJagpal Singh Gill 358*cab87e9cSJagpal Singh Gill /** @brief Copies U-Boot from the currently booted BMC chip to the 359*cab87e9cSJagpal Singh Gill * alternate chip. 360*cab87e9cSJagpal Singh Gill */ 361*cab87e9cSJagpal Singh Gill void mirrorUbootToAlt(); 362*cab87e9cSJagpal Singh Gill 363*cab87e9cSJagpal Singh Gill /** @brief Check the required image files 364*cab87e9cSJagpal Singh Gill * 365*cab87e9cSJagpal Singh Gill * @param[in] filePath - BMC tarball file path 366*cab87e9cSJagpal Singh Gill * @param[in] imageList - Image filenames included in the BMC tarball 367*cab87e9cSJagpal Singh Gill * @param[out] result - Boolean 368*cab87e9cSJagpal Singh Gill * true if all image files are found in BMC tarball 369*cab87e9cSJagpal Singh Gill * false if one of image files is missing 370*cab87e9cSJagpal Singh Gill */ 371*cab87e9cSJagpal Singh Gill static bool checkImage(const std::string& filePath, 372*cab87e9cSJagpal Singh Gill const std::vector<std::string>& imageList); 373*cab87e9cSJagpal Singh Gill 374*cab87e9cSJagpal Singh Gill /** @brief Persistent MinimumVersion D-Bus object */ 375*cab87e9cSJagpal Singh Gill std::unique_ptr<MinimumVersion> minimumVersionObject; 376*cab87e9cSJagpal Singh Gill 377*cab87e9cSJagpal Singh Gill /** @brief Persistent map of Update D-Bus objects and their SwIds */ 378*cab87e9cSJagpal Singh Gill std::map<std::string, std::unique_ptr<UpdateManager>> updateManagers; 379*cab87e9cSJagpal Singh Gill 380*cab87e9cSJagpal Singh Gill #ifdef HOST_BIOS_UPGRADE 381*cab87e9cSJagpal Singh Gill /** @brief Create the BIOS object without knowing the version. 382*cab87e9cSJagpal Singh Gill * 383*cab87e9cSJagpal Singh Gill * The object is created only to provide the DBus access so that an 384*cab87e9cSJagpal Singh Gill * external service could set the correct BIOS version. 385*cab87e9cSJagpal Singh Gill * On BIOS code update, the version is updated accordingly. 386*cab87e9cSJagpal Singh Gill */ 387*cab87e9cSJagpal Singh Gill void createBIOSObject(); 388*cab87e9cSJagpal Singh Gill 389*cab87e9cSJagpal Singh Gill /** @brief Persistent Activation D-Bus object for BIOS */ 390*cab87e9cSJagpal Singh Gill std::unique_ptr<Activation> biosActivation; 391*cab87e9cSJagpal Singh Gill 392*cab87e9cSJagpal Singh Gill public: 393*cab87e9cSJagpal Singh Gill /** @brief Persistent Version D-Bus object for BIOS */ 394*cab87e9cSJagpal Singh Gill std::unique_ptr<VersionClass> biosVersion; 395*cab87e9cSJagpal Singh Gill #endif 396*cab87e9cSJagpal Singh Gill 397*cab87e9cSJagpal Singh Gill /** @brief Get the slot number of running image */ 398*cab87e9cSJagpal Singh Gill void getRunningSlot(); 399*cab87e9cSJagpal Singh Gill }; 400*cab87e9cSJagpal Singh Gill 401*cab87e9cSJagpal Singh Gill } // namespace updater 402*cab87e9cSJagpal Singh Gill } // namespace software 403*cab87e9cSJagpal Singh Gill } // namespace phosphor 404