Subversion Repositories shark

Rev

Rev 422 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
422 giacomo 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
 
34
extern void smp_alloc_memory(void);
35
extern int pic_mode;
36
extern int smp_num_siblings;
37
extern int cpu_sibling_map[];
38
 
39
extern void smp_flush_tlb(void);
40
extern void smp_message_irq(int cpl, void *dev_id, struct pt_regs *regs);
41
extern void smp_send_reschedule(int cpu);
42
extern void smp_invalidate_rcv(void);           /* Process an NMI */
43
extern void (*mtrr_hook) (void);
44
extern void zap_low_mappings (void);
45
 
46
#define MAX_APICID 256
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
 
55
extern cpumask_t cpu_callout_map;
56
 
57
#define cpu_possible(cpu) cpu_isset(cpu, cpu_callout_map)
58
 
59
/* We don't mark CPUs online until __cpu_up(), so we need another measure */
60
static inline int num_booting_cpus(void)
61
{
62
        return cpus_weight(cpu_callout_map);
63
}
64
 
65
extern void map_cpu_to_logical_apicid(void);
66
extern void unmap_cpu_to_logical_apicid(int cpu);
67
 
68
#ifdef CONFIG_X86_LOCAL_APIC
69
 
70
#ifdef APIC_DEFINITION
71
extern int hard_smp_processor_id(void);
72
#else
73
#include <mach_apicdef.h>
74
static inline int hard_smp_processor_id(void)
75
{
76
        /* we don't want to mark this access volatile - bad code generation */
77
        return GET_APIC_ID(*(unsigned long *)(APIC_BASE+APIC_ID));
78
}
79
#endif
80
 
81
static __inline int logical_smp_processor_id(void)
82
{
83
        /* we don't want to mark this access volatile - bad code generation */
84
        return GET_APIC_LOGICAL_ID(*(unsigned long *)(APIC_BASE+APIC_LDR));
85
}
86
 
87
#endif
88
#endif /* !__ASSEMBLY__ */
89
 
90
#define NO_PROC_ID              0xFF            /* No processor magic marker */
91
 
92
#endif
93
#endif