From 2c05aa76075c29297c23c4c6b5a3a956314eaf6a Mon Sep 17 00:00:00 2001 From: Matt Spinler Date: Tue, 28 Feb 2017 09:48:13 -0600 Subject: Add Target and Targeting classes These classes are used to target certain processors for operations. Change-Id: Iab7a9fc0f1b0a901963e4e899ded370435cfb418 Signed-off-by: Matt Spinler --- targeting.hpp | 137 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 targeting.hpp (limited to 'targeting.hpp') diff --git a/targeting.hpp b/targeting.hpp new file mode 100644 index 0000000..92c224e --- /dev/null +++ b/targeting.hpp @@ -0,0 +1,137 @@ +#pragma once + +#include +#include + +namespace openpower +{ +namespace targeting +{ + +constexpr auto fsiMasterDevPath = + "/sys/devices/platform/fsi-master/slave@00:00/raw"; + +constexpr auto fsiSlaveBaseDir = "/sys/devices/hub@00/"; + +/** + * Represents a specific P9 processor in the system. Used by + * the access APIs to specify the chip to operate on. + */ +class Target +{ + public: + + /** + * Constructor + * + * @param[in] - The logical position of the target + * @param[in] - The sysfs device path + */ + Target(size_t position, const std::string& devPath) : + pos(position), path(devPath) + { + } + + Target() = delete; + ~Target() = default; + Target(const Target&) = default; + Target(Target&&) = default; + Target& operator=(Target&&) = default; + + /** + * Returns the position + */ + inline auto getPos() const + { + return pos; + } + + /** + * Returns the path + */ + inline auto getPath() const + { + return path; + } + + private: + + /** + * The logical position of this target + */ + size_t pos; + + /** + * The sysfs device path + */ + const std::string path; +}; + + +/** + * Class that manages processor targeting for FSI operations. + */ +class Targeting +{ + public: + + /** + * Scans sysfs to find all processors and creates Target objects + * for them. + * @param[in] fsiMasterDev - the sysfs device for the master + * @param[in] fsiSlaveDirectory - the base sysfs dir for slaves + */ + Targeting(const std::string& fsiMasterDev, + const std::string& fsiSlaveDir); + + Targeting() : Targeting(fsiMasterDevPath, fsiSlaveBaseDir) {} + + ~Targeting() = default; + Targeting(const Targeting&) = default; + Targeting(Targeting&&) = default; + Targeting& operator=(Targeting&&) = default; + + /** + * Returns a const iterator to the first target + */ + inline auto begin() + { + return targets.cbegin(); + } + + /** + * Returns a const iterator to the last (highest position) target. + */ + inline auto end() + { + return targets.cend(); + } + + /** + * Returns the number of targets + */ + inline auto size() + { + return targets.size(); + } + + private: + + /** + * The path to the fsi-master sysfs device to access + */ + const std::string fsiMasterPath; + + /** + * The path to the fsi slave sysfs base directory + */ + const std::string fsiSlaveBasePath; + + /** + * A container of Targets in the system + */ + std::vector> targets; +}; + +} +} -- cgit v1.2.1