Functions to add nodes and regs to IsolationChip class
Change-Id: I3361f23f795b9015235add237bf5a78bd8afa861
Signed-off-by: Zane Shelley <zshelle@us.ibm.com>
diff --git a/src/isolator/hei_isolation_chip.hpp b/src/isolator/hei_isolation_chip.hpp
index 4fabea1..cb41353 100644
--- a/src/isolator/hei_isolation_chip.hpp
+++ b/src/isolator/hei_isolation_chip.hpp
@@ -2,6 +2,7 @@
#include <hei_isolation_data.hpp>
#include <isolator/hei_isolation_node.hpp>
+#include <register/hei_hardware_register.hpp>
namespace libhei
{
@@ -46,6 +47,14 @@
/** This chip's type. */
const ChipType_t iv_chipType;
+ /** All hardware registers for this chip type. */
+ using RegisterKey_t = std::pair<RegisterId_t, Instance_t>;
+ std::map<RegisterKey_t, const HardwareRegisterPtr> iv_regs;
+
+ /** All isolation nodes for this chip type. */
+ using NodeKey_t = std::pair<NodeId_t, Instance_t>;
+ std::map<NodeKey_t, const IsolationNodePtr> iv_nodes;
+
/** Root nodes for this chip type. */
std::map<AttentionType_t, const IsolationNodePtr> iv_rootNodes;
@@ -68,16 +77,46 @@
}
/**
+ * @brief Adds a hardware register to this chip.
+ * @param i_hwReg The target hardware register. Will assert that a different
+ * register with the same ID and instance does not exist.
+ */
+ void addHardwareRegister(HardwareRegisterPtr i_hwReg);
+
+ /**
+ * @brief Adds an isolation node to this chip.
+ * @param i_isoNode The target isolation node. Will assert that a different
+ * node with the same ID and instance does not exist.
+ */
+ void addIsolationNode(IsolationNodePtr i_isoNode);
+
+ /**
* @brief Adds a root node to this chip.
* @param i_attnType The target attention type. Will assert this type does
* not already exist in iv_rootNodes.
- * @param i_node The target isolation node for this attention type.
+ * @param i_rootNode The target isolation node for this attention type.
*/
- void addRootNode(AttentionType_t i_attnType, IsolationNodePtr i_node)
- {
- auto ret = iv_rootNodes.emplace(i_attnType, i_node);
- HEI_ASSERT(ret.second); // Should have not already existed.
- }
+ void addRootNode(AttentionType_t i_attnType, IsolationNodePtr i_rootNode);
+
+ /**
+ * @brief Retrieves a hardware register from this chip, if it exists.
+ * @param i_regId The register ID.
+ * @param i_regInst The register instance.
+ * @return The target hardware register. Will assert that the target
+ * register exists in iv_regs.
+ */
+ HardwareRegisterPtr getHardwareRegister(RegisterId_t i_regId,
+ Instance_t i_regInst) const;
+
+ /**
+ * @brief Retrieves an isolation node from this chip, if it exists.
+ * @param i_nodeId The node ID.
+ * @param i_nodeInst The node instance.
+ * @return The target isolation node. Will assert that the target node
+ * exists in iv_nodes.
+ */
+ IsolationNodePtr getIsolationNode(NodeId_t i_nodeId,
+ Instance_t i_nodeInst) const;
};
/** A simple map to ensure only one IsolationChip exists per chip type. */