x86: Move pre_intr_init to x86_init_ops
authorThomas Gleixner <tglx@linutronix.de>
Thu, 20 Aug 2009 07:41:38 +0000 (09:41 +0200)
committerThomas Gleixner <tglx@linutronix.de>
Mon, 31 Aug 2009 07:35:45 +0000 (09:35 +0200)
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>
arch/x86/include/asm/irq.h
arch/x86/include/asm/setup.h
arch/x86/include/asm/x86_init.h
arch/x86/kernel/apic/numaq_32.c
arch/x86/kernel/irqinit.c
arch/x86/kernel/visws_quirks.c
arch/x86/kernel/x86_init.c

index f38481bcd45538f26d640a2c460a3510246510d2..8fe2782a2537df624f66cc1a489e5746beac70f6 100644 (file)
@@ -47,4 +47,6 @@ extern unsigned int do_IRQ(struct pt_regs *regs);
 extern DECLARE_BITMAP(used_vectors, NR_VECTORS);
 extern int vector_used_by_percpu_irq(unsigned int vector);
 
+extern void init_ISA_irqs(void);
+
 #endif /* _ASM_X86_IRQ_H */
index 345a2551af90d8e80f65c9fbe6fecc1c31eba8e9..66a319709d66d2fd63ec48c9dabe266606278291 100644 (file)
@@ -16,7 +16,6 @@
 struct x86_quirks {
        int (*arch_pre_time_init)(void);
        int (*arch_time_init)(void);
-       int (*arch_pre_intr_init)(void);
        int (*arch_intr_init)(void);
        int (*arch_trap_init)(void);
 };
index e0d4729c90541cc4f6c5107de9eb0236fb12ff05..65e3394c77fd65efd51cc04d2f8dd79d2c179aa5 100644 (file)
@@ -43,6 +43,15 @@ struct x86_init_resources {
        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
  *
@@ -50,6 +59,7 @@ struct x86_init_resources {
 struct x86_init_ops {
        struct x86_init_resources       resources;
        struct x86_init_mpparse         mpparse;
+       struct x86_init_irqs            irqs;
 };
 
 extern struct x86_init_ops x86_init;
index 3dd5fd7653412e1e96814397b1bea6a2449a4b92..ec8b3113716d409e7fff604e5c7b44eeae73e2bf 100644 (file)
@@ -265,7 +265,6 @@ static void __init smp_read_mpc_oem(struct mpc_table *mpc)
 static struct x86_quirks numaq_x86_quirks __initdata = {
        .arch_pre_time_init             = numaq_pre_time_init,
        .arch_time_init                 = NULL,
-       .arch_pre_intr_init             = NULL,
        .arch_intr_init                 = NULL,
        .arch_trap_init                 = NULL,
 };
index 92b7703d3d58e6ad278e45d733fdcac1505772fa..acdf088c7583b602578da82735430456473c8440 100644 (file)
@@ -116,7 +116,7 @@ int vector_used_by_percpu_irq(unsigned int vector)
        return 0;
 }
 
-static void __init init_ISA_irqs(void)
+void __init init_ISA_irqs(void)
 {
        int i;
 
@@ -213,32 +213,12 @@ static void __init apic_intr_init(void)
 #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)
 {
        int i;
 
        /* Execute any quirks before the call gates are initialised: */
-       x86_quirk_pre_intr_init();
+       x86_init.irqs.pre_vector_init();
 
        apic_intr_init();
 
index 31e828118f8e8d722cd58caa25681479ab69a486..1d6309d70dfa836759e807dec81d6fb384909eee 100644 (file)
@@ -73,14 +73,10 @@ static int __init visws_time_init(void)
        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();
-
-       /*
-        * We dont want ISA irqs to be set up by the generic code:
-        */
-       return 1;
 }
 
 /* Quirk for machine specific memory setup. */
@@ -232,7 +228,6 @@ static int visws_trap_init(void);
 
 static struct x86_quirks visws_x86_quirks __initdata = {
        .arch_time_init         = visws_time_init,
-       .arch_pre_intr_init     = visws_pre_intr_init,
        .arch_intr_init         = NULL,
        .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.mpparse.get_smp_config = visws_get_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:
index 3488fb62ac03d0c6dbe203f2faa773eb7987bbb9..f2abe2136da10a315d13015aafecffee06e9863c 100644 (file)
@@ -9,6 +9,7 @@
 #include <asm/mpspec.h>
 #include <asm/setup.h>
 #include <asm/e820.h>
+#include <asm/irq.h>
 
 void __cpuinit x86_init_noop(void) { }
 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,
                .get_smp_config         = default_get_smp_config,
        },
+
+       .irqs = {
+               .pre_vector_init        = init_ISA_irqs,
+       },
 };