diff options
Diffstat (limited to 'include/asm-sparc/irq.h')
-rw-r--r-- | include/asm-sparc/irq.h | 43 |
1 files changed, 39 insertions, 4 deletions
diff --git a/include/asm-sparc/irq.h b/include/asm-sparc/irq.h index 7b1a13efb..16c2ca5a1 100644 --- a/include/asm-sparc/irq.h +++ b/include/asm-sparc/irq.h @@ -1,4 +1,4 @@ -/* $Id: irq.h,v 1.14 1996/08/29 09:48:18 davem Exp $ +/* $Id: irq.h,v 1.17 1997/04/18 05:44:52 davem Exp $ * irq.h: IRQ registers on the Sparc. * * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu) @@ -13,6 +13,38 @@ #define NR_IRQS 15 +/* IRQ handler dispatch entry and exit. */ +#ifdef __SMP__ +extern __inline__ void irq_enter(int cpu, int irq) +{ + register int proc asm("g1"); + proc = cpu; + __asm__ __volatile__(" + mov %%o7, %%g4 + call ___irq_enter + add %%o7, 8, %%o7 +" : "=&r" (proc) + : "0" (proc) + : "g2", "g3", "g4", "g5", "memory", "cc"); +} + +extern __inline__ void irq_exit(int cpu, int irq) +{ + register int proc asm("g7"); + proc = cpu; + __asm__ __volatile__(" + mov %%o7, %%g4 + call ___irq_exit + add %%o7, 8, %%o7 +" : "=&r" (proc) + : "0" (proc) + : "g1", "g2", "g3", "g4", "g5", "memory", "cc"); +} +#else +#define irq_enter(cpu, irq) (local_irq_count[cpu]++) +#define irq_exit(cpu, irq) (local_irq_count[cpu]--) +#endif + /* 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 @@ -20,9 +52,11 @@ */ extern void (*disable_irq)(unsigned int); extern void (*enable_irq)(unsigned int); -extern void (*clear_clock_irq)( void ); -extern void (*clear_profile_irq)( void ); -extern void (*load_profile_irq)( unsigned int timeout ); +extern void (*disable_pil_irq)(unsigned int); +extern void (*enable_pil_irq)(unsigned int); +extern void (*clear_clock_irq)(void); +extern void (*clear_profile_irq)(int); +extern void (*load_profile_irq)(int cpu, unsigned int timeout); extern void (*init_timers)(void (*lvl10_irq)(int, void *, struct pt_regs *)); extern void claim_ticker14(void (*irq_handler)(int, void *, struct pt_regs *), int irq, @@ -122,5 +156,6 @@ extern struct sun4m_intregs *sun4m_interrupts; #define SUN4M_INT_SBUSBITS 0x00003F80 /* sbus int bits */ #define SUN4M_INT_SBUS(x) (1 << (x+7)) +#define SUN4M_INT_VME(x) (1 << (x)) #endif |