Blame view

include/asm-arm/smp.h 2.89 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  /*
   *  linux/include/asm-arm/smp.h
   *
   *  Copyright (C) 2004-2005 ARM Ltd.
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License version 2 as
   * published by the Free Software Foundation.
   */
  #ifndef __ASM_ARM_SMP_H
  #define __ASM_ARM_SMP_H
  
  #include <linux/config.h>
  #include <linux/threads.h>
  #include <linux/cpumask.h>
  #include <linux/thread_info.h>
  
  #include <asm/arch/smp.h>
  
  #ifndef CONFIG_SMP
  # error "<asm-arm/smp.h> included in non-SMP build"
  #endif
39c715b71   Ingo Molnar   [PATCH] smp_proce...
23
  #define raw_smp_processor_id() (current_thread_info()->cpu)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
24

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
25
26
27
28
29
30
31
32
33
34
35
36
37
38
  /*
   * at the moment, there's not a big penalty for changing CPUs
   * (the >big< penalty is running SMP in the first place)
   */
  #define PROC_CHANGE_PENALTY		15
  
  struct seq_file;
  
  /*
   * generate IPI list text
   */
  extern void show_ipi_list(struct seq_file *p);
  
  /*
3b6353fae   Russell King   [ARM] Declare asm...
39
40
41
42
43
   * Called from assembly code, this handles an IPI.
   */
  asmlinkage void do_IPI(struct pt_regs *regs);
  
  /*
7bbb79403   Russell King   [ARM] Fix SMP ini...
44
45
46
47
48
   * Setup the SMP cpu_possible_map
   */
  extern void smp_init_cpus(void);
  
  /*
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
49
50
51
52
53
54
55
56
57
58
   * Move global data into per-processor storage.
   */
  extern void smp_store_cpu_info(unsigned int cpuid);
  
  /*
   * Raise an IPI cross call on CPUs in callmap.
   */
  extern void smp_cross_call(cpumask_t callmap);
  
  /*
dbebb4cbe   Russell King   [ARM SMP] Add mis...
59
60
61
62
63
   * Broadcast a timer interrupt to the other CPUs.
   */
  extern void smp_send_timer(void);
  
  /*
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
64
65
66
67
   * Boot a secondary CPU, and assign it the specified idle task.
   * This also gives us the initial stack to use for this CPU.
   */
  extern int boot_secondary(unsigned int cpu, struct task_struct *);
e65f38ed0   Russell King   [PATCH] ARM SMP: ...
68
  /*
3b6353fae   Russell King   [ARM] Declare asm...
69
70
71
72
73
74
   * Called from platform specific assembly code, this is the
   * secondary CPU entry point.
   */
  asmlinkage void secondary_start_kernel(void);
  
  /*
e65f38ed0   Russell King   [PATCH] ARM SMP: ...
75
76
77
78
79
80
81
82
83
84
85
86
   * Perform platform specific initialisation of the specified CPU.
   */
  extern void platform_secondary_init(unsigned int cpu);
  
  /*
   * Initial data for bringing up a secondary CPU.
   */
  struct secondary_data {
  	unsigned long pgdir;
  	void *stack;
  };
  extern struct secondary_data secondary_data;
a054a8115   Russell King   [ARM SMP] Add hot...
87
88
89
90
91
92
93
94
95
  extern int __cpu_disable(void);
  extern int mach_cpu_disable(unsigned int cpu);
  
  extern void __cpu_die(unsigned int cpu);
  extern void cpu_die(void);
  
  extern void platform_cpu_die(unsigned int cpu);
  extern int platform_cpu_kill(unsigned int cpu);
  extern void platform_cpu_enable(unsigned int cpu);
37ee16ae9   Russell King   [ARM SMP] Add cor...
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
  #ifdef CONFIG_LOCAL_TIMERS
  /*
   * Setup a local timer interrupt for a CPU.
   */
  extern void local_timer_setup(unsigned int cpu);
  
  /*
   * Stop a local timer interrupt.
   */
  extern void local_timer_stop(unsigned int cpu);
  
  /*
   * Platform provides this to acknowledge a local timer IRQ
   */
  extern int local_timer_ack(void);
  
  #else
  
  static inline void local_timer_setup(unsigned int cpu)
  {
  }
  
  static inline void local_timer_stop(unsigned int cpu)
  {
  }
  
  #endif
  
  /*
   * show local interrupt info
   */
  extern void show_local_irqs(struct seq_file *);
  
  /*
   * Called from assembly, this is the local timer IRQ handler
   */
  asmlinkage void do_local_timer(struct pt_regs *);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
133
  #endif /* ifndef __ASM_ARM_SMP_H */