diff options
| author | Steven Whitehouse <swhiteho@redhat.com> | 2006-09-28 08:29:59 -0400 |
|---|---|---|
| committer | Steven Whitehouse <swhiteho@redhat.com> | 2006-09-28 08:29:59 -0400 |
| commit | 185a257f2f73bcd89050ad02da5bedbc28fc43fa (patch) | |
| tree | 5e32586114534ed3f2165614cba3d578f5d87307 /arch/avr32/kernel/irq.c | |
| parent | 3f1a9aaeffd8d1cbc5ab9776c45cbd66af1c9699 (diff) | |
| parent | a77c64c1a641950626181b4857abb701d8f38ccc (diff) | |
Merge branch 'master' into gfs2
Diffstat (limited to 'arch/avr32/kernel/irq.c')
| -rw-r--r-- | arch/avr32/kernel/irq.c | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/arch/avr32/kernel/irq.c b/arch/avr32/kernel/irq.c new file mode 100644 index 000000000000..856f3548e664 --- /dev/null +++ b/arch/avr32/kernel/irq.c | |||
| @@ -0,0 +1,71 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2004-2006 Atmel Corporation | ||
| 3 | * | ||
| 4 | * Based on arch/i386/kernel/irq.c | ||
| 5 | * Copyright (C) 1992, 1998 Linus Torvalds, Ingo Molnar | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or modify | ||
| 8 | * it under the terms of the GNU General Public License version 2 as | ||
| 9 | * published by the Free Software Foundation. | ||
| 10 | * | ||
| 11 | * This file contains the code used by various IRQ handling routines: | ||
| 12 | * asking for different IRQ's should be done through these routines | ||
| 13 | * instead of just grabbing them. Thus setups with different IRQ numbers | ||
| 14 | * shouldn't result in any weird surprises, and installing new handlers | ||
| 15 | * should be easier. | ||
| 16 | * | ||
| 17 | * IRQ's are in fact implemented a bit like signal handlers for the kernel. | ||
| 18 | * Naturally it's not a 1:1 relation, but there are similarities. | ||
| 19 | */ | ||
| 20 | |||
| 21 | #include <linux/interrupt.h> | ||
| 22 | #include <linux/irq.h> | ||
| 23 | #include <linux/kernel_stat.h> | ||
| 24 | #include <linux/proc_fs.h> | ||
| 25 | #include <linux/seq_file.h> | ||
| 26 | #include <linux/sysdev.h> | ||
| 27 | |||
| 28 | /* | ||
| 29 | * 'what should we do if we get a hw irq event on an illegal vector'. | ||
| 30 | * each architecture has to answer this themselves. | ||
| 31 | */ | ||
| 32 | void ack_bad_irq(unsigned int irq) | ||
| 33 | { | ||
| 34 | printk("unexpected IRQ %u\n", irq); | ||
| 35 | } | ||
| 36 | |||
| 37 | #ifdef CONFIG_PROC_FS | ||
| 38 | int show_interrupts(struct seq_file *p, void *v) | ||
| 39 | { | ||
| 40 | int i = *(loff_t *)v, cpu; | ||
| 41 | struct irqaction *action; | ||
| 42 | unsigned long flags; | ||
| 43 | |||
| 44 | if (i == 0) { | ||
| 45 | seq_puts(p, " "); | ||
| 46 | for_each_online_cpu(cpu) | ||
| 47 | seq_printf(p, "CPU%d ", cpu); | ||
| 48 | seq_putc(p, '\n'); | ||
| 49 | } | ||
| 50 | |||
| 51 | if (i < NR_IRQS) { | ||
| 52 | spin_lock_irqsave(&irq_desc[i].lock, flags); | ||
| 53 | action = irq_desc[i].action; | ||
| 54 | if (!action) | ||
| 55 | goto unlock; | ||
| 56 | |||
| 57 | seq_printf(p, "%3d: ", i); | ||
| 58 | for_each_online_cpu(cpu) | ||
| 59 | seq_printf(p, "%10u ", kstat_cpu(cpu).irqs[i]); | ||
| 60 | seq_printf(p, " %s", action->name); | ||
| 61 | for (action = action->next; action; action = action->next) | ||
| 62 | seq_printf(p, ", %s", action->name); | ||
| 63 | |||
| 64 | seq_putc(p, '\n'); | ||
| 65 | unlock: | ||
| 66 | spin_unlock_irqrestore(&irq_desc[i].lock, flags); | ||
| 67 | } | ||
| 68 | |||
| 69 | return 0; | ||
| 70 | } | ||
| 71 | #endif | ||
