/*
* Don't change this structure - ASM code relies on it.
*/
-extern struct processor {
+struct processor {
/* MISC
* get data abort address/flags
*/
unsigned int suspend_size;
void (*do_suspend)(void *);
void (*do_resume)(void *);
-} processor;
+};
#ifndef MULTI_CPU
+static inline void init_proc_vtable(const struct processor *p)
+{
+}
+
extern void cpu_proc_init(void);
extern void cpu_proc_fin(void);
extern int cpu_do_idle(void);
extern void cpu_do_suspend(void *);
extern void cpu_do_resume(void *);
#else
-#define cpu_proc_init processor._proc_init
-#define cpu_proc_fin processor._proc_fin
-#define cpu_reset processor.reset
-#define cpu_do_idle processor._do_idle
-#define cpu_dcache_clean_area processor.dcache_clean_area
-#define cpu_set_pte_ext processor.set_pte_ext
-#define cpu_do_switch_mm processor.switch_mm
+
+extern struct processor processor;
+#define PROC_VTABLE_FUNC(f) processor.f
+static inline void init_proc_vtable(const struct processor *p)
+{
+ processor = *p;
+}
+
+#define cpu_proc_init PROC_VTABLE_FUNC(_proc_init)
+#define cpu_proc_fin PROC_VTABLE_FUNC(_proc_fin)
+#define cpu_reset PROC_VTABLE_FUNC(reset)
+#define cpu_do_idle PROC_VTABLE_FUNC(_do_idle)
+#define cpu_dcache_clean_area PROC_VTABLE_FUNC(dcache_clean_area)
+#define cpu_set_pte_ext PROC_VTABLE_FUNC(set_pte_ext)
+#define cpu_do_switch_mm PROC_VTABLE_FUNC(switch_mm)
/* These three are private to arch/arm/kernel/suspend.c */
-#define cpu_do_suspend processor.do_suspend
-#define cpu_do_resume processor.do_resume
+#define cpu_do_suspend PROC_VTABLE_FUNC(do_suspend)
+#define cpu_do_resume PROC_VTABLE_FUNC(do_resume)
#endif
extern void cpu_resume(void);