|
@@ -1,118 +0,0 @@
|
|
|
-/*
|
|
|
- * arch/sh/boards/saturn/irq.c
|
|
|
- *
|
|
|
- * Copyright (C) 2002 Paul Mundt
|
|
|
- *
|
|
|
- * Released under the terms of the GNU GPL v2.0.
|
|
|
- */
|
|
|
-#include <linux/kernel.h>
|
|
|
-#include <linux/init.h>
|
|
|
-#include <linux/interrupt.h>
|
|
|
-#include <asm/irq.h>
|
|
|
-#include <asm/io.h>
|
|
|
-
|
|
|
-/*
|
|
|
- * Interrupts map out as follows:
|
|
|
- *
|
|
|
- * Vector Name Mask
|
|
|
- *
|
|
|
- * 64 VBLANKIN 0x0001
|
|
|
- * 65 VBLANKOUT 0x0002
|
|
|
- * 66 HBLANKIN 0x0004
|
|
|
- * 67 TIMER0 0x0008
|
|
|
- * 68 TIMER1 0x0010
|
|
|
- * 69 DSPEND 0x0020
|
|
|
- * 70 SOUNDREQUEST 0x0040
|
|
|
- * 71 SYSTEMMANAGER 0x0080
|
|
|
- * 72 PAD 0x0100
|
|
|
- * 73 LEVEL2DMAEND 0x0200
|
|
|
- * 74 LEVEL1DMAEND 0x0400
|
|
|
- * 75 LEVEL0DMAEND 0x0800
|
|
|
- * 76 DMAILLEGAL 0x1000
|
|
|
- * 77 SRITEDRAWEND 0x2000
|
|
|
- * 78 ABUS 0x8000
|
|
|
- *
|
|
|
- */
|
|
|
-#define SATURN_IRQ_MIN 64 /* VBLANKIN */
|
|
|
-#define SATURN_IRQ_MAX 78 /* ABUS */
|
|
|
-
|
|
|
-#define SATURN_IRQ_MASK 0xbfff
|
|
|
-
|
|
|
-static inline u32 saturn_irq_mask(unsigned int irq_nr)
|
|
|
-{
|
|
|
- u32 mask;
|
|
|
-
|
|
|
- mask = (1 << (irq_nr - SATURN_IRQ_MIN));
|
|
|
- mask <<= (irq_nr == SATURN_IRQ_MAX);
|
|
|
- mask &= SATURN_IRQ_MASK;
|
|
|
-
|
|
|
- return mask;
|
|
|
-}
|
|
|
-
|
|
|
-static inline void mask_saturn_irq(unsigned int irq_nr)
|
|
|
-{
|
|
|
- u32 mask;
|
|
|
-
|
|
|
- mask = ctrl_inl(SATURN_IMR);
|
|
|
- mask |= saturn_irq_mask(irq_nr);
|
|
|
- ctrl_outl(mask, SATURN_IMR);
|
|
|
-}
|
|
|
-
|
|
|
-static inline void unmask_saturn_irq(unsigned int irq_nr)
|
|
|
-{
|
|
|
- u32 mask;
|
|
|
-
|
|
|
- mask = ctrl_inl(SATURN_IMR);
|
|
|
- mask &= ~saturn_irq_mask(irq_nr);
|
|
|
- ctrl_outl(mask, SATURN_IMR);
|
|
|
-}
|
|
|
-
|
|
|
-static void disable_saturn_irq(unsigned int irq_nr)
|
|
|
-{
|
|
|
- mask_saturn_irq(irq_nr);
|
|
|
-}
|
|
|
-
|
|
|
-static void enable_saturn_irq(unsigned int irq_nr)
|
|
|
-{
|
|
|
- unmask_saturn_irq(irq_nr);
|
|
|
-}
|
|
|
-
|
|
|
-static void mask_and_ack_saturn_irq(unsigned int irq_nr)
|
|
|
-{
|
|
|
- mask_saturn_irq(irq_nr);
|
|
|
-}
|
|
|
-
|
|
|
-static void end_saturn_irq(unsigned int irq_nr)
|
|
|
-{
|
|
|
- if (!(irq_desc[irq_nr].status & (IRQ_DISABLED | IRQ_INPROGRESS)))
|
|
|
- unmask_saturn_irq(irq_nr);
|
|
|
-}
|
|
|
-
|
|
|
-static unsigned int startup_saturn_irq(unsigned int irq_nr)
|
|
|
-{
|
|
|
- unmask_saturn_irq(irq_nr);
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
-static void shutdown_saturn_irq(unsigned int irq_nr)
|
|
|
-{
|
|
|
- mask_saturn_irq(irq_nr);
|
|
|
-}
|
|
|
-
|
|
|
-static struct hw_interrupt_type saturn_int = {
|
|
|
- .typename = "Saturn",
|
|
|
- .enable = enable_saturn_irq,
|
|
|
- .disable = disable_saturn_irq,
|
|
|
- .ack = mask_and_ack_saturn_irq,
|
|
|
- .end = end_saturn_irq,
|
|
|
- .startup = startup_saturn_irq,
|
|
|
- .shutdown = shutdown_saturn_irq,
|
|
|
-};
|
|
|
-
|
|
|
-int saturn_irq_demux(int irq_nr)
|
|
|
-{
|
|
|
- /* FIXME */
|
|
|
- return irq_nr;
|
|
|
-}
|
|
|
-
|