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: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
@@ -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 @@
|
|||||||
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 {
|
|||||||
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 {
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
#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)
|
|||||||
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);
|
|||||||
|
|
||||||
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)
|
|||||||
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 @@
|
|||||||
#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 = {
|
|||||||
.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,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user