Skip to content

Commit

Permalink
sparc32: introduce sparc_irq_config
Browse files Browse the repository at this point in the history
sparc_irq_config is used to hold the platform specific irq setup.

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Sam Ravnborg authored and David S. Miller committed Mar 17, 2011
1 parent a2a211c commit bbdc266
Show file tree
Hide file tree
Showing 7 changed files with 25 additions and 18 deletions.
17 changes: 11 additions & 6 deletions arch/sparc/kernel/irq.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,16 @@
#include <asm/btfixup.h>

/*
* Platform specific irq configuration
* The individual platforms assign their platform
* specifics in their init functions.
*/
struct sparc_irq_config {
void (*init_timers)(irq_handler_t);
};
extern struct sparc_irq_config sparc_irq_config;


/* Dave Redman (djhr@tadpole.co.uk)
* changed these to function pointers.. it saves cycles and will allow
* the irq dependencies to be split into different files at a later date
Expand Down Expand Up @@ -45,12 +56,6 @@ static inline void load_profile_irq(int cpu, int limit)
BTFIXUP_CALL(load_profile_irq)(cpu, limit);
}

extern void (*sparc_init_timers)(irq_handler_t lvl10_irq);

extern void claim_ticker14(irq_handler_t irq_handler,
int irq,
unsigned int timeout);

#ifdef CONFIG_SMP
BTFIXUPDEF_CALL(void, set_cpu_int, int, int)
BTFIXUPDEF_CALL(void, clear_cpu_int, int, int)
Expand Down
10 changes: 3 additions & 7 deletions arch/sparc/kernel/irq_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@
#define SMP_NOP3
#endif /* SMP */

/* platform specific irq setup */
struct sparc_irq_config sparc_irq_config;

unsigned long arch_local_irq_save(void)
{
unsigned long retval;
Expand Down Expand Up @@ -100,14 +103,7 @@ EXPORT_SYMBOL(arch_local_irq_restore);
*
*/

static void irq_panic(void)
{
prom_printf("machine: %s doesn't have irq handlers defined!\n",
&cputypval[0]);
prom_halt();
}

void (*sparc_init_timers)(irq_handler_t) = (void (*)(irq_handler_t))irq_panic;

/*
* Dave Redman (djhr@tadpole.co.uk)
Expand Down
2 changes: 1 addition & 1 deletion arch/sparc/kernel/leon_kernel.c
Original file line number Diff line number Diff line change
Expand Up @@ -347,7 +347,7 @@ void leon_enable_irq_cpu(unsigned int irq_nr, unsigned int cpu)

void __init leon_init_IRQ(void)
{
sparc_init_timers = leon_init_timers;
sparc_irq_config.init_timers = leon_init_timers;

BTFIXUPSET_CALL(enable_irq, leon_enable_irq, BTFIXUPCALL_NORM);
BTFIXUPSET_CALL(disable_irq, leon_disable_irq, BTFIXUPCALL_NORM);
Expand Down
4 changes: 3 additions & 1 deletion arch/sparc/kernel/sun4c_irq.c
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,9 @@ void __init sun4c_init_IRQ(void)
BTFIXUPSET_CALL(disable_pil_irq, sun4c_disable_irq, BTFIXUPCALL_NORM);
BTFIXUPSET_CALL(clear_clock_irq, sun4c_clear_clock_irq, BTFIXUPCALL_NORM);
BTFIXUPSET_CALL(load_profile_irq, sun4c_load_profile_irq, BTFIXUPCALL_NOP);
sparc_init_timers = sun4c_init_timers;

sparc_irq_config.init_timers = sun4c_init_timers;

#ifdef CONFIG_SMP
BTFIXUPSET_CALL(set_cpu_int, sun4c_nop, BTFIXUPCALL_NOP);
BTFIXUPSET_CALL(clear_cpu_int, sun4c_nop, BTFIXUPCALL_NOP);
Expand Down
4 changes: 3 additions & 1 deletion arch/sparc/kernel/sun4d_irq.c
Original file line number Diff line number Diff line change
Expand Up @@ -557,7 +557,9 @@ void __init sun4d_init_IRQ(void)
BTFIXUPSET_CALL(disable_irq, sun4d_disable_irq, BTFIXUPCALL_NORM);
BTFIXUPSET_CALL(clear_clock_irq, sun4d_clear_clock_irq, BTFIXUPCALL_NORM);
BTFIXUPSET_CALL(load_profile_irq, sun4d_load_profile_irq, BTFIXUPCALL_NORM);
sparc_init_timers = sun4d_init_timers;

sparc_irq_config.init_timers = sun4d_init_timers;

#ifdef CONFIG_SMP
BTFIXUPSET_CALL(set_cpu_int, sun4d_set_cpu_int, BTFIXUPCALL_NORM);
BTFIXUPSET_CALL(clear_cpu_int, sun4d_clear_ipi, BTFIXUPCALL_NOP);
Expand Down
4 changes: 3 additions & 1 deletion arch/sparc/kernel/sun4m_irq.c
Original file line number Diff line number Diff line change
Expand Up @@ -470,7 +470,9 @@ void __init sun4m_init_IRQ(void)
BTFIXUPSET_CALL(disable_pil_irq, sun4m_disable_pil_irq, BTFIXUPCALL_NORM);
BTFIXUPSET_CALL(clear_clock_irq, sun4m_clear_clock_irq, BTFIXUPCALL_NORM);
BTFIXUPSET_CALL(load_profile_irq, sun4m_load_profile_irq, BTFIXUPCALL_NORM);
sparc_init_timers = sun4m_init_timers;

sparc_irq_config.init_timers = sun4m_init_timers;

#ifdef CONFIG_SMP
BTFIXUPSET_CALL(set_cpu_int, sun4m_send_ipi, BTFIXUPCALL_NORM);
BTFIXUPSET_CALL(clear_cpu_int, sun4m_clear_ipi, BTFIXUPCALL_NORM);
Expand Down
2 changes: 1 addition & 1 deletion arch/sparc/kernel/time_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,7 @@ static void __init sbus_time_init(void)

btfixup();

sparc_init_timers(timer_interrupt);
sparc_irq_config.init_timers(timer_interrupt);
}

void __init time_init(void)
Expand Down

0 comments on commit bbdc266

Please sign in to comment.