patch-2.3.43 linux/include/asm-ia64/irq.h
Next file: linux/include/asm-ia64/kdbsupport.h
Previous file: linux/include/asm-ia64/ipcbuf.h
Back to the patch index
Back to the overall index
- Lines: 121
- Date:
Wed Feb 9 19:45:43 2000
- Orig file:
v2.3.42/linux/include/asm-ia64/irq.h
- Orig date:
Wed Dec 31 16:00:00 1969
diff -u --recursive --new-file v2.3.42/linux/include/asm-ia64/irq.h linux/include/asm-ia64/irq.h
@@ -0,0 +1,120 @@
+#ifndef _ASM_IA64_IRQ_H
+#define _ASM_IA64_IRQ_H
+
+/*
+ * Copyright (C) 1999-2000 Hewlett-Packard Co
+ * Copyright (C) 1998-2000 David Mosberger-Tang <davidm@hpl.hp.com>
+ * Copyright (C) 1998 Stephane Eranian <eranian@hpl.hp.com>
+ *
+ * 11/24/98 S.Eranian updated TIMER_IRQ and irq_cannonicalize
+ * 01/20/99 S.Eranian added keyboard interrupt
+ */
+
+#include <linux/config.h>
+#include <linux/spinlock.h>
+
+#include <asm/ptrace.h>
+
+#define NR_IRQS 256
+#define NR_ISA_IRQS 16
+
+/*
+ * 0 special
+ *
+ * 1,3-14 are reserved from firmware
+ *
+ * 16-255 (vectored external interrupts) are available
+ *
+ * 15 spurious interrupt (see IVR)
+ *
+ * 16 lowest priority, 255 highest priority
+ *
+ * 15 classes of 16 interrupts each.
+ */
+#define IA64_MIN_VECTORED_IRQ 16
+#define IA64_MAX_VECTORED_IRQ 255
+
+#define IA64_SPURIOUS_INT 0x0f
+#define PERFMON_IRQ 0x28 /* performanc monitor interrupt vector */
+#define TIMER_IRQ 0xef /* use highest-prio group 15 interrupt for timer */
+#define IPI_IRQ 0xfe /* inter-processor interrupt vector */
+#define CMC_IRQ 0xff /* correctable machine-check interrupt vector */
+
+#define IA64_MIN_VECTORED_IRQ 16
+#define IA64_MAX_VECTORED_IRQ 255
+
+extern __u8 irq_to_vector_map[IA64_MIN_VECTORED_IRQ];
+#define map_legacy_irq(x) (((x) < IA64_MIN_VECTORED_IRQ) ? irq_to_vector_map[(x)] : (x))
+
+#define IRQ_INPROGRESS (1 << 0) /* irq handler active */
+#define IRQ_ENABLED (1 << 1) /* irq enabled */
+#define IRQ_PENDING (1 << 2) /* irq pending */
+#define IRQ_REPLAY (1 << 3) /* irq has been replayed but not acked yet */
+#define IRQ_AUTODETECT (1 << 4) /* irq is being autodetected */
+#define IRQ_WAITING (1 << 5) /* used for autodetection: irq not yet seen yet */
+
+struct hw_interrupt_type {
+ const char *typename;
+ void (*init) (unsigned long addr);
+ void (*startup) (unsigned int irq);
+ void (*shutdown) (unsigned int irq);
+ int (*handle) (unsigned int irq, struct pt_regs *regs);
+ void (*enable) (unsigned int irq);
+ void (*disable) (unsigned int irq);
+};
+
+extern struct hw_interrupt_type irq_type_default; /* dummy interrupt controller */
+extern struct hw_interrupt_type irq_type_ia64_internal; /* CPU-internal interrupt controller */
+
+struct irq_desc {
+ unsigned int type; /* type of interrupt (level vs. edge triggered) */
+ unsigned int status; /* see above */
+ unsigned int depth; /* disable depth for nested irq disables */
+ struct hw_interrupt_type *handler;
+ struct irqaction *action; /* irq action list */
+};
+
+extern struct irq_desc irq_desc[NR_IRQS];
+
+extern spinlock_t irq_controller_lock;
+
+/* IA64 inter-cpu interrupt related definitions */
+
+/* Delivery modes for inter-cpu interrupts */
+enum {
+ IA64_IPI_DM_INT = 0x0, /* pend an external interrupt */
+ IA64_IPI_DM_PMI = 0x2, /* pend a PMI */
+ IA64_IPI_DM_NMI = 0x4, /* pend an NMI (vector 2) */
+ IA64_IPI_DM_INIT = 0x5, /* pend an INIT interrupt */
+ IA64_IPI_DM_EXTINT = 0x7, /* pend an 8259-compatible interrupt. */
+};
+
+#define IA64_BUS_ID(cpu) (cpu >> 8)
+#define IA64_LOCAL_ID(cpu) (cpu & 0xff)
+
+static __inline__ int
+irq_cannonicalize (int irq)
+{
+ /*
+ * We do the legacy thing here of pretending that irqs < 16
+ * are 8259 irqs.
+ */
+ return ((irq == 2) ? 9 : irq);
+}
+
+extern int invoke_irq_handlers (unsigned int irq, struct pt_regs *regs, struct irqaction *action);
+extern void disable_irq (unsigned int);
+extern void disable_irq_nosync (unsigned int);
+extern void enable_irq (unsigned int);
+extern void ipi_send (int cpu, int vector, int delivery_mode);
+
+#ifdef CONFIG_SMP
+ extern void irq_enter(int cpu, int irq);
+ extern void irq_exit(int cpu, int irq);
+ extern void handle_IPI(int irq, void *dev_id, struct pt_regs *regs);
+#else
+# define irq_enter(cpu, irq) (++local_irq_count[cpu])
+# define irq_exit(cpu, irq) (--local_irq_count[cpu])
+#endif
+
+#endif /* _ASM_IA64_IRQ_H */
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)