Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bbdc2661 authored by Sam Ravnborg's avatar Sam Ravnborg Committed by David S. Miller
Browse files

sparc32: introduce sparc_irq_config



sparc_irq_config is used to hold the platform specific irq setup.

Signed-off-by: default avatarSam Ravnborg <sam@ravnborg.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent a2a211cb
Loading
Loading
Loading
Loading
+11 −6
Original line number Diff line number Diff line
#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
@@ -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)
+3 −7
Original line number Diff line number Diff line
@@ -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;
@@ -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)
+1 −1
Original line number Diff line number Diff line
@@ -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);
+3 −1
Original line number Diff line number Diff line
@@ -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);
+3 −1
Original line number Diff line number Diff line
@@ -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);
Loading