diff options
Diffstat (limited to 'src/usr/intr/intrrp.C')
-rw-r--r-- | src/usr/intr/intrrp.C | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/usr/intr/intrrp.C b/src/usr/intr/intrrp.C index 8838d22cf..11339dbc6 100644 --- a/src/usr/intr/intrrp.C +++ b/src/usr/intr/intrrp.C @@ -1619,6 +1619,7 @@ void IntrRp::cleanCheck() } } + //---------------------------------------------------------------------------- // External interfaces //---------------------------------------------------------------------------- @@ -1831,3 +1832,20 @@ errlHndl_t INTR::enablePsiIntr(TARGETING::Target * i_target) return err; } +uint64_t INTR::getIntpAddr(const TARGETING::Target * i_ex, uint8_t i_thread) +{ + const TARGETING::Target * l_proc = getParentChip(i_ex); + uint64_t l_intB =l_proc->getAttr<TARGETING::ATTR_INTP_BASE_ADDR>(); + + PIR_t pir(0); + pir.nodeId = l_proc->getAttr<TARGETING::ATTR_FABRIC_NODE_ID>(); + pir.chipId = l_proc->getAttr<TARGETING::ATTR_FABRIC_CHIP_ID>(); + pir.coreId = i_ex->getAttr<TARGETING::ATTR_CHIP_UNIT>(); + pir.threadId = i_thread; + + return (l_intB+ InterruptMsgHdlr::mmio_offset( + pir.word & (InterruptMsgHdlr::P8_PIR_THREADID_MSK | + InterruptMsgHdlr::P8_PIR_COREID_MSK))); +} + + |