home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-arm / smp.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  2.9 KB  |  138 lines

  1. /*
  2.  *  linux/include/asm-arm/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 <asm/arch/smp.h>
  18.  
  19. #ifndef CONFIG_SMP
  20. # error "<asm-arm/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.  * Boot a secondary CPU, and assign it the specified idle task.
  65.  * This also gives us the initial stack to use for this CPU.
  66.  */
  67. extern int boot_secondary(unsigned int cpu, struct task_struct *);
  68.  
  69. /*
  70.  * Called from platform specific assembly code, this is the
  71.  * secondary CPU entry point.
  72.  */
  73. asmlinkage void secondary_start_kernel(void);
  74.  
  75. /*
  76.  * Perform platform specific initialisation of the specified CPU.
  77.  */
  78. extern void platform_secondary_init(unsigned int cpu);
  79.  
  80. /*
  81.  * Initial data for bringing up a secondary CPU.
  82.  */
  83. struct secondary_data {
  84.     unsigned long pgdir;
  85.     void *stack;
  86. };
  87. extern struct secondary_data secondary_data;
  88.  
  89. extern int __cpu_disable(void);
  90. extern int mach_cpu_disable(unsigned int cpu);
  91.  
  92. extern void __cpu_die(unsigned int cpu);
  93. extern void cpu_die(void);
  94.  
  95. extern void platform_cpu_die(unsigned int cpu);
  96. extern int platform_cpu_kill(unsigned int cpu);
  97. extern void platform_cpu_enable(unsigned int cpu);
  98.  
  99. #ifdef CONFIG_LOCAL_TIMERS
  100. /*
  101.  * Setup a local timer interrupt for a CPU.
  102.  */
  103. extern void local_timer_setup(unsigned int cpu);
  104.  
  105. /*
  106.  * Stop a local timer interrupt.
  107.  */
  108. extern void local_timer_stop(unsigned int cpu);
  109.  
  110. /*
  111.  * Platform provides this to acknowledge a local timer IRQ
  112.  */
  113. extern int local_timer_ack(void);
  114.  
  115. #else
  116.  
  117. static inline void local_timer_setup(unsigned int cpu)
  118. {
  119. }
  120.  
  121. static inline void local_timer_stop(unsigned int cpu)
  122. {
  123. }
  124.  
  125. #endif
  126.  
  127. /*
  128.  * show local interrupt info
  129.  */
  130. extern void show_local_irqs(struct seq_file *);
  131.  
  132. /*
  133.  * Called from assembly, this is the local timer IRQ handler
  134.  */
  135. asmlinkage void do_local_timer(struct pt_regs *);
  136.  
  137. #endif /* ifndef __ASM_ARM_SMP_H */
  138.