xref: /openbmc/estoraged/include/util.hpp (revision b4838308)
1 #pragma once
2 #include "getConfig.hpp"
3 
4 #include <filesystem>
5 #include <string>
6 
7 namespace estoraged
8 {
9 namespace util
10 {
11 
12 /** @brief finds the size of the linux block device in bytes
13  *  @param[in] devpath - the name of the linux block device
14  *  @return size of a block device using the devPath
15  */
16 uint64_t findSizeOfBlockDevice(const std::string& devPath);
17 
18 /** @brief finds the predicted life left for a eMMC device
19  *  @param[in] sysfsPath - The path to the linux sysfs interface
20  *  @return the life remaing for the emmc, as a percentage.
21  */
22 uint8_t findPredictedMediaLifeLeftPercent(const std::string& sysfsPath);
23 
24 /** @brief Get the part number (aka part name) for the storage device
25  *  @param[in] sysfsPath - The path to the linux sysfs interface.
26  *  @return part name as a string (or "unknown" if it couldn't be retrieved)
27  */
28 std::string getPartNumber(const std::filesystem::path& sysfsPath);
29 
30 /** @brief Get the serial number for the storage device
31  *  @param[in] sysfsPath - The path to the linux sysfs interface.
32  *  @return serial name as a string (or "unknown" if it couldn't be retrieved)
33  */
34 std::string getSerialNumber(const std::filesystem::path& sysfsPath);
35 
36 /** @brief Look for the device described by the provided StorageData.
37  *  @details Currently, this function assumes that there's only one eMMC.
38  *    When we need to support multiple eMMCs, we will put more information in
39  *    the EntityManager config, to differentiate between them. Also, if we
40  *    want to support other types of storage devices, this function will need
41  *    to be updated.
42  *
43  *  @param[in] data - map of properties from the config object.
44  *  @param[in] searchDir - directory to search for devices in sysfs, e.g.
45  *    /sys/block
46  *  @param[out] deviceFile - device file that was found, e.g. /dev/mmcblk0.
47  *  @param[out] sysfsDir - directory containing the sysfs entries for this
48  *    device.
49  *  @param[out] luksName - name of the encrypted LUKS device.
50  *
51  *  @return True if the device was found. False otherwise.
52  */
53 bool findDevice(const StorageData& data, const std::filesystem::path& searchDir,
54                 std::filesystem::path& deviceFile,
55                 std::filesystem::path& sysfsDir, std::string& luksName);
56 
57 } // namespace util
58 
59 } // namespace estoraged
60