git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git]
/
arch
/
mips
/
jmr3927
/
rbhma3100
/
irq.c
diff --git
a/arch/mips/jmr3927/rbhma3100/irq.c
b/arch/mips/jmr3927/rbhma3100/irq.c
index
b9799b8
..
11304d1
100644
(file)
--- a/
arch/mips/jmr3927/rbhma3100/irq.c
+++ b/
arch/mips/jmr3927/rbhma3100/irq.c
@@
-77,8
+77,6
@@
static int jmr3927_gen_iack(void)
}
#endif
}
#endif
-extern asmlinkage void jmr3927_IRQ(void);
-
#define irc_dlevel 0
#define irc_elevel 1
#define irc_dlevel 0
#define irc_elevel 1
@@
-113,7
+111,8
@@
static void jmr3927_irq_ack(unsigned int irq)
static void jmr3927_irq_end(unsigned int irq)
{
static void jmr3927_irq_end(unsigned int irq)
{
- jmr3927_irq_enable(irq);
+ if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS)))
+ jmr3927_irq_enable(irq);
}
static void jmr3927_irq_disable(unsigned int irq_nr)
}
static void jmr3927_irq_disable(unsigned int irq_nr)
@@
-121,7
+120,7
@@
static void jmr3927_irq_disable(unsigned int irq_nr)
struct tb_irq_space* sp;
unsigned long flags;
struct tb_irq_space* sp;
unsigned long flags;
- spinlock_irqsave(&jmr3927_irq_lock, flags);
+ spin
_
lock_irqsave(&jmr3927_irq_lock, flags);
for (sp = tb_irq_spaces; sp; sp = sp->next) {
if (sp->start_irqno <= irq_nr &&
irq_nr < sp->start_irqno + sp->nr_irqs) {
for (sp = tb_irq_spaces; sp; sp = sp->next) {
if (sp->start_irqno <= irq_nr &&
irq_nr < sp->start_irqno + sp->nr_irqs) {
@@
-131,7
+130,7
@@
static void jmr3927_irq_disable(unsigned int irq_nr)
break;
}
}
break;
}
}
- spinlock_irqrestore(&jmr3927_irq_lock, flags);
+ spin
_un
lock_irqrestore(&jmr3927_irq_lock, flags);
}
static void jmr3927_irq_enable(unsigned int irq_nr)
}
static void jmr3927_irq_enable(unsigned int irq_nr)
@@
-139,7
+138,7
@@
static void jmr3927_irq_enable(unsigned int irq_nr)
struct tb_irq_space* sp;
unsigned long flags;
struct tb_irq_space* sp;
unsigned long flags;
- spinlock_irqsave(&jmr3927_irq_lock, flags);
+ spin
_
lock_irqsave(&jmr3927_irq_lock, flags);
for (sp = tb_irq_spaces; sp; sp = sp->next) {
if (sp->start_irqno <= irq_nr &&
irq_nr < sp->start_irqno + sp->nr_irqs) {
for (sp = tb_irq_spaces; sp; sp = sp->next) {
if (sp->start_irqno <= irq_nr &&
irq_nr < sp->start_irqno + sp->nr_irqs) {
@@
-149,7
+148,7
@@
static void jmr3927_irq_enable(unsigned int irq_nr)
break;
}
}
break;
}
}
- spinlock_irqrestore(&jmr3927_irq_lock, flags);
+ spin
_un
lock_irqrestore(&jmr3927_irq_lock, flags);
}
/*
}
/*
@@
-205,7
+204,10
@@
static void mask_irq_irc(int irq_nr, int space_id)
/* update IRCSR */
tx3927_ircptr->imr = 0;
tx3927_ircptr->imr = irc_elevel;
/* update IRCSR */
tx3927_ircptr->imr = 0;
tx3927_ircptr->imr = irc_elevel;
+ /* flush write buffer */
+ (void)tx3927_ircptr->ssr;
}
}
+
static void unmask_irq_irc(int irq_nr, int space_id)
{
volatile unsigned long *ilrp = &tx3927_ircptr->ilr[irq_nr / 2];
static void unmask_irq_irc(int irq_nr, int space_id)
{
volatile unsigned long *ilrp = &tx3927_ircptr->ilr[irq_nr / 2];
@@
-258,7
+260,7
@@
void jmr3927_spurious(struct pt_regs *regs)
regs->cp0_cause, regs->cp0_epc, regs->regs[31]);
}
regs->cp0_cause, regs->cp0_epc, regs->regs[31]);
}
-
void jmr3927_irc_irq
dispatch(struct pt_regs *regs)
+
asmlinkage void plat_irq_
dispatch(struct pt_regs *regs)
{
int irq;
{
int irq;
@@
-276,7
+278,7
@@
void jmr3927_irc_irqdispatch(struct pt_regs *regs)
do_IRQ(irq + JMR3927_IRQ_IRC, regs);
}
do_IRQ(irq + JMR3927_IRQ_IRC, regs);
}
-static
void
jmr3927_ioc_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static
irqreturn_t
jmr3927_ioc_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{
unsigned char istat = jmr3927_ioc_reg_in(JMR3927_IOC_INTS2_ADDR);
int i;
{
unsigned char istat = jmr3927_ioc_reg_in(JMR3927_IOC_INTS2_ADDR);
int i;
@@
-287,13
+289,14
@@
static void jmr3927_ioc_interrupt(int irq, void *dev_id, struct pt_regs *regs)
do_IRQ(irq, regs);
}
}
do_IRQ(irq, regs);
}
}
+ return IRQ_HANDLED;
}
static struct irqaction ioc_action = {
jmr3927_ioc_interrupt, 0, CPU_MASK_NONE, "IOC", NULL, NULL,
};
}
static struct irqaction ioc_action = {
jmr3927_ioc_interrupt, 0, CPU_MASK_NONE, "IOC", NULL, NULL,
};
-static
void
jmr3927_isac_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static
irqreturn_t
jmr3927_isac_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{
unsigned char istat = jmr3927_isac_reg_in(JMR3927_ISAC_INTS2_ADDR);
int i;
{
unsigned char istat = jmr3927_isac_reg_in(JMR3927_ISAC_INTS2_ADDR);
int i;
@@
-304,6
+307,7
@@
static void jmr3927_isac_interrupt(int irq, void *dev_id, struct pt_regs *regs)
do_IRQ(irq, regs);
}
}
do_IRQ(irq, regs);
}
}
+ return IRQ_HANDLED;
}
static struct irqaction isac_action = {
}
static struct irqaction isac_action = {
@@
-311,19
+315,23
@@
static struct irqaction isac_action = {
};
};
-static
void
jmr3927_isaerr_interrupt(int irq, void * dev_id, struct pt_regs * regs)
+static
irqreturn_t
jmr3927_isaerr_interrupt(int irq, void * dev_id, struct pt_regs * regs)
{
printk(KERN_WARNING "ISA error interrupt (irq 0x%x).\n", irq);
{
printk(KERN_WARNING "ISA error interrupt (irq 0x%x).\n", irq);
+
+ return IRQ_HANDLED;
}
static struct irqaction isaerr_action = {
jmr3927_isaerr_interrupt, 0, CPU_MASK_NONE, "ISA error", NULL, NULL,
};
}
static struct irqaction isaerr_action = {
jmr3927_isaerr_interrupt, 0, CPU_MASK_NONE, "ISA error", NULL, NULL,
};
-static
void
jmr3927_pcierr_interrupt(int irq, void * dev_id, struct pt_regs * regs)
+static
irqreturn_t
jmr3927_pcierr_interrupt(int irq, void * dev_id, struct pt_regs * regs)
{
printk(KERN_WARNING "PCI error interrupt (irq 0x%x).\n", irq);
printk(KERN_WARNING "pcistat:%02x, lbstat:%04lx\n",
tx3927_pcicptr->pcistat, tx3927_pcicptr->lbstat);
{
printk(KERN_WARNING "PCI error interrupt (irq 0x%x).\n", irq);
printk(KERN_WARNING "pcistat:%02x, lbstat:%04lx\n",
tx3927_pcicptr->pcistat, tx3927_pcicptr->lbstat);
+
+ return IRQ_HANDLED;
}
static struct irqaction pcierr_action = {
jmr3927_pcierr_interrupt, 0, CPU_MASK_NONE, "PCI error", NULL, NULL,
}
static struct irqaction pcierr_action = {
jmr3927_pcierr_interrupt, 0, CPU_MASK_NONE, "PCI error", NULL, NULL,
@@
-388,8
+396,6
@@
void __init arch_init_irq(void)
jmr3927_irq_init(NR_ISA_IRQS);
jmr3927_irq_init(NR_ISA_IRQS);
- set_except_vector(0, jmr3927_IRQ);
-
/* setup irq space */
add_tb_irq_space(&jmr3927_isac_irqspace);
add_tb_irq_space(&jmr3927_ioc_irqspace);
/* setup irq space */
add_tb_irq_space(&jmr3927_isac_irqspace);
add_tb_irq_space(&jmr3927_ioc_irqspace);
@@
-412,13
+418,13
@@
void __init arch_init_irq(void)
}
static hw_irq_controller jmr3927_irq_controller = {
}
static hw_irq_controller jmr3927_irq_controller = {
- "jmr3927_irq",
- jmr3927_irq_startup,
- jmr3927_irq_shutdown,
- jmr3927_irq_enable,
- jmr3927_irq_disable,
- jmr3927_irq_ack,
- jmr3927_irq_end,
+
.typename =
"jmr3927_irq",
+
.startup =
jmr3927_irq_startup,
+
.shutdown =
jmr3927_irq_shutdown,
+
.enable =
jmr3927_irq_enable,
+
.disable =
jmr3927_irq_disable,
+
.ack =
jmr3927_irq_ack,
+
.end =
jmr3927_irq_end,
};
void jmr3927_irq_init(u32 irq_base)
};
void jmr3927_irq_init(u32 irq_base)