summaryrefslogtreecommitdiffstats
path: root/include/asm-sparc/irq.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/asm-sparc/irq.h')
-rw-r--r--include/asm-sparc/irq.h43
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