smp.c (42249094f79422fbf5ed4b54eeb48ff096809b8f) smp.c (310ff2c87e72208e4f04f33687abe9d208ffefe3)
1/*
2 * Copyright (C) 2001, 2002, 2003 Broadcom Corporation
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version 2
7 * of the License, or (at your option) any later version.
8 *

--- 156 unchanged lines hidden (view full) ---

165};
166
167void sb1250_mailbox_interrupt(void)
168{
169 int cpu = smp_processor_id();
170 int irq = K_INT_MBOX_0;
171 unsigned int action;
172
1/*
2 * Copyright (C) 2001, 2002, 2003 Broadcom Corporation
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version 2
7 * of the License, or (at your option) any later version.
8 *

--- 156 unchanged lines hidden (view full) ---

165};
166
167void sb1250_mailbox_interrupt(void)
168{
169 int cpu = smp_processor_id();
170 int irq = K_INT_MBOX_0;
171 unsigned int action;
172
173 kstat_incr_irqs_this_cpu(irq, irq_to_desc(irq));
173 kstat_incr_irq_this_cpu(irq);
174 /* Load the mailbox register to figure out what we're supposed to do */
175 action = (____raw_readq(mailbox_regs[cpu]) >> 48) & 0xffff;
176
177 /* Clear the mailbox to clear the interrupt */
178 ____raw_writeq(((u64)action) << 48, mailbox_clear_regs[cpu]);
179
180 if (action & SMP_RESCHEDULE_YOURSELF)
181 scheduler_ipi();
182
183 if (action & SMP_CALL_FUNCTION)
184 smp_call_function_interrupt();
185}
174 /* Load the mailbox register to figure out what we're supposed to do */
175 action = (____raw_readq(mailbox_regs[cpu]) >> 48) & 0xffff;
176
177 /* Clear the mailbox to clear the interrupt */
178 ____raw_writeq(((u64)action) << 48, mailbox_clear_regs[cpu]);
179
180 if (action & SMP_RESCHEDULE_YOURSELF)
181 scheduler_ipi();
182
183 if (action & SMP_CALL_FUNCTION)
184 smp_call_function_interrupt();
185}