linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/3] NE2000 driver updates
@ 2003-04-01 18:32 Jeff Muizelaar
  2003-04-01 18:33 ` [PATCH 1/3] " Jeff Muizelaar
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Jeff Muizelaar @ 2003-04-01 18:32 UTC (permalink / raw)
  To: Linux Kernel Mailing List; +Cc: Jeff Garzik

The first two patches are retransmits of the original PnP api patches 
updated to apply to a current tree.
The third patch is more of an RFC. It consolidates the creation/removal 
of the driver between the PnP code and the plain ISA code.
In doing so it changes the net_device allocation from static to dynamic 
and allows PnP support when the driver is compiled in.
This is probably how things will eventually have to be if there is ever 
driver model support for plain ISA devices.

Caveats:
It appears that the patch will break any autoprobe ordering because it 
no longer uses Space.c when compiled into the kernel.
Data size of object goes up about 100 bytes.

-Jeff


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 1/3] NE2000 driver updates
  2003-04-01 18:32 [PATCH 0/3] NE2000 driver updates Jeff Muizelaar
@ 2003-04-01 18:33 ` Jeff Muizelaar
  2003-04-01 18:34 ` [PATCH 2/3] " Jeff Muizelaar
  2003-04-01 18:35 ` [PATCH 3/3] " Jeff Muizelaar
  2 siblings, 0 replies; 4+ messages in thread
From: Jeff Muizelaar @ 2003-04-01 18:33 UTC (permalink / raw)
  To: Linux Kernel Mailing List; +Cc: Jeff Garzik

[-- Attachment #1: Type: text/plain, Size: 1 bytes --]



[-- Attachment #2: ne-pnp.patch --]
[-- Type: text/plain, Size: 6847 bytes --]

--- linux-2.5.66/drivers/net/ne.c	2003-03-24 17:00:21.000000000 -0500
+++ linux-2.5.66-nepnp/drivers/net/ne.c	2003-03-29 21:39:17.000000000 -0500
@@ -29,21 +29,20 @@
     last in cleanup_modue()
     Richard Guenther    : Added support for ISAPnP cards
     Paul Gortmaker	: Discontinued PCI support - use ne2k-pci.c instead.
+    Jeff Muizelaar	: moved over to generic PnP api
 
 */
 
 /* Routines for the NatSemi-based designs (NE[12]000). */
 
-static const char version1[] =
-"ne.c:v1.10 9/23/94 Donald Becker (becker@scyld.com)\n";
-static const char version2[] =
-"Last modified Nov 1, 2000 by Paul Gortmaker\n";
+static const char version[] =
+"ne.c:v1.10a 1/26/03 Donald Becker (becker@scyld.com)\n";
 
 
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/errno.h>
-#include <linux/isapnp.h>
+#include <linux/pnp.h>
 #include <linux/init.h>
 #include <linux/interrupt.h>
 #include <linux/delay.h>
@@ -76,20 +75,18 @@
 };
 #endif
 
-static struct isapnp_device_id isapnp_clone_list[] __initdata = {
-	{	ISAPNP_CARD_ID('A','X','E',0x2011),
-		ISAPNP_VENDOR('A','X','E'), ISAPNP_FUNCTION(0x2011),
-		(long) "NetGear EA201" },
-	{	ISAPNP_ANY_ID, ISAPNP_ANY_ID,
-		ISAPNP_VENDOR('E','D','I'), ISAPNP_FUNCTION(0x0216),
-		(long) "NN NE2000" },
-	{	ISAPNP_ANY_ID, ISAPNP_ANY_ID,
-		ISAPNP_VENDOR('P','N','P'), ISAPNP_FUNCTION(0x80d6),
-		(long) "Generic PNP" },
-	{ }	/* terminate list */
+#ifdef CONFIG_PNP
+static const struct pnp_device_id ne_pnp_table[] = {
+	/* NetGear EA201 */
+	{.id = "AXE2011", .driver_data = 0},
+	/* NN NE2000 */
+	{.id = "EDI0216", .driver_data = 0},
+	/* NE2000 Compatible */
+	{.id = "PNP80d6", .driver_data = 0},
 };
 
-MODULE_DEVICE_TABLE(isapnp, isapnp_clone_list);
+MODULE_DEVICE_TABLE(pnp, ne_pnp_table);
+#endif
 
 #ifdef SUPPORT_NE_BAD_CLONES
 /* A list of bad clones that we none-the-less recognize. */
@@ -126,9 +123,20 @@
 #define NESM_START_PG	0x40	/* First page of TX buffer */
 #define NESM_STOP_PG	0x80	/* Last page +1 of RX ring */
 
+#ifdef CONFIG_PNP
+static int ne_pnp_probe(struct pnp_dev *dev, const struct pnp_device_id *dev_id);
+static void ne_pnp_remove(struct pnp_dev *dev);
+
+static struct pnp_driver ne_pnp_driver = {
+	.name		= "ne",
+	.id_table 	= ne_pnp_table,
+	.probe		= ne_pnp_probe,
+	.remove		= ne_pnp_remove,
+};
+#endif
+
 int ne_probe(struct net_device *dev);
 static int ne_probe1(struct net_device *dev, int ioaddr);
-static int ne_probe_isapnp(struct net_device *dev);
 
 static int ne_open(struct net_device *dev);
 static int ne_close(struct net_device *dev);
@@ -175,10 +183,6 @@
 	else if (base_addr != 0)	/* Don't probe at all. */
 		return -ENXIO;
 
-	/* Then look for any installed ISAPnP clones */
-	if (isapnp_present() && (ne_probe_isapnp(dev) == 0))
-		return 0;
-
 #ifndef MODULE
 	/* Last resort. The semi-risky ISA auto-probe. */
 	for (base_addr = 0; netcard_portlist[base_addr] != 0; base_addr++) {
@@ -191,50 +195,58 @@
 	return -ENODEV;
 }
 
-static int __init ne_probe_isapnp(struct net_device *dev)
+#ifdef CONFIG_PNP
+static int ne_pnp_probe(struct pnp_dev *idev, const struct pnp_device_id *dev_id)
 {
-	int i;
-
-	for (i = 0; isapnp_clone_list[i].vendor != 0; i++) {
-		struct pnp_dev *idev = NULL;
+	struct net_device *dev;
+	int err;
+	
+	if ( !(dev = alloc_etherdev(0)) ){
+		err = -ENOMEM;
+		goto alloc_fail;
+	}
+	
+	dev->base_addr = pnp_port_start(idev, 0);
+	dev->irq = pnp_irq(idev, 0);
+	printk(KERN_INFO "ne.c: PnP reports %s at i/o %#lx, irq %d\n",
+			idev->dev.name, dev->base_addr, dev->irq);
+	
+	SET_MODULE_OWNER(dev);
+	
+	if (ne_probe1(dev, dev->base_addr) != 0) {	/* Shouldn't happen. */
+		printk(KERN_ERR "ne.c: Probe of PnP card at %#lx failed\n", dev->base_addr);
+		err = -ENXIO;
+		goto probe_fail;
+	}
+	
+	if ( (err = register_netdev(dev)) != 0)
+		goto register_fail;
 
-		while ((idev = pnp_find_dev(NULL,
-					    isapnp_clone_list[i].vendor,
-					    isapnp_clone_list[i].function,
-					    idev))) {
-			/* Avoid already found cards from previous calls */
-			if (pnp_device_attach(idev) < 0)
-				continue;
-			if (pnp_activate_dev(idev) < 0) {
-			      	pnp_device_detach(idev);
-			      	continue;
-			}
-			/* if no io and irq, search for next */
-			if (!pnp_port_valid(idev, 0) || !pnp_irq_valid(idev, 0)) {
-				pnp_device_detach(idev);
-				continue;
-			}
-			/* found it */
-			dev->base_addr = pnp_port_start(idev, 0);
-			dev->irq = pnp_irq(idev, 0);
-			printk(KERN_INFO "ne.c: ISAPnP reports %s at i/o %#lx, irq %d.\n",
-				(char *) isapnp_clone_list[i].driver_data,
-				dev->base_addr, dev->irq);
-			if (ne_probe1(dev, dev->base_addr) != 0) {	/* Shouldn't happen. */
-				printk(KERN_ERR "ne.c: Probe of ISAPnP card at %#lx failed.\n", dev->base_addr);
-				pnp_device_detach(idev);
-				return -ENXIO;
-			}
-			ei_status.priv = (unsigned long)idev;
-			break;
-		}
-		if (!idev)
-			continue;
-		return 0;
+	pnp_set_drvdata(idev, dev);
+	
+	return 0;
+	
+register_fail:
+		kfree(dev->priv);
+		release_region(dev->base_addr, NE_IO_EXTENT);
+probe_fail:
+		kfree(dev);
+alloc_fail:
+		return err;
+}
+
+static void ne_pnp_remove(struct pnp_dev *idev)
+{
+	struct net_device *dev = pnp_get_drvdata(idev);	
+	if (dev) {
+		unregister_netdev(dev);
+		free_irq(dev->irq, dev);
+		release_region(dev->base_addr, NE_IO_EXTENT);
+		kfree(dev->priv);
+		kfree(dev);
 	}
-
-	return -ENODEV;
 }
+#endif
 
 static int __init ne_probe1(struct net_device *dev, int ioaddr)
 {
@@ -273,7 +285,7 @@
 	}
 
 	if (ei_debug  &&  version_printed++ == 0)
-		printk(KERN_INFO "%s" KERN_INFO "%s", version1, version2);
+		printk(KERN_INFO "%s", version);
 
 	printk(KERN_INFO "NE*000 ethercard probe at %#3x:", ioaddr);
 
@@ -757,6 +769,13 @@
 {
 	int this_dev, found = 0;
 
+#ifdef CONFIG_PNP	
+	found = pnp_register_driver(&ne_pnp_driver);
+	if (found < 0) {
+		return found;
+	}
+#endif
+
 	for (this_dev = 0; this_dev < MAX_NE_CARDS; this_dev++) {
 		struct net_device *dev = &dev_ne[this_dev];
 		dev->irq = irq[this_dev];
@@ -774,6 +793,9 @@
 			printk(KERN_WARNING "ne.c: No NE*000 card found at i/o = %#x\n", io[this_dev]);
 		else
 			printk(KERN_NOTICE "ne.c: You must supply \"io=0xNNN\" value(s) for ISA cards.\n");
+#ifdef CONFIG_PNP
+		pnp_unregister_driver(&ne_pnp_driver);
+#endif
 		return -ENXIO;
 	}
 	return 0;
@@ -783,17 +805,16 @@
 {
 	int this_dev;
 
+#ifdef CONFIG_PNP	
+	pnp_unregister_driver(&ne_pnp_driver);
+#endif
 	for (this_dev = 0; this_dev < MAX_NE_CARDS; this_dev++) {
 		struct net_device *dev = &dev_ne[this_dev];
 		if (dev->priv != NULL) {
-			void *priv = dev->priv;
-			struct pnp_dev *idev = (struct pnp_dev *)ei_status.priv;
-			if (idev)
-				pnp_device_detach(idev);
+			unregister_netdev(dev);
 			free_irq(dev->irq, dev);
 			release_region(dev->base_addr, NE_IO_EXTENT);
-			unregister_netdev(dev);
-			kfree(priv);
+			kfree(dev->priv);
 		}
 	}
 }

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 2/3] NE2000 driver updates
  2003-04-01 18:32 [PATCH 0/3] NE2000 driver updates Jeff Muizelaar
  2003-04-01 18:33 ` [PATCH 1/3] " Jeff Muizelaar
@ 2003-04-01 18:34 ` Jeff Muizelaar
  2003-04-01 18:35 ` [PATCH 3/3] " Jeff Muizelaar
  2 siblings, 0 replies; 4+ messages in thread
From: Jeff Muizelaar @ 2003-04-01 18:34 UTC (permalink / raw)
  To: Linux Kernel Mailing List; +Cc: Jeff Garzik

[-- Attachment #1: Type: text/plain, Size: 1 bytes --]



[-- Attachment #2: ne-pnp-id.patch --]
[-- Type: text/plain, Size: 679 bytes --]

--- linux-2.5.66-nepnp/drivers/net/ne.c	2003-03-29 21:39:17.000000000 -0500
+++ linux-2.5.66-nepnpid/drivers/net/ne.c	2003-03-29 21:39:29.000000000 -0500
@@ -81,8 +81,16 @@
 	{.id = "AXE2011", .driver_data = 0},
 	/* NN NE2000 */
 	{.id = "EDI0216", .driver_data = 0},
+	/* Novell/Anthem NE1000 */
+	{.id = "PNP80d3", .driver_data = 0},
+	/* Novell/Anthem NE2000 */
+	{.id = "PNP80d4", .driver_data = 0},
+	/* NE1000 Compatible */
+	{.id = "PNP80d5", .driver_data = 0},
 	/* NE2000 Compatible */
 	{.id = "PNP80d6", .driver_data = 0},
+	/* National Semiconductor AT/LANTIC EtherNODE 16-AT3 */
+	{.id = "PNP8160", .driver_data = 0},
 };
 
 MODULE_DEVICE_TABLE(pnp, ne_pnp_table);

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 3/3] NE2000 driver updates
  2003-04-01 18:32 [PATCH 0/3] NE2000 driver updates Jeff Muizelaar
  2003-04-01 18:33 ` [PATCH 1/3] " Jeff Muizelaar
  2003-04-01 18:34 ` [PATCH 2/3] " Jeff Muizelaar
@ 2003-04-01 18:35 ` Jeff Muizelaar
  2 siblings, 0 replies; 4+ messages in thread
From: Jeff Muizelaar @ 2003-04-01 18:35 UTC (permalink / raw)
  To: Linux Kernel Mailing List; +Cc: Jeff Garzik

[-- Attachment #1: Type: text/plain, Size: 1 bytes --]



[-- Attachment #2: ne-legacy.patch --]
[-- Type: text/plain, Size: 8578 bytes --]

diff -u linux-2.5.66-nepnpid/drivers/net/ne.c linux-2.5.66-nelist/drivers/net/ne.c
--- linux-2.5.66-nepnpid/drivers/net/ne.c	2003-03-29 21:39:29.000000000 -0500
+++ linux-2.5.66-nelist/drivers/net/ne.c	2003-03-29 21:39:38.000000000 -0500
@@ -36,7 +36,7 @@
 /* Routines for the NatSemi-based designs (NE[12]000). */
 
 static const char version[] =
-"ne.c:v1.10a 1/26/03 Donald Becker (becker@scyld.com)\n";
+"ne.c:v1.10b 4/1/03 Donald Becker (becker@scyld.com)\n";
 
 
 #include <linux/module.h>
@@ -134,7 +134,6 @@
 #ifdef CONFIG_PNP
 static int ne_pnp_probe(struct pnp_dev *dev, const struct pnp_device_id *dev_id);
 static void ne_pnp_remove(struct pnp_dev *dev);
-
 static struct pnp_driver ne_pnp_driver = {
 	.name		= "ne",
 	.id_table 	= ne_pnp_table,
@@ -143,9 +142,14 @@
 };
 #endif
 
-int ne_probe(struct net_device *dev);
+static int ne_legacy_probe(unsigned long base_addr, unsigned long irq, unsigned long bad);
+
 static int ne_probe1(struct net_device *dev, int ioaddr);
 
+static int ne_create(struct net_device **ndev, unsigned long base_addr, 
+		unsigned long irq, unsigned long bad);
+static void ne_remove(struct net_device *dev);
+
 static int ne_open(struct net_device *dev);
 static int ne_close(struct net_device *dev);
 
@@ -179,82 +183,90 @@
 	E2010	 starts at 0x100 and ends at 0x4000.
 	E2010-x starts at 0x100 and ends at 0xffff.  */
 
-int __init ne_probe(struct net_device *dev)
+#ifdef CONFIG_PNP
+static int ne_pnp_probe(struct pnp_dev *idev, const struct pnp_device_id *dev_id)
 {
-	unsigned int base_addr = dev->base_addr;
-
-	SET_MODULE_OWNER(dev);
-
-	/* First check any supplied i/o locations. User knows best. <cough> */
-	if (base_addr > 0x1ff)	/* Check a single specified location. */
-		return ne_probe1(dev, base_addr);
-	else if (base_addr != 0)	/* Don't probe at all. */
-		return -ENXIO;
+	struct net_device *dev = NULL;
+	int err;
+	printk(KERN_INFO "ne.c: PnP reports %s at i/o %#lx, irq %ld\n",
+			idev->dev.name, pnp_port_start(idev, 0), pnp_irq(idev, 0));
+	err = ne_create(&dev, pnp_port_start(idev, 0), pnp_irq(idev, 0), 0);
+	if(dev)
+		pnp_set_drvdata(idev, dev);
+	return err;
+}
 
-#ifndef MODULE
-	/* Last resort. The semi-risky ISA auto-probe. */
-	for (base_addr = 0; netcard_portlist[base_addr] != 0; base_addr++) {
-		int ioaddr = netcard_portlist[base_addr];
-		if (ne_probe1(dev, ioaddr) == 0)
-			return 0;
-	}
+static void ne_pnp_remove(struct pnp_dev *idev)
+{
+	struct net_device *dev = pnp_get_drvdata(idev);	
+	ne_remove(dev);
+}
 #endif
+struct list_head ne_legacy_devs = LIST_HEAD_INIT(ne_legacy_devs);
 
-	return -ENODEV;
+struct ne_legacy{
+	struct net_device *dev;
+	struct list_head list;
+};
+
+static int ne_legacy_probe(unsigned long base_addr, unsigned long irq, unsigned long bad)
+{
+	struct ne_legacy *ne_card;
+	int err;
+	ne_card = kmalloc(sizeof(struct ne_legacy), GFP_KERNEL);
+	err = ne_create(&ne_card->dev, base_addr, irq,  bad);
+	if (!err) 
+		list_add(&ne_card->list, &ne_legacy_devs);
+	else
+		kfree(ne_card);
+	return err;
 }
 
-#ifdef CONFIG_PNP
-static int ne_pnp_probe(struct pnp_dev *idev, const struct pnp_device_id *dev_id)
+static int ne_create(struct net_device **ndev, unsigned long base_addr, unsigned long irq, unsigned long bad)
 {
-	struct net_device *dev;
 	int err;
 	
-	if ( !(dev = alloc_etherdev(0)) ){
+	if (!(*ndev = alloc_etherdev(0)) ){
 		err = -ENOMEM;
 		goto alloc_fail;
 	}
 	
-	dev->base_addr = pnp_port_start(idev, 0);
-	dev->irq = pnp_irq(idev, 0);
-	printk(KERN_INFO "ne.c: PnP reports %s at i/o %#lx, irq %d\n",
-			idev->dev.name, dev->base_addr, dev->irq);
+	(*ndev)->base_addr = base_addr;
+	(*ndev)->irq = irq;
+	(*ndev)->mem_end = bad;
+	SET_MODULE_OWNER(*ndev);
 	
-	SET_MODULE_OWNER(dev);
-	
-	if (ne_probe1(dev, dev->base_addr) != 0) {	/* Shouldn't happen. */
-		printk(KERN_ERR "ne.c: Probe of PnP card at %#lx failed\n", dev->base_addr);
+	if (ne_probe1(*ndev, (*ndev)->base_addr) != 0) {	/* Shouldn't happen. */
+		printk(KERN_ERR "ne.c: Probe at %#lx failed\n", (*ndev)->base_addr);
 		err = -ENXIO;
 		goto probe_fail;
 	}
 	
-	if ( (err = register_netdev(dev)) != 0)
+	if ( (err = register_netdev(*ndev)) != 0)
 		goto register_fail;
-
-	pnp_set_drvdata(idev, dev);
 	
 	return 0;
 	
 register_fail:
-		kfree(dev->priv);
-		release_region(dev->base_addr, NE_IO_EXTENT);
+		kfree((*ndev)->priv);
+		release_region((*ndev)->base_addr, NE_IO_EXTENT);
 probe_fail:
-		kfree(dev);
+		kfree(*ndev);
 alloc_fail:
 		return err;
 }
 
-static void ne_pnp_remove(struct pnp_dev *idev)
+static void ne_remove(struct net_device *dev)
 {
-	struct net_device *dev = pnp_get_drvdata(idev);	
 	if (dev) {
 		unregister_netdev(dev);
 		free_irq(dev->irq, dev);
 		release_region(dev->base_addr, NE_IO_EXTENT);
-		kfree(dev->priv);
+		if(dev->priv)
+			kfree(dev->priv);
 		kfree(dev);
 	}
 }
-#endif
 
 static int __init ne_probe1(struct net_device *dev, int ioaddr)
 {
@@ -751,10 +763,7 @@
 	return;
 }
 
-\f
-#ifdef MODULE
 #define MAX_NE_CARDS	4	/* Max number of NE cards per module */
-static struct net_device dev_ne[MAX_NE_CARDS];
 static int io[MAX_NE_CARDS];
 static int irq[MAX_NE_CARDS];
 static int bad[MAX_NE_CARDS];	/* 0xbad = bad sig or no reset ack */
@@ -773,60 +782,71 @@
 is at boot) and so the probe will get confused by any other 8390 cards.
 ISA device autoprobes on a running machine are not recommended anyway. */
 
-int init_module(void)
-{
-	int this_dev, found = 0;
 
+
+static int __init ne_init(void)
+{
+	int i, found = 0;
+	int err;
 #ifdef CONFIG_PNP	
-	found = pnp_register_driver(&ne_pnp_driver);
-	if (found < 0) {
-		return found;
+	err = pnp_register_driver(&ne_pnp_driver);
+	if (err < 0) {
+		goto pnp_fail;
 	}
+	else found += err;
 #endif
+	/* First check any supplied i/o locations. User knows best. <cough> */
+	for (i = 0; i < MAX_NE_CARDS; i++) {
+		if (io[i] > 0x1ff) {
+			err = ne_legacy_probe(io[i], irq[i], bad[i]);
+			if (!err)
+				found++;
+			else
+				printk(KERN_WARNING "ne.c: No NE*000 card found at i/o = %#x\n", io[i]);
+		}
+	}
 
-	for (this_dev = 0; this_dev < MAX_NE_CARDS; this_dev++) {
-		struct net_device *dev = &dev_ne[this_dev];
-		dev->irq = irq[this_dev];
-		dev->mem_end = bad[this_dev];
-		dev->base_addr = io[this_dev];
-		dev->init = ne_probe;
-		if (register_netdev(dev) == 0) {
+#ifndef MODULE
+	/* Last resort. The semi-risky ISA auto-probe. */
+	printk(KERN_INFO "ne.c: auto-probing...\m");
+	for (i = 0; netcard_portlist[i] != 0; i++) {
+		err = ne_legacy_probe(netcard_portlist[i], 0,  0);
+		if (!err) {
 			found++;
-			continue;
-		}
-		if (found != 0) { 	/* Got at least one. */
-			return 0;
-		}
-		if (io[this_dev] != 0)
-			printk(KERN_WARNING "ne.c: No NE*000 card found at i/o = %#x\n", io[this_dev]);
-		else
-			printk(KERN_NOTICE "ne.c: You must supply \"io=0xNNN\" value(s) for ISA cards.\n");
+		} 
+	}
+#endif
+	if (found > 0) 	/* Got at least one. */
+		return 0;
+	else
+		printk(KERN_NOTICE "ne.c: You must supply \"io=0xNNN\" value(s) for ISA cards.\n");
+
 #ifdef CONFIG_PNP
-		pnp_unregister_driver(&ne_pnp_driver);
+	pnp_unregister_driver(&ne_pnp_driver);
+pnp_fail:
 #endif
-		return -ENXIO;
-	}
-	return 0;
+	return -ENODEV;
 }
 
-void cleanup_module(void)
+static void __exit ne_cleanup(void)
 {
-	int this_dev;
-
+	struct list_head *entry;
+	struct list_head *tmp;
 #ifdef CONFIG_PNP	
 	pnp_unregister_driver(&ne_pnp_driver);
 #endif
-	for (this_dev = 0; this_dev < MAX_NE_CARDS; this_dev++) {
-		struct net_device *dev = &dev_ne[this_dev];
-		if (dev->priv != NULL) {
-			unregister_netdev(dev);
-			free_irq(dev->irq, dev);
-			release_region(dev->base_addr, NE_IO_EXTENT);
-			kfree(dev->priv);
-		}
+	/* Cleanup legacy devices */
+	list_for_each_safe(entry, tmp, &ne_legacy_devs) {
+		struct ne_legacy *card;
+		card = list_entry(entry, struct ne_legacy, list);
+		ne_remove(card->dev);
+		list_del(entry);
+		kfree(card);
 	}
 }
-#endif /* MODULE */
+
+module_init(ne_init);
+module_exit(ne_cleanup);
 
 \f
 /*
diff -u linux-2.5.66-nepnpid/drivers/net/Space.c linux-2.5.66-nelist/drivers/net/Space.c
--- linux-2.5.66-nepnpid/drivers/net/Space.c	2003-04-01 12:54:54.000000000 -0500
+++ linux-2.5.66-nelist/drivers/net/Space.c	2003-04-01 12:53:40.000000000 -0500
@@ -233,7 +233,7 @@
 #ifdef CONFIG_E2100		/* Cabletron E21xx series. */
 	{e2100_probe, 0},
 #endif
-#if defined(CONFIG_NE2000) || defined(CONFIG_NE2K_CBUS)	/* ISA & PC-9800 CBUS (use ne2k-pci for PCI cards) */
+#ifdef CONFIG_NE2K_CBUS	/* ISA & PC-9800 CBUS (use ne2k-pci for PCI cards) */
 	{ne_probe, 0},
 #endif
 #ifdef CONFIG_LANCE		/* ISA/VLB (use pcnet32 for PCI cards) */

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2003-04-01 18:28 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-04-01 18:32 [PATCH 0/3] NE2000 driver updates Jeff Muizelaar
2003-04-01 18:33 ` [PATCH 1/3] " Jeff Muizelaar
2003-04-01 18:34 ` [PATCH 2/3] " Jeff Muizelaar
2003-04-01 18:35 ` [PATCH 3/3] " Jeff Muizelaar

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).