diff options
Diffstat (limited to 'src/kernel/intmsghandler.C')
-rw-r--r-- | src/kernel/intmsghandler.C | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/src/kernel/intmsghandler.C b/src/kernel/intmsghandler.C index a2f2fb096..538d322ae 100644 --- a/src/kernel/intmsghandler.C +++ b/src/kernel/intmsghandler.C @@ -5,7 +5,7 @@ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 2011,2012 */ +/* COPYRIGHT International Business Machines Corp. 2011,2013 */ /* */ /* p1 */ /* */ @@ -76,7 +76,7 @@ void InterruptMsgHdlr::handleInterrupt() if( cv_ipc_base_address != 0 ) { - uint64_t xirrAddress = cv_ipc_base_address; + uint64_t xirrAddress = cv_ipc_base_address; xirrAddress += mmio_offset(pir); // Add offset for this cpu xirrAddress += XIRR_ADDR_OFFSET; // Add offset for XIRR register @@ -144,6 +144,19 @@ void InterruptMsgHdlr::addCpuCore(uint64_t i_pir) } } +void InterruptMsgHdlr::sendIPI(uint64_t i_pir) +{ + uint64_t mfrrAddress = cv_ipc_base_address; + mfrrAddress += mmio_offset(i_pir); + mfrrAddress += MFRR_ADDR_OFFSET; + + register uint8_t data = 0; + + eieio(); sync(); + MAGIC_INSTRUCTION(MAGIC_SIMICS_CORESTATESAVE); + asm volatile("stbcix %0,0,%1" :: "r" (data) , "r" (mfrrAddress)); +} + MessageHandler::HandleResult InterruptMsgHdlr::handleResponse ( msg_sys_types_t i_type, |