summaryrefslogtreecommitdiffstats
path: root/src/kernel/intmsghandler.C
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel/intmsghandler.C')
-rw-r--r--src/kernel/intmsghandler.C17
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,
OpenPOWER on IntegriCloud