Skip to content

Commit

Permalink
x86: refactor x86_quirks support
Browse files Browse the repository at this point in the history
Impact: cleanup

Make x86_quirks support more transparent. The highlevel
methods are now named:

  extern void x86_quirk_pre_intr_init(void);
  extern void x86_quirk_intr_init(void);

  extern void x86_quirk_trap_init(void);

  extern void x86_quirk_pre_time_init(void);
  extern void x86_quirk_time_init(void);

This makes it clear that if some platform extension has to
do something here that it is considered ... weird, and is
discouraged.

Also remove arch_hooks.h and move it into setup.h (and other
header files where appropriate).

Signed-off-by: Ingo Molnar <mingo@elte.hu>
  • Loading branch information
Ingo Molnar committed Feb 22, 2009
1 parent d85a881 commit 8e6dafd
Show file tree
Hide file tree
Showing 16 changed files with 39 additions and 56 deletions.
26 changes: 0 additions & 26 deletions arch/x86/include/asm/arch_hooks.h

This file was deleted.

4 changes: 4 additions & 0 deletions arch/x86/include/asm/i8259.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,4 +60,8 @@ extern struct irq_chip i8259A_chip;
extern void mask_8259A(void);
extern void unmask_8259A(void);

#ifdef CONFIG_X86_32
extern void init_ISA_irqs(void);
#endif

#endif /* _ASM_X86_I8259_H */
9 changes: 9 additions & 0 deletions arch/x86/include/asm/setup.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
struct mpc_cpu;
struct mpc_bus;
struct mpc_oemtable;

struct x86_quirks {
int (*arch_pre_time_init)(void);
int (*arch_time_init)(void);
Expand All @@ -33,6 +34,14 @@ struct x86_quirks {
int (*update_apic)(void);
};

extern void x86_quirk_pre_intr_init(void);
extern void x86_quirk_intr_init(void);

extern void x86_quirk_trap_init(void);

extern void x86_quirk_pre_time_init(void);
extern void x86_quirk_time_init(void);

#endif /* __ASSEMBLY__ */

#ifdef __i386__
Expand Down
2 changes: 2 additions & 0 deletions arch/x86/include/asm/timer.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
#include <linux/init.h>
#include <linux/pm.h>
#include <linux/percpu.h>
#include <linux/interrupt.h>

#define TICK_SIZE (tick_nsec / 1000)

Expand All @@ -12,6 +13,7 @@ unsigned long native_calibrate_tsc(void);
#ifdef CONFIG_X86_32
extern int timer_ack;
extern int recalibrate_cpu_khz(void);
extern irqreturn_t timer_interrupt(int irq, void *dev_id);
#endif /* CONFIG_X86_32 */

extern int no_timer_check;
Expand Down
1 change: 0 additions & 1 deletion arch/x86/kernel/apic/apic.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@
#include <linux/smp.h>
#include <linux/mm.h>

#include <asm/arch_hooks.h>
#include <asm/pgalloc.h>
#include <asm/atomic.h>
#include <asm/mpspec.h>
Expand Down
1 change: 0 additions & 1 deletion arch/x86/kernel/apic/probe_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@
#include <linux/init.h>
#include <linux/interrupt.h>
#include <asm/acpi.h>
#include <asm/arch_hooks.h>
#include <asm/e820.h>
#include <asm/setup.h>

Expand Down
1 change: 0 additions & 1 deletion arch/x86/kernel/i8259.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
#include <asm/pgtable.h>
#include <asm/desc.h>
#include <asm/apic.h>
#include <asm/arch_hooks.h>
#include <asm/i8259.h>

/*
Expand Down
13 changes: 7 additions & 6 deletions arch/x86/kernel/irqinit_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
#include <asm/pgtable.h>
#include <asm/desc.h>
#include <asm/apic.h>
#include <asm/arch_hooks.h>
#include <asm/setup.h>
#include <asm/i8259.h>
#include <asm/traps.h>

Expand Down Expand Up @@ -127,8 +127,8 @@ void __init native_init_IRQ(void)
{
int i;

/* all the set up before the call gates are initialised */
pre_intr_init_hook();
/* Execute any quirks before the call gates are initialised: */
x86_quirk_pre_intr_init();

/*
* Cover the whole vector space, no vector can escape
Expand Down Expand Up @@ -188,10 +188,11 @@ void __init native_init_IRQ(void)
if (!acpi_ioapic)
setup_irq(2, &irq2);

/* setup after call gates are initialised (usually add in
* the architecture specific gates)
/*
* Call quirks after call gates are initialised (usually add in
* the architecture specific gates):
*/
intr_init_hook();
x86_quirk_intr_init();

/*
* External FPU? Set up irq13 if so, for
Expand Down
1 change: 0 additions & 1 deletion arch/x86/kernel/kvmclock.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
#include <linux/clocksource.h>
#include <linux/kvm_para.h>
#include <asm/pvclock.h>
#include <asm/arch_hooks.h>
#include <asm/msr.h>
#include <asm/apic.h>
#include <linux/percpu.h>
Expand Down
1 change: 0 additions & 1 deletion arch/x86/kernel/mca_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,6 @@
#include <linux/ioport.h>
#include <asm/uaccess.h>
#include <linux/init.h>
#include <asm/arch_hooks.h>

static unsigned char which_scsi;

Expand Down
1 change: 0 additions & 1 deletion arch/x86/kernel/paravirt.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
#include <asm/paravirt.h>
#include <asm/desc.h>
#include <asm/setup.h>
#include <asm/arch_hooks.h>
#include <asm/pgtable.h>
#include <asm/time.h>
#include <asm/pgalloc.h>
Expand Down
23 changes: 12 additions & 11 deletions arch/x86/kernel/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,9 @@
#include <asm/e820.h>
#include <asm/mpspec.h>
#include <asm/setup.h>
#include <asm/arch_hooks.h>
#include <asm/efi.h>
#include <asm/timer.h>
#include <asm/i8259.h>
#include <asm/sections.h>
#include <asm/dmi.h>
#include <asm/io_apic.h>
Expand Down Expand Up @@ -987,15 +988,15 @@ void __init setup_arch(char **cmdline_p)
#ifdef CONFIG_X86_32

/**
* pre_intr_init_hook - initialisation prior to setting up interrupt vectors
* 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.
**/
void __init pre_intr_init_hook(void)
void __init x86_quirk_pre_intr_init(void)
{
if (x86_quirks->arch_pre_intr_init) {
if (x86_quirks->arch_pre_intr_init())
Expand All @@ -1005,15 +1006,15 @@ void __init pre_intr_init_hook(void)
}

/**
* intr_init_hook - post gate setup interrupt initialisation
* x86_quirk_intr_init - post gate setup interrupt initialisation
*
* Description:
* Fill in any interrupts that may have been left out by the general
* init_IRQ() routine. interrupts having to do with the machine rather
* than the devices on the I/O bus (like APIC interrupts in intel MP
* systems) are started here.
**/
void __init intr_init_hook(void)
void __init x86_quirk_intr_init(void)
{
if (x86_quirks->arch_intr_init) {
if (x86_quirks->arch_intr_init())
Expand All @@ -1022,13 +1023,13 @@ void __init intr_init_hook(void)
}

/**
* trap_init_hook - initialise system specific traps
* x86_quirk_trap_init - initialise system specific traps
*
* Description:
* Called as the final act of trap_init(). Used in VISWS to initialise
* the various board specific APIC traps.
**/
void __init trap_init_hook(void)
void __init x86_quirk_trap_init(void)
{
if (x86_quirks->arch_trap_init) {
if (x86_quirks->arch_trap_init())
Expand All @@ -1044,23 +1045,23 @@ static struct irqaction irq0 = {
};

/**
* pre_time_init_hook - do any specific initialisations before.
* x86_quirk_pre_time_init - do any specific initialisations before.
*
**/
void __init pre_time_init_hook(void)
void __init x86_quirk_pre_time_init(void)
{
if (x86_quirks->arch_pre_time_init)
x86_quirks->arch_pre_time_init();
}

/**
* time_init_hook - do any specific initialisations for the system timer.
* x86_quirk_time_init - do any specific initialisations for the system timer.
*
* Description:
* Must plug the system timer interrupt source at HZ into the IRQ listed
* in irq_vectors.h:TIMER_IRQ
**/
void __init time_init_hook(void)
void __init x86_quirk_time_init(void)
{
if (x86_quirks->arch_time_init) {
/*
Expand Down
6 changes: 3 additions & 3 deletions arch/x86/kernel/time_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
#include <linux/time.h>
#include <linux/mca.h>

#include <asm/arch_hooks.h>
#include <asm/setup.h>
#include <asm/hpet.h>
#include <asm/time.h>
#include <asm/timer.h>
Expand Down Expand Up @@ -118,7 +118,7 @@ void __init hpet_time_init(void)
{
if (!hpet_enable())
setup_pit_timer();
time_init_hook();
x86_quirk_time_init();
}

/*
Expand All @@ -131,7 +131,7 @@ void __init hpet_time_init(void)
*/
void __init time_init(void)
{
pre_time_init_hook();
x86_quirk_pre_time_init();
tsc_init();
late_time_init = choose_time_init();
}
4 changes: 2 additions & 2 deletions arch/x86/kernel/traps.c
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@
#include <asm/proto.h>
#else
#include <asm/processor-flags.h>
#include <asm/arch_hooks.h>
#include <asm/setup.h>
#include <asm/traps.h>

#include "cpu/mcheck/mce.h"
Expand Down Expand Up @@ -1026,6 +1026,6 @@ void __init trap_init(void)
cpu_init();

#ifdef CONFIG_X86_32
trap_init_hook();
x86_quirk_trap_init();
#endif
}
1 change: 0 additions & 1 deletion arch/x86/kernel/visws_quirks.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@

#include <asm/visws/cobalt.h>
#include <asm/visws/piix4.h>
#include <asm/arch_hooks.h>
#include <asm/io_apic.h>
#include <asm/fixmap.h>
#include <asm/reboot.h>
Expand Down
1 change: 0 additions & 1 deletion arch/x86/kernel/vmiclock_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@

#include <asm/vmi.h>
#include <asm/vmi_time.h>
#include <asm/arch_hooks.h>
#include <asm/apicdef.h>
#include <asm/apic.h>
#include <asm/timer.h>
Expand Down

0 comments on commit 8e6dafd

Please sign in to comment.