summaryrefslogtreecommitdiffstats
path: root/include/asm-ia64/hw_irq.h
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>2000-04-28 01:09:25 +0000
committerRalf Baechle <ralf@linux-mips.org>2000-04-28 01:09:25 +0000
commitb9ba7aeb165cffecdffb60aec8c3fa8d590d9ca9 (patch)
tree42d07b0c7246ae2536a702e7c5de9e2732341116 /include/asm-ia64/hw_irq.h
parent7406b0a326f2d70ade2671c37d1beef62249db97 (diff)
Merge with 2.3.99-pre6.
Diffstat (limited to 'include/asm-ia64/hw_irq.h')
-rw-r--r--include/asm-ia64/hw_irq.h27
1 files changed, 17 insertions, 10 deletions
diff --git a/include/asm-ia64/hw_irq.h b/include/asm-ia64/hw_irq.h
index b897bea30..e4dd5c1ee 100644
--- a/include/asm-ia64/hw_irq.h
+++ b/include/asm-ia64/hw_irq.h
@@ -11,8 +11,7 @@
#include <linux/types.h>
#include <asm/ptrace.h>
-
-#define NR_ISA_IRQS 16
+#include <asm/smp.h>
/*
* 0 special
@@ -42,6 +41,8 @@
/* IA64 inter-cpu interrupt related definitions */
+#define IPI_DEFAULT_BASE_ADDR 0xfee00000
+
/* Delivery modes for inter-cpu interrupts */
enum {
IA64_IPI_DM_INT = 0x0, /* pend an external interrupt */
@@ -57,20 +58,26 @@ enum {
extern __u8 isa_irq_to_vector_map[16];
#define isa_irq_to_vector(x) isa_irq_to_vector_map[(x)]
-extern struct hw_interrupt_type irq_type_ia64_internal; /* CPU-internal interrupt controller */
+extern unsigned long ipi_base_addr;
-extern void ipi_send (int cpu, int vector, int delivery_mode);
+extern struct hw_interrupt_type irq_type_ia64_sapic; /* CPU-internal interrupt controller */
-#ifdef CONFIG_SMP
-extern void handle_IPI(int irq, void *dev_id, struct pt_regs *regs);
+extern void ipi_send (int cpu, int vector, int delivery_mode, int redirect);
static inline void
-hw_resend_irq (struct hw_interrupt_type *h, unsigned int i)
+hw_resend_irq (struct hw_interrupt_type *h, unsigned int vector)
{
- send_IPI_self(i);
-}
+ int my_cpu_id;
+
+#ifdef CONFIG_SMP
+ my_cpu_id = smp_processor_id();
#else
-# define hw_resend_irq(h,i)
+ __u64 lid;
+
+ __asm__ ("mov %0=cr.lid" : "=r"(lid));
+ my_cpu_id = (lid >> 24) & 0xff; /* extract id (ignore eid) */
#endif
+ ipi_send(my_cpu_id, vector, IA64_IPI_DM_INT, 0);
+}
#endif /* _ASM_IA64_HW_IRQ_H */