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 SMP cpu_possible_map
  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(cpumask_t callmap);
  57
  58/*
  59 * Broadcast a timer interrupt to the other CPUs.
  60 */
  61extern void smp_send_timer(void);
  62
  63/*
  64 * Broadcast a clock event to other CPUs.
  65 */
  66extern void smp_timer_broadcast(cpumask_t mask);
  67
  68/*
  69 * Boot a secondary CPU, and assign it the specified idle task.
  70 * This also gives us the initial stack to use for this CPU.
  71 */
  72extern int boot_secondary(unsigned int cpu, struct task_struct *);
  73
  74/*
  75 * Called from platform specific assembly code, this is the
  76 * secondary CPU entry point.
  77 */
  78asmlinkage void secondary_start_kernel(void);
  79
  80/*
  81 * Perform platform specific initialisation of the specified CPU.
  82 */
  83extern void platform_secondary_init(unsigned int cpu);
  84
  85/*
  86 * Initial data for bringing up a secondary CPU.
  87 */
  88struct secondary_data {
  89        unsigned long pgdir;
  90        void *stack;
  91};
  92extern struct secondary_data secondary_data;
  93
  94extern int __cpu_disable(void);
  95extern int mach_cpu_disable(unsigned int cpu);
  96
  97extern void __cpu_die(unsigned int cpu);
  98extern void cpu_die(void);
  99
 100extern void platform_cpu_die(unsigned int cpu);
 101extern int platform_cpu_kill(unsigned int cpu);
 102extern void platform_cpu_enable(unsigned int cpu);
 103
 104extern void arch_send_call_function_single_ipi(int cpu);
 105extern void arch_send_call_function_ipi(cpumask_t mask);
 106
 107/*
 108 * Local timer interrupt handling function (can be IPI'ed).
 109 */
 110extern void local_timer_interrupt(void);
 111
 112#ifdef CONFIG_LOCAL_TIMERS
 113
 114/*
 115 * Stop a local timer interrupt.
 116 */
 117extern void local_timer_stop(unsigned int cpu);
 118
 119/*
 120 * Platform provides this to acknowledge a local timer IRQ
 121 */
 122extern int local_timer_ack(void);
 123
 124#else
 125
 126static inline void local_timer_stop(unsigned int cpu)
 127{
 128}
 129
 130#endif
 131
 132/*
 133 * Setup a local timer interrupt for a CPU.
 134 */
 135extern void local_timer_setup(unsigned int cpu);
 136
 137/*
 138 * show local interrupt info
 139 */
 140extern void show_local_irqs(struct seq_file *);
 141
 142/*
 143 * Called from assembly, this is the local timer IRQ handler
 144 */
 145asmlinkage void do_local_timer(struct pt_regs *);
 146
 147#endif /* ifndef __ASM_ARM_SMP_H */
 148
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.