Commit d9112f43 authored by Thomas Gleixner's avatar Thomas Gleixner

x86: Move pre_intr_init to x86_init_ops

Replace the quirk machinery by a x86_init_ops function which
defaults to the standard implementation. This is also a preparatory
patch for Moorestown support which needs to replace the default
init_ISA_irqs as well.
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
parent b3f1b617
...@@ -47,4 +47,6 @@ extern unsigned int do_IRQ(struct pt_regs *regs); ...@@ -47,4 +47,6 @@ extern unsigned int do_IRQ(struct pt_regs *regs);
extern DECLARE_BITMAP(used_vectors, NR_VECTORS); extern DECLARE_BITMAP(used_vectors, NR_VECTORS);
extern int vector_used_by_percpu_irq(unsigned int vector); extern int vector_used_by_percpu_irq(unsigned int vector);
extern void init_ISA_irqs(void);
#endif /* _ASM_X86_IRQ_H */ #endif /* _ASM_X86_IRQ_H */
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
struct x86_quirks { struct x86_quirks {
int (*arch_pre_time_init)(void); int (*arch_pre_time_init)(void);
int (*arch_time_init)(void); int (*arch_time_init)(void);
int (*arch_pre_intr_init)(void);
int (*arch_intr_init)(void); int (*arch_intr_init)(void);
int (*arch_trap_init)(void); int (*arch_trap_init)(void);
}; };
......
...@@ -43,6 +43,15 @@ struct x86_init_resources { ...@@ -43,6 +43,15 @@ struct x86_init_resources {
char *(*memory_setup)(void); char *(*memory_setup)(void);
}; };
/**
* struct x86_init_irqs - platform specific interrupt setup
* @pre_vector_init: init code to run before interrupt vectors
* are set up.
*/
struct x86_init_irqs {
void (*pre_vector_init)(void);
};
/** /**
* struct x86_init_ops - functions for platform specific setup * struct x86_init_ops - functions for platform specific setup
* *
...@@ -50,6 +59,7 @@ struct x86_init_resources { ...@@ -50,6 +59,7 @@ struct x86_init_resources {
struct x86_init_ops { struct x86_init_ops {
struct x86_init_resources resources; struct x86_init_resources resources;
struct x86_init_mpparse mpparse; struct x86_init_mpparse mpparse;
struct x86_init_irqs irqs;
}; };
extern struct x86_init_ops x86_init; extern struct x86_init_ops x86_init;
......
...@@ -265,7 +265,6 @@ static void __init smp_read_mpc_oem(struct mpc_table *mpc) ...@@ -265,7 +265,6 @@ static void __init smp_read_mpc_oem(struct mpc_table *mpc)
static struct x86_quirks numaq_x86_quirks __initdata = { static struct x86_quirks numaq_x86_quirks __initdata = {
.arch_pre_time_init = numaq_pre_time_init, .arch_pre_time_init = numaq_pre_time_init,
.arch_time_init = NULL, .arch_time_init = NULL,
.arch_pre_intr_init = NULL,
.arch_intr_init = NULL, .arch_intr_init = NULL,
.arch_trap_init = NULL, .arch_trap_init = NULL,
}; };
......
...@@ -116,7 +116,7 @@ int vector_used_by_percpu_irq(unsigned int vector) ...@@ -116,7 +116,7 @@ int vector_used_by_percpu_irq(unsigned int vector)
return 0; return 0;
} }
static void __init init_ISA_irqs(void) void __init init_ISA_irqs(void)
{ {
int i; int i;
...@@ -213,32 +213,12 @@ static void __init apic_intr_init(void) ...@@ -213,32 +213,12 @@ static void __init apic_intr_init(void)
#endif #endif
} }
/**
* x86_quirk_pre_intr_init - initialisation prior to setting up interrupt vectors
*
* Description:
* Perform any necessary interrupt initialisation prior to setting up
* the "ordinary" interrupt call gates. For legacy reasons, the ISA
* interrupts should be initialised here if the machine emulates a PC
* in any way.
**/
static void __init x86_quirk_pre_intr_init(void)
{
#ifdef CONFIG_X86_32
if (x86_quirks->arch_pre_intr_init) {
if (x86_quirks->arch_pre_intr_init())
return;
}
#endif
init_ISA_irqs();
}
void __init native_init_IRQ(void) void __init native_init_IRQ(void)
{ {
int i; int i;
/* Execute any quirks before the call gates are initialised: */ /* Execute any quirks before the call gates are initialised: */
x86_quirk_pre_intr_init(); x86_init.irqs.pre_vector_init();
apic_intr_init(); apic_intr_init();
......
...@@ -73,14 +73,10 @@ static int __init visws_time_init(void) ...@@ -73,14 +73,10 @@ static int __init visws_time_init(void)
return 0; return 0;
} }
static int __init visws_pre_intr_init(void) /* Replaces the default init_ISA_irqs in the generic setup */
static void __init visws_pre_intr_init(void)
{ {
init_VISWS_APIC_irqs(); init_VISWS_APIC_irqs();
/*
* We dont want ISA irqs to be set up by the generic code:
*/
return 1;
} }
/* Quirk for machine specific memory setup. */ /* Quirk for machine specific memory setup. */
...@@ -232,7 +228,6 @@ static int visws_trap_init(void); ...@@ -232,7 +228,6 @@ static int visws_trap_init(void);
static struct x86_quirks visws_x86_quirks __initdata = { static struct x86_quirks visws_x86_quirks __initdata = {
.arch_time_init = visws_time_init, .arch_time_init = visws_time_init,
.arch_pre_intr_init = visws_pre_intr_init,
.arch_intr_init = NULL, .arch_intr_init = NULL,
.arch_trap_init = visws_trap_init, .arch_trap_init = visws_trap_init,
}; };
...@@ -257,6 +252,7 @@ void __init visws_early_detect(void) ...@@ -257,6 +252,7 @@ void __init visws_early_detect(void)
x86_init.resources.memory_setup = visws_memory_setup; x86_init.resources.memory_setup = visws_memory_setup;
x86_init.mpparse.get_smp_config = visws_get_smp_config; x86_init.mpparse.get_smp_config = visws_get_smp_config;
x86_init.mpparse.find_smp_config = visws_find_smp_config; x86_init.mpparse.find_smp_config = visws_find_smp_config;
x86_init.irqs.pre_vector_init = visws_pre_intr_init;
/* /*
* Install reboot quirks: * Install reboot quirks:
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include <asm/mpspec.h> #include <asm/mpspec.h>
#include <asm/setup.h> #include <asm/setup.h>
#include <asm/e820.h> #include <asm/e820.h>
#include <asm/irq.h>
void __cpuinit x86_init_noop(void) { } void __cpuinit x86_init_noop(void) { }
void __init x86_init_uint_noop(unsigned int unused) { } void __init x86_init_uint_noop(unsigned int unused) { }
...@@ -35,4 +36,8 @@ struct __initdata x86_init_ops x86_init = { ...@@ -35,4 +36,8 @@ struct __initdata x86_init_ops x86_init = {
.find_smp_config = default_find_smp_config, .find_smp_config = default_find_smp_config,
.get_smp_config = default_get_smp_config, .get_smp_config = default_get_smp_config,
}, },
.irqs = {
.pre_vector_init = init_ISA_irqs,
},
}; };
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment