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

  1. #ifndef __ASM_SMP_H
  2. #define __ASM_SMP_H
  3.  
  4. /*
  5.  * We need the APIC definitions automatically as part of 'smp.h'
  6.  */
  7. #ifndef __ASSEMBLY__
  8. #include <linux/kernel.h>
  9. #include <linux/threads.h>
  10. #include <linux/cpumask.h>
  11. #endif
  12.  
  13. #ifdef CONFIG_X86_LOCAL_APIC
  14. #ifndef __ASSEMBLY__
  15. #include <asm/fixmap.h>
  16. #include <asm/bitops.h>
  17. #include <asm/mpspec.h>
  18. #ifdef CONFIG_X86_IO_APIC
  19. #include <asm/io_apic.h>
  20. #endif
  21. #include <asm/apic.h>
  22. #endif
  23. #endif
  24.  
  25. #define BAD_APICID 0xFFu
  26. #ifdef CONFIG_SMP
  27. #ifndef __ASSEMBLY__
  28.  
  29. /*
  30.  * Private routines/data
  31.  */
  32.  
  33. extern void smp_alloc_memory(void);
  34. extern int pic_mode;
  35. extern int smp_num_siblings;
  36. extern cpumask_t cpu_sibling_map[];
  37. extern cpumask_t cpu_core_map[];
  38.  
  39. extern void (*mtrr_hook) (void);
  40. extern void zap_low_mappings (void);
  41. extern void lock_ipi_call_lock(void);
  42. extern void unlock_ipi_call_lock(void);
  43.  
  44. #define MAX_APICID 256
  45. extern u8 x86_cpu_to_apicid[];
  46.  
  47. #define cpu_physical_id(cpu)    x86_cpu_to_apicid[cpu]
  48.  
  49. #ifdef CONFIG_HOTPLUG_CPU
  50. extern void cpu_exit_clear(void);
  51. extern void cpu_uninit(void);
  52. #endif
  53.  
  54. /*
  55.  * This function is needed by all SMP systems. It must _always_ be valid
  56.  * from the initial startup. We map APIC_BASE very early in page_setup(),
  57.  * so this is correct in the x86 case.
  58.  */
  59. #define raw_smp_processor_id() (current_thread_info()->cpu)
  60.  
  61. extern cpumask_t cpu_callout_map;
  62. extern cpumask_t cpu_callin_map;
  63. extern cpumask_t cpu_possible_map;
  64.  
  65. /* We don't mark CPUs online until __cpu_up(), so we need another measure */
  66. static inline int num_booting_cpus(void)
  67. {
  68.     return cpus_weight(cpu_callout_map);
  69. }
  70.  
  71. #ifdef CONFIG_X86_LOCAL_APIC
  72.  
  73. #ifdef APIC_DEFINITION
  74. extern int hard_smp_processor_id(void);
  75. #else
  76. #include <mach_apicdef.h>
  77. static inline int hard_smp_processor_id(void)
  78. {
  79.     /* we don't want to mark this access volatile - bad code generation */
  80.     return GET_APIC_ID(*(unsigned long *)(APIC_BASE+APIC_ID));
  81. }
  82. #endif
  83.  
  84. static __inline int logical_smp_processor_id(void)
  85. {
  86.     /* we don't want to mark this access volatile - bad code generation */
  87.     return GET_APIC_LOGICAL_ID(*(unsigned long *)(APIC_BASE+APIC_LDR));
  88. }
  89.  
  90. #endif
  91.  
  92. extern int __cpu_disable(void);
  93. extern void __cpu_die(unsigned int cpu);
  94. #endif /* !__ASSEMBLY__ */
  95.  
  96. #else /* CONFIG_SMP */
  97.  
  98. #define cpu_physical_id(cpu)        boot_cpu_physical_apicid
  99.  
  100. #define NO_PROC_ID        0xFF        /* No processor magic marker */
  101.  
  102. #endif
  103. #endif
  104.