| /* |
| * Author: Kumar Gala <galak@kernel.crashing.org> |
| * |
| * Copyright 2009 Freescale Semiconductor Inc. |
| * |
| * This program is free software; you can redistribute it and/or modify it |
| * under the terms of the GNU General Public License as published by the |
| * Free Software Foundation; either version 2 of the License, or (at your |
| * option) any later version. |
| */ |
| |
| #include <linux/stddef.h> |
| #include <linux/kernel.h> |
| #include <linux/smp.h> |
| #include <linux/threads.h> |
| |
| #include <asm/dbell.h> |
| |
| #ifdef CONFIG_SMP |
| unsigned long dbell_smp_message[NR_CPUS]; |
| |
| void smp_dbell_message_pass(int target, int msg) |
| { |
| int i; |
| |
| if(target < NR_CPUS) { |
| set_bit(msg, &dbell_smp_message[target]); |
| ppc_msgsnd(PPC_DBELL, 0, target); |
| } |
| else if(target == MSG_ALL_BUT_SELF) { |
| for_each_online_cpu(i) { |
| if (i == smp_processor_id()) |
| continue; |
| set_bit(msg, &dbell_smp_message[i]); |
| ppc_msgsnd(PPC_DBELL, 0, i); |
| } |
| } |
| else { /* target == MSG_ALL */ |
| for_each_online_cpu(i) |
| set_bit(msg, &dbell_smp_message[i]); |
| ppc_msgsnd(PPC_DBELL, PPC_DBELL_MSG_BRDCAST, 0); |
| } |
| } |
| #endif |