linux/arch/arm/include/asm/smp.h
<<
>>
Prefs
   1/*
   2 *  arch/arm/include/asm/smp.h
   3 *
   4 *  Copyright (C) 2004-2005 ARM Ltd.
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License version 2 as
   8 * published by the Free Software Foundation.
   9 */
  10#ifndef __ASM_ARM_SMP_H
  11#define __ASM_ARM_SMP_H
  12
  13#include <linux/threads.h>
  14#include <linux/cpumask.h>
  15#include <linux/thread_info.h>
  16
  17#include <mach/smp.h>
  18
  19#ifndef CONFIG_SMP
  20# error "<asm/smp.h> included in non-SMP build"
  21#endif
  22
  23#define raw_smp_processor_id() (current_thread_info()->cpu)
  24
  25/*
  26 * at the moment, there's not a big penalty for changing CPUs
  27 * (the >big< penalty is running SMP in the first place)
  28 */
  29#define PROC_CHANGE_PENALTY             15
  30
  31struct seq_file;
  32
  33/*
  34 * generate IPI list text
  35 */
  36extern void show_ipi_list(struct seq_file *p);
  37
  38/*
  39 * Called from assembly code, this handles an IPI.
  40 */
  41asmlinkage void do_IPI(struct pt_regs *regs);
  42
  43/*
  44 * Setup the set of possible CPUs (via set_cpu_possible)
  45 */
  46extern void smp_init_cpus(void);
  47
  48/*
  49 * Move global data into per-processor storage.
  50 */
  51extern void smp_store_cpu_info(unsigned int cpuid);
  52
  53/*
  54 * Raise an IPI cross call on CPUs in callmap.
  55 */
  56extern void smp_cross_call(const struct cpumask *mask);
  57
  58/*
  59 * Boot a secondary CPU, and assign it the specified idle task.
  60 * This also gives us the initial stack to use for this CPU.
  61 */
  62extern int boot_secondary(unsigned int cpu, struct task_struct *);
  63
  64/*
  65 * Called from platform specific assembly code, this is the
  66 * secondary CPU entry point.
  67 */
  68asmlinkage void secondary_start_kernel(void);
  69
  70/*
  71 * Perform platform specific initialisation of the specified CPU.
  72 */
  73extern void platform_secondary_init(unsigned int cpu);
  74
  75/*
  76 * Initial data for bringing up a secondary CPU.
  77 */
  78struct secondary_data {
  79        unsigned long pgdir;
  80        void *stack;
  81};
  82extern struct secondary_data secondary_data;
  83
  84extern int __cpu_disable(void);
  85extern int mach_cpu_disable(unsigned int cpu);
  86
  87extern void __cpu_die(unsigned int cpu);
  88extern void cpu_die(void);
  89
  90extern void platform_cpu_die(unsigned int cpu);
  91extern int platform_cpu_kill(unsigned int cpu);
  92extern void platform_cpu_enable(unsigned int cpu);
  93
  94extern void arch_send_call_function_single_ipi(int cpu);
  95extern void arch_send_call_function_ipi_mask(const struct cpumask *mask);
  96
  97/*
  98 * show local interrupt info
  99 */
 100extern void show_local_irqs(struct seq_file *);
 101
 102#endif /* ifndef __ASM_ARM_SMP_H */
 103