Increase the number of Atari interrupt sources to include EtherNAT
interrupts (interrupt nunbers 139/140, vectors 0xc3/0xc4).

Signed-off-by: Michael Schmitz <[email protected]>
---
 arch/m68k/atari/config.c          |   20 +++++++++++++++++---
 arch/m68k/include/asm/atariints.h |    2 +-
 arch/m68k/include/asm/irq.h       |    6 +++++-
 3 files changed, 23 insertions(+), 5 deletions(-)

diff --git a/arch/m68k/atari/config.c b/arch/m68k/atari/config.c
index ee9bb70..6c3e885 100644
--- a/arch/m68k/atari/config.c
+++ b/arch/m68k/atari/config.c
@@ -661,7 +661,7 @@ static void atari_get_hardware_list(struct seq_file *m)
  * MSch: initial platform device support for Atari, required for EtherNAT
  */
 
-#define ATARI_ETHERNAT_IRQ             0xc3
+#define ATARI_ETHERNAT_IRQ             140
 
 static struct resource smc91x_resources[] = {
        [0] = {
@@ -685,16 +685,30 @@ static struct platform_device smc91x_device = {
        .resource       = smc91x_resources,
 };
 
-static struct platform_device *atari_platform_devices[] __initdata = {
+static struct platform_device *atari_ethernat_devices[] __initdata = {
        &smc91x_device
 };
 
 int __init atari_platform_init(void)
 {
+       int rv = 0;
+
        if (!MACH_IS_ATARI)
                return -ENODEV;
 
-       return platform_add_devices(atari_platform_devices, 
ARRAY_SIZE(atari_platform_devices));
+#ifdef CONFIG_ATARI_ETHERNAT
+       {
+               unsigned char *enatc_virt;
+               enatc_virt = (unsigned char 
*)ioremap((ATARI_ETHERNAT_PHYS_ADDR+0x23), 0xf);
+               if (hwreg_present(enatc_virt)) {
+                       rv = platform_add_devices(atari_ethernat_devices,
+                                               
ARRAY_SIZE(atari_ethernat_devices));
+               }
+               iounmap(enatc_virt);
+       }
+#endif
+
+       return rv;
 }
 
 arch_initcall(atari_platform_init);
diff --git a/arch/m68k/include/asm/atariints.h 
b/arch/m68k/include/asm/atariints.h
index 5fc13bd..12c759a 100644
--- a/arch/m68k/include/asm/atariints.h
+++ b/arch/m68k/include/asm/atariints.h
@@ -32,7 +32,7 @@
 #define VME_SOURCE_BASE    56
 #define VME_MAX_SOURCES    16
 
-#define NUM_ATARI_SOURCES   (VME_SOURCE_BASE+VME_MAX_SOURCES-STMFP_SOURCE_BASE)
+#define NUM_ATARI_SOURCES  141
 
 /* convert vector number to int source number */
 #define IRQ_VECTOR_TO_SOURCE(v)        ((v) - ((v) < 0x20 ? 0x18 : (0x40-8)))
diff --git a/arch/m68k/include/asm/irq.h b/arch/m68k/include/asm/irq.h
index c1155f0..81ca118 100644
--- a/arch/m68k/include/asm/irq.h
+++ b/arch/m68k/include/asm/irq.h
@@ -6,12 +6,16 @@
  * different m68k hosts compiled into the kernel.
  * Currently the Atari has 72 and the Amiga 24, but if both are
  * supported in the kernel it is better to make room for 72.
+ * With EtherNAT add-on card on Atari, the highest interrupt
+ * number is 140 so NR_IRQS needs to be 141.
  */
 #if defined(CONFIG_COLDFIRE)
 #define NR_IRQS 256
 #elif defined(CONFIG_VME) || defined(CONFIG_SUN3) || defined(CONFIG_SUN3X)
 #define NR_IRQS 200
-#elif defined(CONFIG_ATARI) || defined(CONFIG_MAC)
+#elif defined(CONFIG_ATARI)
+#define NR_IRQS 141
+#elif defined(CONFIG_MAC)
 #define NR_IRQS 72
 #elif defined(CONFIG_Q40)
 #define NR_IRQS        43
-- 
1.7.0.4


-- 
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]
Archive: 
http://lists.debian.org/[email protected]

Reply via email to