Commit 47fd22f2 authored by Arnd Bergmann's avatar Arnd Bergmann Committed by David S. Miller

cs89x0: rework driver configuration

There are two drivers in the cs89x0 file, with the CONFIG_CS89x0_PLATFORM
symbol deciding which one is getting built. This is somewhat confusing
and makes it more likely ton configure a driver that works nowhere.

Split up the Kconfig option into separate ISA and PLATFORM drivers,
with the ISA symbol explicitly connecting to the static probing in
drivers/net/Space.c

The two drivers are still mutually incompatible at compile time,
which could be lifted by splitting them into multiple files,
but in practice this will make no difference.

The platform driver can now be enabled for compile-testing on
non-ARM machines.
Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 8bbdf1bd
...@@ -77,11 +77,9 @@ static struct devprobe2 isa_probes[] __initdata = { ...@@ -77,11 +77,9 @@ static struct devprobe2 isa_probes[] __initdata = {
#ifdef CONFIG_SMC9194 #ifdef CONFIG_SMC9194
{smc_init, 0}, {smc_init, 0},
#endif #endif
#ifdef CONFIG_CS89x0 #ifdef CONFIG_CS89x0_ISA
#ifndef CONFIG_CS89x0_PLATFORM
{cs89x0_probe, 0}, {cs89x0_probe, 0},
#endif #endif
#endif
#if defined(CONFIG_MVME16x_NET) || defined(CONFIG_BVME6000_NET) /* Intel */ #if defined(CONFIG_MVME16x_NET) || defined(CONFIG_BVME6000_NET) /* Intel */
{i82596_probe, 0}, /* I82596 */ {i82596_probe, 0}, /* I82596 */
#endif #endif
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
config NET_VENDOR_CIRRUS config NET_VENDOR_CIRRUS
bool "Cirrus devices" bool "Cirrus devices"
default y default y
depends on ISA || EISA || ARM || MAC depends on ISA || EISA || ARM || MAC || COMPILE_TEST
help help
If you have a network (Ethernet) card belonging to this class, say Y. If you have a network (Ethernet) card belonging to this class, say Y.
...@@ -18,9 +18,15 @@ config NET_VENDOR_CIRRUS ...@@ -18,9 +18,15 @@ config NET_VENDOR_CIRRUS
if NET_VENDOR_CIRRUS if NET_VENDOR_CIRRUS
config CS89x0 config CS89x0
tristate "CS89x0 support" tristate
depends on ISA || EISA || ARM
config CS89x0_ISA
tristate "CS89x0 ISA driver support"
depends on HAS_IOPORT_MAP
depends on ISA
depends on !PPC32 depends on !PPC32
depends on CS89x0_PLATFORM=n
select CS89x0
help help
Support for CS89x0 chipset based Ethernet cards. If you have a Support for CS89x0 chipset based Ethernet cards. If you have a
network (Ethernet) card of this type, say Y and read the file network (Ethernet) card of this type, say Y and read the file
...@@ -30,15 +36,15 @@ config CS89x0 ...@@ -30,15 +36,15 @@ config CS89x0
will be called cs89x0. will be called cs89x0.
config CS89x0_PLATFORM config CS89x0_PLATFORM
bool "CS89x0 platform driver support" if HAS_IOPORT_MAP tristate "CS89x0 platform driver support"
default !HAS_IOPORT_MAP depends on ARM || COMPILE_TEST
depends on CS89x0 select CS89x0
help help
Say Y to compile the cs89x0 driver as a platform driver. This Say Y to compile the cs89x0 platform driver. This makes this driver
makes this driver suitable for use on certain evaluation boards suitable for use on certain evaluation boards such as the iMX21ADS.
such as the iMX21ADS.
If you are unsure, say N. To compile this driver as a module, choose M here. The module
will be called cs89x0.
config EP93XX_ETH config EP93XX_ETH
tristate "EP93xx Ethernet support" tristate "EP93xx Ethernet support"
......
...@@ -104,7 +104,7 @@ static char version[] __initdata = ...@@ -104,7 +104,7 @@ static char version[] __initdata =
* them to system IRQ numbers. This mapping is card specific and is set to * them to system IRQ numbers. This mapping is card specific and is set to
* the configuration of the Cirrus Eval board for this chip. * the configuration of the Cirrus Eval board for this chip.
*/ */
#ifndef CONFIG_CS89x0_PLATFORM #if IS_ENABLED(CONFIG_CS89x0_ISA)
static unsigned int netcard_portlist[] __used __initdata = { static unsigned int netcard_portlist[] __used __initdata = {
0x300, 0x320, 0x340, 0x360, 0x200, 0x220, 0x240, 0x300, 0x320, 0x340, 0x360, 0x200, 0x220, 0x240,
0x260, 0x280, 0x2a0, 0x2c0, 0x2e0, 0 0x260, 0x280, 0x2a0, 0x2c0, 0x2e0, 0
...@@ -292,7 +292,7 @@ write_irq(struct net_device *dev, int chip_type, int irq) ...@@ -292,7 +292,7 @@ write_irq(struct net_device *dev, int chip_type, int irq)
int i; int i;
if (chip_type == CS8900) { if (chip_type == CS8900) {
#ifndef CONFIG_CS89x0_PLATFORM #if IS_ENABLED(CONFIG_CS89x0_ISA)
/* Search the mapping table for the corresponding IRQ pin. */ /* Search the mapping table for the corresponding IRQ pin. */
for (i = 0; i != ARRAY_SIZE(cs8900_irq_map); i++) for (i = 0; i != ARRAY_SIZE(cs8900_irq_map); i++)
if (cs8900_irq_map[i] == irq) if (cs8900_irq_map[i] == irq)
...@@ -859,7 +859,7 @@ net_open(struct net_device *dev) ...@@ -859,7 +859,7 @@ net_open(struct net_device *dev)
goto bad_out; goto bad_out;
} }
} else { } else {
#if !defined(CONFIG_CS89x0_PLATFORM) #if IS_ENABLED(CONFIG_CS89x0_ISA)
if (((1 << dev->irq) & lp->irq_map) == 0) { if (((1 << dev->irq) & lp->irq_map) == 0) {
pr_err("%s: IRQ %d is not in our map of allowable IRQs, which is %x\n", pr_err("%s: IRQ %d is not in our map of allowable IRQs, which is %x\n",
dev->name, dev->irq, lp->irq_map); dev->name, dev->irq, lp->irq_map);
...@@ -1523,7 +1523,7 @@ cs89x0_probe1(struct net_device *dev, void __iomem *ioaddr, int modular) ...@@ -1523,7 +1523,7 @@ cs89x0_probe1(struct net_device *dev, void __iomem *ioaddr, int modular)
dev->irq = i; dev->irq = i;
} else { } else {
i = lp->isa_config & INT_NO_MASK; i = lp->isa_config & INT_NO_MASK;
#ifndef CONFIG_CS89x0_PLATFORM #if IS_ENABLED(CONFIG_CS89x0_ISA)
if (lp->chip_type == CS8900) { if (lp->chip_type == CS8900) {
/* Translate the IRQ using the IRQ mapping table. */ /* Translate the IRQ using the IRQ mapping table. */
if (i >= ARRAY_SIZE(cs8900_irq_map)) if (i >= ARRAY_SIZE(cs8900_irq_map))
...@@ -1576,7 +1576,7 @@ cs89x0_probe1(struct net_device *dev, void __iomem *ioaddr, int modular) ...@@ -1576,7 +1576,7 @@ cs89x0_probe1(struct net_device *dev, void __iomem *ioaddr, int modular)
return retval; return retval;
} }
#ifndef CONFIG_CS89x0_PLATFORM #if IS_ENABLED(CONFIG_CS89x0_ISA)
/* /*
* This function converts the I/O port address used by the cs89x0_probe() and * This function converts the I/O port address used by the cs89x0_probe() and
* init_module() functions to the I/O memory address used by the * init_module() functions to the I/O memory address used by the
...@@ -1682,11 +1682,7 @@ struct net_device * __init cs89x0_probe(int unit) ...@@ -1682,11 +1682,7 @@ struct net_device * __init cs89x0_probe(int unit)
pr_warn("no cs8900 or cs8920 detected. Be sure to disable PnP with SETUP\n"); pr_warn("no cs8900 or cs8920 detected. Be sure to disable PnP with SETUP\n");
return ERR_PTR(err); return ERR_PTR(err);
} }
#endif #else
#endif
#if defined(MODULE) && !defined(CONFIG_CS89x0_PLATFORM)
static struct net_device *dev_cs89x0; static struct net_device *dev_cs89x0;
/* Support the 'debug' module parm even if we're compiled for non-debug to /* Support the 'debug' module parm even if we're compiled for non-debug to
...@@ -1759,7 +1755,7 @@ MODULE_LICENSE("GPL"); ...@@ -1759,7 +1755,7 @@ MODULE_LICENSE("GPL");
int __init init_module(void) int __init init_module(void)
{ {
struct net_device *dev = alloc_etherdev(sizeof(struct net_local)); struct net_device *dev;
struct net_local *lp; struct net_local *lp;
int ret = 0; int ret = 0;
...@@ -1768,6 +1764,7 @@ int __init init_module(void) ...@@ -1768,6 +1764,7 @@ int __init init_module(void)
#else #else
debug = 0; debug = 0;
#endif #endif
dev = alloc_etherdev(sizeof(struct net_local));
if (!dev) if (!dev)
return -ENOMEM; return -ENOMEM;
...@@ -1838,9 +1835,10 @@ cleanup_module(void) ...@@ -1838,9 +1835,10 @@ cleanup_module(void)
release_region(dev_cs89x0->base_addr, NETCARD_IO_EXTENT); release_region(dev_cs89x0->base_addr, NETCARD_IO_EXTENT);
free_netdev(dev_cs89x0); free_netdev(dev_cs89x0);
} }
#endif /* MODULE && !CONFIG_CS89x0_PLATFORM */ #endif /* MODULE */
#endif /* CONFIG_CS89x0_ISA */
#ifdef CONFIG_CS89x0_PLATFORM #if IS_ENABLED(CONFIG_CS89x0_PLATFORM)
static int __init cs89x0_platform_probe(struct platform_device *pdev) static int __init cs89x0_platform_probe(struct platform_device *pdev)
{ {
struct net_device *dev = alloc_etherdev(sizeof(struct net_local)); struct net_device *dev = alloc_etherdev(sizeof(struct net_local));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment