Initial end-to-end simulation support
Change-Id: Ifcdfb8e0ee3e40b9071ade2ff5dcab5037ec7887
Signed-off-by: Zane Shelley <zshelle@us.ibm.com>
diff --git a/src/isolator/hei_isolator.cpp b/src/isolator/hei_isolator.cpp
index 759eb13..68dda7d 100644
--- a/src/isolator/hei_isolator.cpp
+++ b/src/isolator/hei_isolator.cpp
@@ -5,6 +5,7 @@
#include <util/hei_flyweight.hpp>
// BEGIN temporary code
+#include <isolator/hei_isolation_node.hpp>
#include <register/hei_scom_register.hpp>
// END temporary code
@@ -20,18 +21,28 @@
HEI_INF("Isolator::initialize(%p,%lu,%d)", i_buffer, i_bufferSize,
i_forceInit);
- Flyweight<ScomRegister>& sfw = Flyweight<ScomRegister>::getSingleton();
- Flyweight<IdScomRegister>& ifw = Flyweight<IdScomRegister>::getSingleton();
+ auto& scom_fw = Flyweight<ScomRegister>::getSingleton();
+ auto& idScom_fw = Flyweight<IdScomRegister>::getSingleton();
+ auto& isoNode_fw = Flyweight<IsolationNode>::getSingleton();
- sfw.get(ScomRegister{CHIP_TYPE_INVALID, REG_ID_INVALID, REG_INST_DEFAULT,
- REG_ACCESS_RW, 0x01234567});
- sfw.get(ScomRegister{CHIP_TYPE_INVALID, REG_ID_INVALID, REG_INST_DEFAULT,
- REG_ACCESS_RW, 0x00112233});
+ auto& idScom0 = idScom_fw.get(IdScomRegister{
+ static_cast<ChipType_t>(0xdeadbeef), static_cast<RegisterId_t>(0x1111),
+ REG_INST_DEFAULT, REG_ACCESS_RW, 0x80000000FF000000});
- ifw.get(IdScomRegister{CHIP_TYPE_INVALID, REG_ID_INVALID, REG_INST_DEFAULT,
- REG_ACCESS_RW, 0x0123456789abcdef});
- ifw.get(IdScomRegister{CHIP_TYPE_INVALID, REG_ID_INVALID, REG_INST_DEFAULT,
- REG_ACCESS_RW, 0x0011223344556677});
+ auto& scom0 = scom_fw.get(ScomRegister{
+ static_cast<ChipType_t>(0xdeadbeef), static_cast<RegisterId_t>(0x2222),
+ REG_INST_DEFAULT, REG_ACCESS_RW, 0x00FF0000});
+
+ auto& node0 = isoNode_fw.get(IsolationNode{idScom0});
+ auto& node1 = isoNode_fw.get(IsolationNode{scom0});
+
+ node0.addRule(ATTN_TYPE_CHECKSTOP, &idScom0);
+ node0.addChild(48, &node1);
+
+ node1.addRule(ATTN_TYPE_CHECKSTOP, &scom0);
+
+ iv_isoStart[static_cast<ChipType_t>(0xdeadbeef)].push_back(
+ {&node0, ATTN_TYPE_CHECKSTOP});
// END temporary code
return rc;
@@ -68,6 +79,23 @@
{
// BEGIN temporary code
HEI_INF("Isolator::isolate(%p,%u)", chip.getChip(), chip.getType());
+
+ // Isolation objects for this chip's type must exist.
+ const auto& chip_itr = iv_isoStart.find(chip.getType());
+ HEI_ASSERT(iv_isoStart.end() != chip_itr);
+
+ for (const auto& pair : chip_itr->second)
+ {
+ if (pair.first->analyze(chip, pair.second, o_isoData))
+ {
+ for (const auto& sig : o_isoData.getSignatureList())
+ {
+ HEI_INF("Signature(%p,0x%x,0x%x,0x%x,0x%x)",
+ sig.getChip().getChip(), sig.getId(),
+ sig.getInstance(), sig.getBit(), sig.getAttnType());
+ }
+ }
+ }
// END temporary code
}