home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / arm / include / asm / smp.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  3.1 KB  |  148 lines

  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.  
  31. struct seq_file;
  32.  
  33. /*
  34.  * generate IPI list text
  35.  */
  36. extern void show_ipi_list(struct seq_file *p);
  37.  
  38. /*
  39.  * Called from assembly code, this handles an IPI.
  40.  */
  41. asmlinkage void do_IPI(struct pt_regs *regs);
  42.  
  43. /*
  44.  * Setup the SMP cpu_possible_map
  45.  */
  46. extern void smp_init_cpus(void);
  47.  
  48. /*
  49.  * Move global data into per-processor storage.
  50.  */
  51. extern void smp_store_cpu_info(unsigned int cpuid);
  52.  
  53. /*
  54.  * Raise an IPI cross call on CPUs in callmap.
  55.  */
  56. extern void smp_cross_call(cpumask_t callmap);
  57.  
  58. /*
  59.  * Broadcast a timer interrupt to the other CPUs.
  60.  */
  61. extern void smp_send_timer(void);
  62.  
  63. /*
  64.  * Broadcast a clock event to other CPUs.
  65.  */
  66. extern 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.  */
  72. extern 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.  */
  78. asmlinkage void secondary_start_kernel(void);
  79.  
  80. /*
  81.  * Perform platform specific initialisation of the specified CPU.
  82.  */
  83. extern void platform_secondary_init(unsigned int cpu);
  84.  
  85. /*
  86.  * Initial data for bringing up a secondary CPU.
  87.  */
  88. struct secondary_data {
  89.     unsigned long pgdir;
  90.     void *stack;
  91. };
  92. extern struct secondary_data secondary_data;
  93.  
  94. extern int __cpu_disable(void);
  95. extern int mach_cpu_disable(unsigned int cpu);
  96.  
  97. extern void __cpu_die(unsigned int cpu);
  98. extern void cpu_die(void);
  99.  
  100. extern void platform_cpu_die(unsigned int cpu);
  101. extern int platform_cpu_kill(unsigned int cpu);
  102. extern void platform_cpu_enable(unsigned int cpu);
  103.  
  104. extern void arch_send_call_function_single_ipi(int cpu);
  105. extern void arch_send_call_function_ipi(cpumask_t mask);
  106.  
  107. /*
  108.  * Local timer interrupt handling function (can be IPI'ed).
  109.  */
  110. extern void local_timer_interrupt(void);
  111.  
  112. #ifdef CONFIG_LOCAL_TIMERS
  113.  
  114. /*
  115.  * Stop a local timer interrupt.
  116.  */
  117. extern void local_timer_stop(unsigned int cpu);
  118.  
  119. /*
  120.  * Platform provides this to acknowledge a local timer IRQ
  121.  */
  122. extern int local_timer_ack(void);
  123.  
  124. #else
  125.  
  126. static 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.  */
  135. extern void local_timer_setup(unsigned int cpu);
  136.  
  137. /*
  138.  * show local interrupt info
  139.  */
  140. extern void show_local_irqs(struct seq_file *);
  141.  
  142. /*
  143.  * Called from assembly, this is the local timer IRQ handler
  144.  */
  145. asmlinkage void do_local_timer(struct pt_regs *);
  146.  
  147. #endif /* ifndef __ASM_ARM_SMP_H */
  148.