/** * Copyright © 2019 IBM Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once #include "pmbus.hpp" #include #include #include #include #include namespace version { namespace utils { // PsuInfo contains the device path, pmbus read type, and the version string using PsuVersionInfo = std::tuple; // PsuI2cInfo contains the device i2c bus and i2c address using PsuI2cInfo = std::tuple; /** * @brief Get PSU version information * * @param[in] psuInventoryPath - The PSU inventory path. * * @return tuple - device path, pmbus read type and PSU version */ PsuVersionInfo getVersionInfo(const std::string& psuInventoryPath); /** * @brief Get firmware latest version * * @param[in] versions - String of versions * * @return version - latest firmware level */ std::string getLatestDefault(const std::vector& versions); /** * @brief Get i2c bus and address * * @param[in] bus - Systemd bus connection * @param[in] psuInventoryPath - The PSU inventory path. * * @return tuple - i2cBus and i2cAddr. */ PsuI2cInfo getPsuI2c(sdbusplus::bus_t& bus, const std::string& psuInventoryPath); /** * @brief Get PMBus interface pointer * * @param[in] i2cBus - PSU i2c bus * @param[in] i2cAddr - PSU i2c address * * @return Pointer to PSU PMBus interface */ std::unique_ptr getPmbusIntf(std::uint64_t i2cBus, std::uint64_t i2cAddr); /** * @brief Reads a VPD value from PMBus, corrects size, and contents. * * If the VPD data read is not the passed in size, resize and fill with * spaces. If the data contains a non-alphanumeric value, replace any of * those values with spaces. * * @param[in] pmbusIntf - PMBus Interface. * @param[in] vpdName - The name of the sysfs "file" to read data from. * @param[in] type - The HWMON file type to read from. * @param[in] vpdSize - The expected size of the data for this VPD/property * * @return A string containing the VPD data read, resized if necessary */ std::string readVPDValue(phosphor::pmbus::PMBusBase& pmbusIntf, const std::string& vpdName, const phosphor::pmbus::Type& type, const std::size_t& vpdSize); /** * @brief Check for file existence * * @param[in] filePath - File path * * @return bool */ bool checkFileExists(const std::string& filePath); } // namespace utils /** * Get the software version of the PSU using sysfs * * @param[in] bus - Systemd bus connection * @param[in] psuInventoryPath - The inventory path of the PSU * * @return The version of the PSU */ std::string getVersion(sdbusplus::bus_t& bus, const std::string& psuInventoryPath); /** * Get the software version of the PSU using psu.json * * @param[in] psuInventoryPath - The inventory path of the PSU * * @return The version of the PSU */ std::string getVersion(const std::string& psuInventoryPath); /** * Get the latest version from a list of versions * * @param[in] versions - The list of PSU version strings * * @return The latest version */ std::string getLatest(const std::vector& versions); } // namespace version