Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 736b24db authored by Michael Schmitz's avatar Michael Schmitz Committed by Geert Uytterhoeven
Browse files

m68k/atari: EtherNAT - platform device and IRQ support code



Add platform device and interrupt definitions necessary for the EtherNAT
Ethernet/USB adapter for the Falcon extension port. EtherNAT interrupt
numbers are 139/140 so the max. interrupt number for Atari has to be
increased.

[Geert] Conditionalize platform device data structures

Signed-off-by: default avatarMichael Schmitz <schmitz@debian.org>
Signed-off-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
parent b1ae432c
Loading
Loading
Loading
Loading
+10 −0
Original line number Original line Diff line number Diff line
@@ -55,6 +55,16 @@ config NFETH
	  which will emulate a regular ethernet device while presenting an
	  which will emulate a regular ethernet device while presenting an
	  ethertap device to the host system.
	  ethertap device to the host system.


config ATARI_ETHERNAT
	bool "Atari EtherNAT Ethernet support"
	depends on ATARI
	---help---
	  Say Y to include support for the EtherNAT network adapter for the
	  CT/60 extension port.

	  To compile the actual ethernet driver, choose Y or M for the SMC91X
	  option in the network device section; the module will be called smc91x.

endmenu
endmenu


menu "Character devices"
menu "Character devices"
+64 −0
Original line number Original line Diff line number Diff line
@@ -31,6 +31,7 @@
#include <linux/init.h>
#include <linux/init.h>
#include <linux/delay.h>
#include <linux/delay.h>
#include <linux/ioport.h>
#include <linux/ioport.h>
#include <linux/platform_device.h>
#include <linux/vt_kern.h>
#include <linux/vt_kern.h>
#include <linux/module.h>
#include <linux/module.h>


@@ -655,3 +656,66 @@ static void atari_get_hardware_list(struct seq_file *m)
	ATARIHW_ANNOUNCE(VME, "VME Bus");
	ATARIHW_ANNOUNCE(VME, "VME Bus");
	ATARIHW_ANNOUNCE(DSP56K, "DSP56001 processor");
	ATARIHW_ANNOUNCE(DSP56K, "DSP56001 processor");
}
}

/*
 * MSch: initial platform device support for Atari,
 * required for EtherNAT driver
 */

#ifdef CONFIG_ATARI_ETHERNAT
/*
 * EtherNAT: SMC91C111 Ethernet chipset, handled by smc91x driver
 */

#define ATARI_ETHERNAT_IRQ		140

static struct resource smc91x_resources[] = {
	[0] = {
		.name	= "smc91x-regs",
		.start	= ATARI_ETHERNAT_PHYS_ADDR,
		.end	= ATARI_ETHERNAT_PHYS_ADDR + 0xfffff,
		.flags	= IORESOURCE_MEM,
	},
	[1] = {
		.name	= "smc91x-irq",
		.start	= ATARI_ETHERNAT_IRQ,
		.end	= ATARI_ETHERNAT_IRQ,
		.flags	= IORESOURCE_IRQ,
	},
};

static struct platform_device smc91x_device = {
	.name		= "smc91x",
	.id		= -1,
	.num_resources	= ARRAY_SIZE(smc91x_resources),
	.resource	= smc91x_resources,
};

static struct platform_device *atari_ethernat_devices[] __initdata = {
	&smc91x_device
};
#endif /* CONFIG_ATARI_ETHERNAT */

int __init atari_platform_init(void)
{
	int rv = 0;

	if (!MACH_IS_ATARI)
		return -ENODEV;

#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);
+6 −0
Original line number Original line Diff line number Diff line
@@ -805,5 +805,11 @@ struct MSTE_RTC {


#define mste_rtc ((*(volatile struct MSTE_RTC *)MSTE_RTC_BAS))
#define mste_rtc ((*(volatile struct MSTE_RTC *)MSTE_RTC_BAS))


/*
** EtherNAT add-on card for Falcon - combined ethernet and USB adapter
*/

#define ATARI_ETHERNAT_PHYS_ADDR	0x80000000

#endif /* linux/atarihw.h */
#endif /* linux/atarihw.h */
+1 −1
Original line number Original line Diff line number Diff line
@@ -32,7 +32,7 @@
#define VME_SOURCE_BASE    56
#define VME_SOURCE_BASE    56
#define VME_MAX_SOURCES    16
#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 */
/* convert vector number to int source number */
#define IRQ_VECTOR_TO_SOURCE(v)	((v) - ((v) < 0x20 ? 0x18 : (0x40-8)))
#define IRQ_VECTOR_TO_SOURCE(v)	((v) - ((v) < 0x20 ? 0x18 : (0x40-8)))
+5 −1
Original line number Original line Diff line number Diff line
@@ -6,12 +6,16 @@
 * different m68k hosts compiled into the kernel.
 * different m68k hosts compiled into the kernel.
 * Currently the Atari has 72 and the Amiga 24, but if both are
 * 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.
 * 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)
#if defined(CONFIG_COLDFIRE)
#define NR_IRQS 256
#define NR_IRQS 256
#elif defined(CONFIG_VME) || defined(CONFIG_SUN3) || defined(CONFIG_SUN3X)
#elif defined(CONFIG_VME) || defined(CONFIG_SUN3) || defined(CONFIG_SUN3X)
#define NR_IRQS 200
#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
#define NR_IRQS 72
#elif defined(CONFIG_Q40)
#elif defined(CONFIG_Q40)
#define NR_IRQS	43
#define NR_IRQS	43