netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] (0/7) device_probe enhancement
@ 2003-09-23 21:47 Stephen Hemminger
  2003-09-23 23:39 ` David S. Miller
  2003-09-24  0:40 ` Jeff Garzik
  0 siblings, 2 replies; 5+ messages in thread
From: Stephen Hemminger @ 2003-09-23 21:47 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: netdev

This comes from Al Viro's net device patchset and is updated for 2.6.0-test5 latest.
It adds a second probe list for network devices that are compiled into the kernel,
but allocate their own network device rather than being handed a device.

It is part of the incremental changes to have all network devices using dynamic
allocation.

diff -Nru a/drivers/net/Space.c b/drivers/net/Space.c
--- a/drivers/net/Space.c	Tue Sep 23 12:56:25 2003
+++ b/drivers/net/Space.c	Tue Sep 23 12:56:25 2003
@@ -111,6 +111,11 @@
 	int status;	/* non-zero if autoprobe has failed */
 };
 
+struct devprobe2 {
+	struct net_device *(*probe)(int unit);
+	int status;	/* non-zero if autoprobe has failed */
+};
+
 /*
  * probe_list walks a list of probe functions and calls each so long
  * as a non-zero ioaddr is given, or as long as it hasn't already failed 
@@ -136,6 +141,21 @@
 	return -ENODEV;
 }
 
+static int __init probe_list2(int unit, struct devprobe2 *p, int autoprobe)
+{
+	struct net_device *dev;
+	for (; p->probe; p++) {
+		if (autoprobe && p->status)
+			continue;
+		dev = p->probe(unit);
+		if (!IS_ERR(dev))
+			return 0;
+		if (autoprobe)
+			p->status = PTR_ERR(dev);
+	}
+	return -ENODEV;
+}
+
 /*
  * This is a bit of an artificial separation as there are PCI drivers
  * that also probe for EISA cards (in the PCI group) and there are ISA
@@ -376,6 +396,16 @@
 	return err;
 
 }
+ 
+static void __init ethif_probe2(int unit)
+{
+	unsigned long base_addr = netdev_boot_base("eth", unit);
+
+	if (base_addr == 1)
+		return;
+
+	return;	/* nothing yet */
+}
 
 #ifdef CONFIG_TR
 /* Token-ring device probe */
@@ -445,9 +475,12 @@
 		if (trif_probe(num))
 			break;
 #endif
-	for (num = 0; num < 8; ++num)
+	for (num = 0; num < 8; ++num) {
 		if (ethif_probe(num))
 			break;
+		ethif_probe2(num);
+	}
+
 #ifdef CONFIG_COPS
 	cops_probe(0);
 	cops_probe(1);
diff -Nru a/include/linux/netdevice.h b/include/linux/netdevice.h
--- a/include/linux/netdevice.h	Tue Sep 23 12:56:25 2003
+++ b/include/linux/netdevice.h	Tue Sep 23 12:56:25 2003
@@ -498,6 +498,7 @@
 extern void		probe_old_netdevs(void);
 extern int			netdev_boot_setup_add(char *name, struct ifmap *map);
 extern int 			netdev_boot_setup_check(struct net_device *dev);
+extern unsigned long		netdev_boot_base(const char *prefix, int unit);
 extern struct net_device    *dev_getbyhwaddr(unsigned short type, char *hwaddr);
 extern void		dev_add_pack(struct packet_type *pt);
 extern void		dev_remove_pack(struct packet_type *pt);
diff -Nru a/net/core/dev.c b/net/core/dev.c
--- a/net/core/dev.c	Tue Sep 23 12:56:25 2003
+++ b/net/core/dev.c	Tue Sep 23 12:56:25 2003
@@ -375,6 +375,30 @@
 	return 0;
 }
 
+
+/**
+ *	netdev_boot_base	- get address from boot time settings
+ *	@prefix: prefix for network device
+ *	@unit: id for network device
+ *
+ * 	Check boot time settings for the base address of device.
+ *	The found settings are set for the device to be used
+ *	later in the device probing.
+ *	Returns 0 if no settings found.
+ */
+unsigned long netdev_boot_base(const char *prefix, int unit)
+{
+	const struct netdev_boot_setup *s = dev_boot_setup;
+	char name[IFNAMSIZ];
+	int i;
+
+	sprintf(name, "%s%d", prefix, unit);
+	for (i = 0; i < NETDEV_BOOT_SETUP_MAX; i++)
+		if (!strcmp(name, s[i].name))
+			return s[i].map.base_addr;
+	return 0;
+}
+
 /*
  * Saves at boot time configured settings for any netdevice.
  */

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

end of thread, other threads:[~2003-09-24 17:03 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-09-23 21:47 [PATCH] (0/7) device_probe enhancement Stephen Hemminger
2003-09-23 23:39 ` David S. Miller
2003-09-24  0:25   ` Jeff Garzik
2003-09-24  0:40 ` Jeff Garzik
2003-09-24 17:03   ` [PATCH] (1/7) de620 -- dynamic allocation (resend) Stephen Hemminger

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).