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 core 6 1.2949 + vserver 2.2.0
[linux-2.6.git]
/
arch
/
sh
/
boards
/
superh
/
microdev
/
irq.c
diff --git
a/arch/sh/boards/superh/microdev/irq.c
b/arch/sh/boards/superh/microdev/irq.c
index
1298883
..
8c64baa
100644
(file)
--- a/
arch/sh/boards/superh/microdev/irq.c
+++ b/
arch/sh/boards/superh/microdev/irq.c
@@
-9,17
+9,14
@@
* License. See linux/COPYING for more information.
*/
* License. See linux/COPYING for more information.
*/
-#include <linux/config.h>
#include <linux/init.h>
#include <linux/irq.h>
#include <linux/init.h>
#include <linux/irq.h>
-
#include <asm/system.h>
#include <asm/io.h>
#include <asm/system.h>
#include <asm/io.h>
-#include <asm/m
ach/irq
.h>
+#include <asm/m
icrodev
.h>
#define NUM_EXTERNAL_IRQS 16 /* IRL0 .. IRL15 */
#define NUM_EXTERNAL_IRQS 16 /* IRL0 .. IRL15 */
-
static const struct {
unsigned char fpgaIrq;
unsigned char mapped;
static const struct {
unsigned char fpgaIrq;
unsigned char mapped;
@@
-83,71
+80,60
@@
static unsigned int startup_microdev_irq(unsigned int irq)
}
static struct hw_interrupt_type microdev_irq_type = {
}
static struct hw_interrupt_type microdev_irq_type = {
- "MicroDev-IRQ",
- startup_microdev_irq,
- shutdown_microdev_irq,
- enable_microdev_irq,
- disable_microdev_irq,
- mask_and_ack_microdev,
- end_microdev_irq
+
.typename =
"MicroDev-IRQ",
+
.startup =
startup_microdev_irq,
+
.shutdown =
shutdown_microdev_irq,
+
.enable =
enable_microdev_irq,
+
.disable =
disable_microdev_irq,
+
.ack =
mask_and_ack_microdev,
+
.end =
end_microdev_irq
};
static void disable_microdev_irq(unsigned int irq)
{
};
static void disable_microdev_irq(unsigned int irq)
{
- unsigned int flags;
unsigned int fpgaIrq;
unsigned int fpgaIrq;
- if (irq >= NUM_EXTERNAL_IRQS) return;
- if (!fpgaIrqTable[irq].mapped) return;
+ if (irq >= NUM_EXTERNAL_IRQS)
+ return;
+ if (!fpgaIrqTable[irq].mapped)
+ return;
fpgaIrq = fpgaIrqTable[irq].fpgaIrq;
fpgaIrq = fpgaIrqTable[irq].fpgaIrq;
- /* disable interrupts */
- local_irq_save(flags);
-
- /* disable interupts on the FPGA INTC register */
+ /* disable interupts on the FPGA INTC register */
ctrl_outl(MICRODEV_FPGA_INTC_MASK(fpgaIrq), MICRODEV_FPGA_INTDSB_REG);
ctrl_outl(MICRODEV_FPGA_INTC_MASK(fpgaIrq), MICRODEV_FPGA_INTDSB_REG);
-
- /* restore interrupts */
- local_irq_restore(flags);
}
static void enable_microdev_irq(unsigned int irq)
{
unsigned long priorityReg, priorities, pri;
}
static void enable_microdev_irq(unsigned int irq)
{
unsigned long priorityReg, priorities, pri;
- unsigned int flags;
unsigned int fpgaIrq;
unsigned int fpgaIrq;
-
- if (irq >= NUM_EXTERNAL_IRQS) return;
- if (!fpgaIrqTable[irq].mapped) return;
+ if (unlikely(irq >= NUM_EXTERNAL_IRQS))
+ return;
+ if (unlikely(!fpgaIrqTable[irq].mapped))
+ return;
pri = 15 - irq;
fpgaIrq = fpgaIrqTable[irq].fpgaIrq;
priorityReg = MICRODEV_FPGA_INTPRI_REG(fpgaIrq);
pri = 15 - irq;
fpgaIrq = fpgaIrqTable[irq].fpgaIrq;
priorityReg = MICRODEV_FPGA_INTPRI_REG(fpgaIrq);
- /* disable interrupts */
- local_irq_save(flags);
-
- /* set priority for the interrupt */
+ /* set priority for the interrupt */
priorities = ctrl_inl(priorityReg);
priorities &= ~MICRODEV_FPGA_INTPRI_MASK(fpgaIrq);
priorities |= MICRODEV_FPGA_INTPRI_LEVEL(fpgaIrq, pri);
ctrl_outl(priorities, priorityReg);
priorities = ctrl_inl(priorityReg);
priorities &= ~MICRODEV_FPGA_INTPRI_MASK(fpgaIrq);
priorities |= MICRODEV_FPGA_INTPRI_LEVEL(fpgaIrq, pri);
ctrl_outl(priorities, priorityReg);
-
/* enable interupts on the FPGA INTC register */
+ /* enable interupts on the FPGA INTC register */
ctrl_outl(MICRODEV_FPGA_INTC_MASK(fpgaIrq), MICRODEV_FPGA_INTENB_REG);
ctrl_outl(MICRODEV_FPGA_INTC_MASK(fpgaIrq), MICRODEV_FPGA_INTENB_REG);
-
- /* restore interrupts */
- local_irq_restore(flags);
}
/* This functions sets the desired irq handler to be a MicroDev type */
static void __init make_microdev_irq(unsigned int irq)
{
disable_irq_nosync(irq);
}
/* This functions sets the desired irq handler to be a MicroDev type */
static void __init make_microdev_irq(unsigned int irq)
{
disable_irq_nosync(irq);
- irq_desc[irq].
handler
= µdev_irq_type;
+ irq_desc[irq].
chip
= µdev_irq_type;
disable_microdev_irq(irq);
}
disable_microdev_irq(irq);
}
@@
-159,9
+145,7
@@
static void mask_and_ack_microdev(unsigned int irq)
static void end_microdev_irq(unsigned int irq)
{
if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)))
static void end_microdev_irq(unsigned int irq)
{
if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)))
- {
enable_microdev_irq(irq);
enable_microdev_irq(irq);
- }
}
extern void __init init_microdev_irq(void)
}
extern void __init init_microdev_irq(void)
@@
-172,9
+156,7
@@
extern void __init init_microdev_irq(void)
ctrl_outl(~0ul, MICRODEV_FPGA_INTDSB_REG);
for (i = 0; i < NUM_EXTERNAL_IRQS; i++)
ctrl_outl(~0ul, MICRODEV_FPGA_INTDSB_REG);
for (i = 0; i < NUM_EXTERNAL_IRQS; i++)
- {
make_microdev_irq(i);
make_microdev_irq(i);
- }
}
extern void microdev_print_fpga_intc_status(void)
}
extern void microdev_print_fpga_intc_status(void)