linux-bk/include/asm-i386/smp.h
<<
>>
Prefs
   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/config.h>
   9#include <linux/kernel.h>
  10#include <linux/threads.h>
  11#include <linux/cpumask.h>
  12#endif
  13
  14#ifdef CONFIG_X86_LOCAL_APIC
  15#ifndef __ASSEMBLY__
  16#include <asm/fixmap.h>
  17#include <asm/bitops.h>
  18#include <asm/mpspec.h>
  19#ifdef CONFIG_X86_IO_APIC
  20#include <asm/io_apic.h>
  21#endif
  22#include <asm/apic.h>
  23#endif
  24#endif
  25
  26#define BAD_APICID 0xFFu
  27#ifdef CONFIG_SMP
  28#ifndef __ASSEMBLY__
  29
  30/*
  31 * Private routines/data
  32 */
  33 
  34extern void smp_alloc_memory(void);
  35extern int pic_mode;
  36extern int smp_num_siblings;
  37extern cpumask_t cpu_sibling_map[];
  38
  39extern void smp_flush_tlb(void);
  40extern void smp_message_irq(int cpl, void *dev_id, struct pt_regs *regs);
  41extern void smp_invalidate_rcv(void);           /* Process an NMI */
  42extern void (*mtrr_hook) (void);
  43extern void zap_low_mappings (void);
  44
  45#define MAX_APICID 256
  46extern u8 x86_cpu_to_apicid[];
  47
  48/*
  49 * This function is needed by all SMP systems. It must _always_ be valid
  50 * from the initial startup. We map APIC_BASE very early in page_setup(),
  51 * so this is correct in the x86 case.
  52 */
  53#define smp_processor_id() (current_thread_info()->cpu)
  54
  55extern cpumask_t cpu_callout_map;
  56#define cpu_possible_map cpu_callout_map
  57
  58/* We don't mark CPUs online until __cpu_up(), so we need another measure */
  59static inline int num_booting_cpus(void)
  60{
  61        return cpus_weight(cpu_callout_map);
  62}
  63
  64extern void map_cpu_to_logical_apicid(void);
  65extern void unmap_cpu_to_logical_apicid(int cpu);
  66
  67#ifdef CONFIG_X86_LOCAL_APIC
  68
  69#ifdef APIC_DEFINITION
  70extern int hard_smp_processor_id(void);
  71#else
  72#include <mach_apicdef.h>
  73static inline int hard_smp_processor_id(void)
  74{
  75        /* we don't want to mark this access volatile - bad code generation */
  76        return GET_APIC_ID(*(unsigned long *)(APIC_BASE+APIC_ID));
  77}
  78#endif
  79
  80static __inline int logical_smp_processor_id(void)
  81{
  82        /* we don't want to mark this access volatile - bad code generation */
  83        return GET_APIC_LOGICAL_ID(*(unsigned long *)(APIC_BASE+APIC_LDR));
  84}
  85
  86#endif
  87#endif /* !__ASSEMBLY__ */
  88
  89#define NO_PROC_ID              0xFF            /* No processor magic marker */
  90
  91#endif
  92#endif
  93
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.