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-mips / smp.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  2.9 KB  |  117 lines

  1. /*
  2.  * This file is subject to the terms and conditions of the GNU General
  3.  * Public License.  See the file "COPYING" in the main directory of this
  4.  * archive for more details.
  5.  *
  6.  * Copyright (C) 2000 - 2001 by Kanoj Sarcar (kanoj@sgi.com)
  7.  * Copyright (C) 2000 - 2001 by Silicon Graphics, Inc.
  8.  * Copyright (C) 2000, 2001, 2002 Ralf Baechle
  9.  * Copyright (C) 2000, 2001 Broadcom Corporation
  10.  */
  11. #ifndef __ASM_SMP_H
  12. #define __ASM_SMP_H
  13.  
  14.  
  15. #ifdef CONFIG_SMP
  16.  
  17. #include <linux/bitops.h>
  18. #include <linux/linkage.h>
  19. #include <linux/threads.h>
  20. #include <linux/cpumask.h>
  21. #include <asm/atomic.h>
  22.  
  23. #define raw_smp_processor_id() (current_thread_info()->cpu)
  24.  
  25. /* Map from cpu id to sequential logical cpu number.  This will only
  26.    not be idempotent when cpus failed to come on-line.  */
  27. extern int __cpu_number_map[NR_CPUS];
  28. #define cpu_number_map(cpu)  __cpu_number_map[cpu]
  29.  
  30. /* The reverse map from sequential logical cpu number to cpu id.  */
  31. extern int __cpu_logical_map[NR_CPUS];
  32. #define cpu_logical_map(cpu)  __cpu_logical_map[cpu]
  33.  
  34. #define NO_PROC_ID    (-1)
  35.  
  36. struct call_data_struct {
  37.     void        (*func)(void *);
  38.     void        *info;
  39.     atomic_t    started;
  40.     atomic_t    finished;
  41.     int        wait;
  42. };
  43.  
  44. extern struct call_data_struct *call_data;
  45.  
  46. #define SMP_RESCHEDULE_YOURSELF    0x1    /* XXX braindead */
  47. #define SMP_CALL_FUNCTION    0x2
  48.  
  49. extern cpumask_t phys_cpu_present_map;
  50. #define cpu_possible_map    phys_cpu_present_map
  51.  
  52. extern cpumask_t cpu_callout_map;
  53. /* We don't mark CPUs online until __cpu_up(), so we need another measure */
  54. static inline int num_booting_cpus(void)
  55. {
  56.     return cpus_weight(cpu_callout_map);
  57. }
  58.  
  59. /*
  60.  * These are defined by the board-specific code.
  61.  */
  62.  
  63. /*
  64.  * Cause the function described by call_data to be executed on the passed
  65.  * cpu.  When the function has finished, increment the finished field of
  66.  * call_data.
  67.  */
  68. extern void core_send_ipi(int cpu, unsigned int action);
  69.  
  70. /*
  71.  * Firmware CPU startup hook
  72.  */
  73. extern void prom_boot_secondary(int cpu, struct task_struct *idle);
  74.  
  75. /*
  76.  *  After we've done initial boot, this function is called to allow the
  77.  *  board code to clean up state, if needed
  78.  */
  79. extern void prom_init_secondary(void);
  80.  
  81. /*
  82.  * Populate cpu_possible_map before smp_init, called from setup_arch.
  83.  */
  84. extern void plat_smp_setup(void);
  85.  
  86. /*
  87.  * Called in smp_prepare_cpus.
  88.  */
  89. extern void plat_prepare_cpus(unsigned int max_cpus);
  90.  
  91. /*
  92.  * Last chance for the board code to finish SMP initialization before
  93.  * the CPU is "online".
  94.  */
  95. extern void prom_smp_finish(void);
  96.  
  97. /* Hook for after all CPUs are online */
  98. extern void prom_cpus_done(void);
  99.  
  100. extern void asmlinkage smp_bootstrap(void);
  101.  
  102. /*
  103.  * this function sends a 'reschedule' IPI to another CPU.
  104.  * it goes straight through and wastes no time serializing
  105.  * anything. Worst case is that we lose a reschedule ...
  106.  */
  107. static inline void smp_send_reschedule(int cpu)
  108. {
  109.     core_send_ipi(cpu, SMP_RESCHEDULE_YOURSELF);
  110. }
  111.  
  112. extern asmlinkage void smp_call_function_interrupt(void);
  113.  
  114. #endif /* CONFIG_SMP */
  115.  
  116. #endif /* __ASM_SMP_H */
  117.