~ubuntu-branches/ubuntu/precise/linux-lowlatency/precise

« back to all changes in this revision

Viewing changes to arch/mips/cobalt/irq.c

  • Committer: Package Import Robot
  • Author(s): Alessio Igor Bogani
  • Date: 2011-10-26 11:13:05 UTC
  • Revision ID: package-import@ubuntu.com-20111026111305-tz023xykf0i6eosh
Tags: upstream-3.2.0
ImportĀ upstreamĀ versionĀ 3.2.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * IRQ vector handles
 
3
 *
 
4
 * This file is subject to the terms and conditions of the GNU General Public
 
5
 * License.  See the file "COPYING" in the main directory of this archive
 
6
 * for more details.
 
7
 *
 
8
 * Copyright (C) 1995, 1996, 1997, 2003 by Ralf Baechle
 
9
 */
 
10
#include <linux/kernel.h>
 
11
#include <linux/init.h>
 
12
#include <linux/irq.h>
 
13
#include <linux/interrupt.h>
 
14
#include <linux/pci.h>
 
15
 
 
16
#include <asm/i8259.h>
 
17
#include <asm/irq_cpu.h>
 
18
#include <asm/irq_gt641xx.h>
 
19
#include <asm/gt64120.h>
 
20
 
 
21
#include <irq.h>
 
22
 
 
23
asmlinkage void plat_irq_dispatch(void)
 
24
{
 
25
        unsigned pending = read_c0_status() & read_c0_cause() & ST0_IM;
 
26
        int irq;
 
27
 
 
28
        if (pending & CAUSEF_IP2)
 
29
                gt641xx_irq_dispatch();
 
30
        else if (pending & CAUSEF_IP6) {
 
31
                irq = i8259_irq();
 
32
                if (irq < 0)
 
33
                        spurious_interrupt();
 
34
                else
 
35
                        do_IRQ(irq);
 
36
        } else if (pending & CAUSEF_IP3)
 
37
                do_IRQ(MIPS_CPU_IRQ_BASE + 3);
 
38
        else if (pending & CAUSEF_IP4)
 
39
                do_IRQ(MIPS_CPU_IRQ_BASE + 4);
 
40
        else if (pending & CAUSEF_IP5)
 
41
                do_IRQ(MIPS_CPU_IRQ_BASE + 5);
 
42
        else if (pending & CAUSEF_IP7)
 
43
                do_IRQ(MIPS_CPU_IRQ_BASE + 7);
 
44
        else
 
45
                spurious_interrupt();
 
46
}
 
47
 
 
48
static struct irqaction cascade = {
 
49
        .handler        = no_action,
 
50
        .name           = "cascade",
 
51
        .flags          = IRQF_NO_THREAD,
 
52
};
 
53
 
 
54
void __init arch_init_irq(void)
 
55
{
 
56
        mips_cpu_irq_init();
 
57
        gt641xx_irq_init();
 
58
        init_i8259_irqs();
 
59
 
 
60
        setup_irq(GT641XX_CASCADE_IRQ, &cascade);
 
61
        setup_irq(I8259_CASCADE_IRQ, &cascade);
 
62
}