Commit bbccc497 authored by James Bottomley's avatar James Bottomley

[x86 arch split]

Add better documentation to the hooks.
parent 835b1066
/* defines for inline arch setup functions */ /* defines for inline arch setup functions */
/**
* do_timer_interrupt_hook - hook into timer tick
* @regs: standard registers from interrupt
*
* Description:
* This hook is called immediately after the timer interrupt is ack'd.
* It's primary purpose is to allow architectures that don't possess
* individual per CPU clocks (like the CPU APICs supply) to broadcast the
* timer interrupt as a means of triggering reschedules etc.
**/
static inline void do_timer_interrupt_hook(struct pt_regs *regs) static inline void do_timer_interrupt_hook(struct pt_regs *regs)
{ {
do_timer(regs); do_timer(regs);
...@@ -22,6 +33,15 @@ static inline void do_timer_interrupt_hook(struct pt_regs *regs) ...@@ -22,6 +33,15 @@ static inline void do_timer_interrupt_hook(struct pt_regs *regs)
#define BUGGY_NEPTUN_TIMER #define BUGGY_NEPTUN_TIMER
/**
* do_timer_overflow - process a detected timer overflow condition
* @count: hardware timer interrupt count on overflow
*
* Description:
* This call is invoked when the jiffies count has not incremented but
* the hardware timer interrupt has. It means that a timer tick interrupt
* came along while the previous one was pending, thus a tick was missed
**/
static inline int do_timer_overflow(int count) static inline int do_timer_overflow(int count)
{ {
int i; int i;
......
/*
* This file is designed to contain the BUILD_INTERRUPT specifications for
* all of the extra named interrupt vectors used by the architecture.
* Usually this is the Inter Process Interrupts (IPIs)
*/
/* /*
* The following vectors are part of the Linux architecture, there * The following vectors are part of the Linux architecture, there
* is no hardware IRQ pin equivalent for them, they are triggered * is no hardware IRQ pin equivalent for them, they are triggered
......
/*
* This file should contain #defines for all of the interrupt vector
* numbers used by this architecture.
*
* In addition, there are some standard defines:
*
* FIRST_EXTERNAL_VECTOR:
* The first free place for external interrupts
*
* SYSCALL_VECTOR:
* The IRQ vector a syscall makes the user to kernel transition
* under.
*
* TIMER_IRQ:
* The IRQ number the timer interrupt comes in at.
*
* NR_IRQS:
* The total number of interrupt vectors (including all the
* architecture specific interrupts) needed.
*
*/
#ifndef _ASM_IRQ_VECTORS_H #ifndef _ASM_IRQ_VECTORS_H
#define _ASM_IRQ_VECTORS_H #define _ASM_IRQ_VECTORS_H
......
...@@ -9,6 +9,15 @@ ...@@ -9,6 +9,15 @@
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <asm/arch_hooks.h> #include <asm/arch_hooks.h>
/**
* pre_intr_init_hook - 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 pre_intr_init_hook(void)
{ {
init_ISA_irqs(); init_ISA_irqs();
...@@ -19,6 +28,15 @@ void __init pre_intr_init_hook(void) ...@@ -19,6 +28,15 @@ void __init pre_intr_init_hook(void)
*/ */
static struct irqaction irq2 = { no_action, 0, 0, "cascade", NULL, NULL}; static struct irqaction irq2 = { no_action, 0, 0, "cascade", NULL, NULL};
/**
* intr_init_hook - 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 intr_init_hook(void)
{ {
#ifdef CONFIG_X86_LOCAL_APIC #ifdef CONFIG_X86_LOCAL_APIC
...@@ -28,22 +46,52 @@ void __init intr_init_hook(void) ...@@ -28,22 +46,52 @@ void __init intr_init_hook(void)
setup_irq(2, &irq2); setup_irq(2, &irq2);
} }
/**
* pre_setup_arch_hook - hook called prior to any setup_arch() execution
*
* Description:
* generally used to activate any machine specific identification
* routines that may be needed before setup_arch() runs. On VISWS
* this is used to get the board revision and type.
**/
void __init pre_setup_arch_hook(void) void __init pre_setup_arch_hook(void)
{ {
} }
/**
* trap_init_hook - 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 trap_init_hook(void)
{ {
} }
static struct irqaction irq0 = { timer_interrupt, SA_INTERRUPT, 0, "timer", NULL, NULL}; static struct irqaction irq0 = { timer_interrupt, SA_INTERRUPT, 0, "timer", NULL, NULL};
/**
* time_init_hook - 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 time_init_hook(void)
{ {
setup_irq(0, &irq0); setup_irq(0, &irq0);
} }
#ifdef CONFIG_MCA #ifdef CONFIG_MCA
/**
* mca_nmi_hook - hook into MCA specific NMI chain
*
* Description:
* The MCA (Microchannel Arcitecture) has an NMI chain for NMI sources
* along the MCA bus. Use this to hook into that chain if you will need
* it.
**/
void __init mca_nmi_hook(void) void __init mca_nmi_hook(void)
{ {
/* If I recall correctly, there's a whole bunch of other things that /* If I recall correctly, there's a whole bunch of other things that
......
/* Hook for machine specific memory setup. /**
* machine_specific_memory_setup - Hook for machine specific memory setup.
* *
* This is included late in kernel/setup.c so that it can make use of all of * Description:
* the static functions. */ * This is included late in kernel/setup.c so that it can make
* use of all of the static functions.
**/
static inline char * __init machine_specific_memory_setup(void) static inline char * __init machine_specific_memory_setup(void)
{ {
......
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