summaryrefslogtreecommitdiffstats
path: root/targeting.hpp
diff options
context:
space:
mode:
authorMatt Spinler <spinler@us.ibm.com>2017-02-28 09:48:13 -0600
committerMatt Spinler <spinler@us.ibm.com>2017-03-14 13:21:34 -0500
commit2c05aa76075c29297c23c4c6b5a3a956314eaf6a (patch)
tree8a950e29b46651a1f58c4a036dd69a8c2c7e49d7 /targeting.hpp
parentf716f32ab2b6007de5a0f5196d3c4a7e5b6fc6cc (diff)
downloadopenpower-proc-control-2c05aa76075c29297c23c4c6b5a3a956314eaf6a.tar.gz
openpower-proc-control-2c05aa76075c29297c23c4c6b5a3a956314eaf6a.zip
Add Target and Targeting classes
These classes are used to target certain processors for operations. Change-Id: Iab7a9fc0f1b0a901963e4e899ded370435cfb418 Signed-off-by: Matt Spinler <spinler@us.ibm.com>
Diffstat (limited to 'targeting.hpp')
-rw-r--r--targeting.hpp137
1 files changed, 137 insertions, 0 deletions
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 <memory>
+#include <vector>
+
+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<std::unique_ptr<Target>> targets;
+};
+
+}
+}
OpenPOWER on IntegriCloud