Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
mips
loongson
fuloong-2e
irq.c
Go to the documentation of this file.
1
/*
2
* Copyright (C) 2007 Lemote Inc. & Insititute of Computing Technology
3
* Author: Fuxin Zhang, zhangfx@lemote.com
4
*
5
* This program is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License as published by the
7
* Free Software Foundation; either version 2 of the License, or (at your
8
* option) any later version.
9
*/
10
#include <
linux/interrupt.h
>
11
12
#include <
asm/irq_cpu.h
>
13
#include <asm/i8259.h>
14
15
#include <
loongson.h
>
16
17
static
void
i8259_irqdispatch(
void
)
18
{
19
int
irq
;
20
21
irq =
i8259_irq
();
22
if
(irq >= 0)
23
do_IRQ
(irq);
24
else
25
spurious_interrupt
();
26
}
27
28
asmlinkage
void
mach_irq_dispatch
(
unsigned
int
pending)
29
{
30
if
(pending &
CAUSEF_IP7
)
31
do_IRQ
(
MIPS_CPU_IRQ_BASE
+ 7);
32
else
if
(pending &
CAUSEF_IP6
)
/* perf counter loverflow */
33
do_perfcnt_IRQ();
34
else
if
(pending &
CAUSEF_IP5
)
35
i8259_irqdispatch();
36
else
if
(pending &
CAUSEF_IP2
)
37
bonito_irqdispatch
();
38
else
39
spurious_interrupt
();
40
}
41
42
static
struct
irqaction
cascade_irqaction = {
43
.handler =
no_action
,
44
.name =
"cascade"
,
45
.flags =
IRQF_NO_THREAD
,
46
};
47
48
void
__init
mach_init_irq
(
void
)
49
{
50
/* init all controller
51
* 0-15 ------> i8259 interrupt
52
* 16-23 ------> mips cpu interrupt
53
* 32-63 ------> bonito irq
54
*/
55
56
/* most bonito irq should be level triggered */
57
LOONGSON_INTEDGE
=
LOONGSON_ICU_SYSTEMERR
|
LOONGSON_ICU_MASTERERR
|
58
LOONGSON_ICU_RETRYERR
|
LOONGSON_ICU_MBOXES
;
59
60
/* Sets the first-level interrupt dispatcher. */
61
mips_cpu_irq_init
();
62
init_i8259_irqs
();
63
bonito_irq_init
();
64
65
/* bonito irq at IP2 */
66
setup_irq
(
MIPS_CPU_IRQ_BASE
+ 2, &cascade_irqaction);
67
/* 8259 irq at IP5 */
68
setup_irq
(
MIPS_CPU_IRQ_BASE
+ 5, &cascade_irqaction);
69
}
Generated on Thu Jan 10 2013 12:51:29 for Linux Kernel by
1.8.2