Ralf Baechle | 940f6b4 | 2007-11-24 22:33:28 +0000 | [diff] [blame] | 1 | /* |
| 2 | * This file is subject to the terms and conditions of the GNU General Public |
| 3 | * License. See the file "COPYING" in the main directory of this archive |
| 4 | * for more details. |
| 5 | * |
| 6 | * Copyright (C) 2006, 07 by Ralf Baechle (ralf@linux-mips.org) |
| 7 | * |
| 8 | * Symmetric Uniprocessor (TM) Support |
| 9 | */ |
| 10 | #include <linux/kernel.h> |
| 11 | #include <linux/sched.h> |
| 12 | |
| 13 | /* |
| 14 | * Send inter-processor interrupt |
| 15 | */ |
Dmitri Vorobiev | 1451a39 | 2009-03-23 00:12:28 +0200 | [diff] [blame] | 16 | static void up_send_ipi_single(int cpu, unsigned int action) |
Ralf Baechle | 940f6b4 | 2007-11-24 22:33:28 +0000 | [diff] [blame] | 17 | { |
| 18 | panic(KERN_ERR "%s called", __func__); |
| 19 | } |
| 20 | |
| 21 | static inline void up_send_ipi_mask(cpumask_t mask, unsigned int action) |
| 22 | { |
| 23 | panic(KERN_ERR "%s called", __func__); |
| 24 | } |
| 25 | |
| 26 | /* |
| 27 | * After we've done initial boot, this function is called to allow the |
| 28 | * board code to clean up state, if needed |
| 29 | */ |
Dmitri Vorobiev | 1451a39 | 2009-03-23 00:12:28 +0200 | [diff] [blame] | 30 | static void __cpuinit up_init_secondary(void) |
Ralf Baechle | 940f6b4 | 2007-11-24 22:33:28 +0000 | [diff] [blame] | 31 | { |
| 32 | } |
| 33 | |
Dmitri Vorobiev | 1451a39 | 2009-03-23 00:12:28 +0200 | [diff] [blame] | 34 | static void __cpuinit up_smp_finish(void) |
Ralf Baechle | 940f6b4 | 2007-11-24 22:33:28 +0000 | [diff] [blame] | 35 | { |
| 36 | } |
| 37 | |
| 38 | /* Hook for after all CPUs are online */ |
Dmitri Vorobiev | 1451a39 | 2009-03-23 00:12:28 +0200 | [diff] [blame] | 39 | static void up_cpus_done(void) |
Ralf Baechle | 940f6b4 | 2007-11-24 22:33:28 +0000 | [diff] [blame] | 40 | { |
| 41 | } |
| 42 | |
| 43 | /* |
| 44 | * Firmware CPU startup hook |
| 45 | */ |
Dmitri Vorobiev | 1451a39 | 2009-03-23 00:12:28 +0200 | [diff] [blame] | 46 | static void __cpuinit up_boot_secondary(int cpu, struct task_struct *idle) |
Ralf Baechle | 940f6b4 | 2007-11-24 22:33:28 +0000 | [diff] [blame] | 47 | { |
| 48 | } |
| 49 | |
Dmitri Vorobiev | 1451a39 | 2009-03-23 00:12:28 +0200 | [diff] [blame] | 50 | static void __init up_smp_setup(void) |
Ralf Baechle | 940f6b4 | 2007-11-24 22:33:28 +0000 | [diff] [blame] | 51 | { |
| 52 | } |
| 53 | |
Dmitri Vorobiev | 1451a39 | 2009-03-23 00:12:28 +0200 | [diff] [blame] | 54 | static void __init up_prepare_cpus(unsigned int max_cpus) |
Ralf Baechle | 940f6b4 | 2007-11-24 22:33:28 +0000 | [diff] [blame] | 55 | { |
| 56 | } |
| 57 | |
Ralf Baechle | 1b2bc75 | 2009-06-23 10:00:31 +0100 | [diff] [blame] | 58 | #ifdef CONFIG_HOTPLUG_CPU |
| 59 | static int up_cpu_disable(void) |
| 60 | { |
| 61 | return -ENOSYS; |
| 62 | } |
| 63 | |
| 64 | static void up_cpu_die(unsigned int cpu) |
| 65 | { |
| 66 | BUG(); |
| 67 | } |
| 68 | #endif |
| 69 | |
Ralf Baechle | 940f6b4 | 2007-11-24 22:33:28 +0000 | [diff] [blame] | 70 | struct plat_smp_ops up_smp_ops = { |
| 71 | .send_ipi_single = up_send_ipi_single, |
| 72 | .send_ipi_mask = up_send_ipi_mask, |
| 73 | .init_secondary = up_init_secondary, |
| 74 | .smp_finish = up_smp_finish, |
| 75 | .cpus_done = up_cpus_done, |
| 76 | .boot_secondary = up_boot_secondary, |
| 77 | .smp_setup = up_smp_setup, |
| 78 | .prepare_cpus = up_prepare_cpus, |
Ralf Baechle | 1b2bc75 | 2009-06-23 10:00:31 +0100 | [diff] [blame] | 79 | #ifdef CONFIG_HOTPLUG_CPU |
| 80 | .cpu_disable = up_cpu_disable, |
| 81 | .cpu_die = up_cpu_die, |
| 82 | #endif |
Ralf Baechle | 940f6b4 | 2007-11-24 22:33:28 +0000 | [diff] [blame] | 83 | }; |