diff --git a/drivers/net/Space.c b/drivers/net/Space.c
new file mode 100644
index 0000000..fc51937
--- /dev/null
+++ b/drivers/net/Space.c
@@ -0,0 +1,412 @@
+/*
+ * INET		An implementation of the TCP/IP protocol suite for the LINUX
+ *		operating system.  INET is implemented using the  BSD Socket
+ *		interface as the means of communication with the user level.
+ *
+ *		Holds initial configuration information for devices.
+ *
+ * Version:	@(#)Space.c	1.0.7	08/12/93
+ *
+ * Authors:	Ross Biro, <bir7@leland.Stanford.Edu>
+ *		Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
+ *		Donald J. Becker, <becker@scyld.com>
+ *
+ * Changelog:
+ *		Stephen Hemminger (09/2003)
+ *		- get rid of pre-linked dev list, dynamic device allocation
+ *		Paul Gortmaker (03/2002)
+ *		- struct init cleanup, enable multiple ISA autoprobes.
+ *		Arnaldo Carvalho de Melo <acme@conectiva.com.br> - 09/1999
+ *		- fix sbni: s/device/net_device/
+ *		Paul Gortmaker (06/98): 
+ *		 - sort probes in a sane way, make sure all (safe) probes
+ *		   get run once & failed autoprobes don't autoprobe again.
+ *
+ *		This program is free software; you can redistribute it and/or
+ *		modify it under the terms of the GNU General Public License
+ *		as published by the Free Software Foundation; either version
+ *		2 of the License, or (at your option) any later version.
+ */
+#include <linux/config.h>
+#include <linux/netdevice.h>
+#include <linux/etherdevice.h>
+#include <linux/trdevice.h>
+#include <linux/errno.h>
+#include <linux/init.h>
+#include <linux/netlink.h>
+#include <linux/divert.h>
+
+/* A unified ethernet device probe.  This is the easiest way to have every
+   ethernet adaptor have the name "eth[0123...]".
+   */
+
+extern struct net_device *ne2_probe(int unit);
+extern struct net_device *hp100_probe(int unit);
+extern struct net_device *ultra_probe(int unit);
+extern struct net_device *ultra32_probe(int unit);
+extern struct net_device *wd_probe(int unit);
+extern struct net_device *el2_probe(int unit);
+extern struct net_device *ne_probe(int unit);
+extern struct net_device *hp_probe(int unit);
+extern struct net_device *hp_plus_probe(int unit);
+extern struct net_device *express_probe(int unit);
+extern struct net_device *eepro_probe(int unit);
+extern struct net_device *at1700_probe(int unit);
+extern struct net_device *fmv18x_probe(int unit);
+extern struct net_device *eth16i_probe(int unit);
+extern struct net_device *i82596_probe(int unit);
+extern struct net_device *ewrk3_probe(int unit);
+extern struct net_device *el1_probe(int unit);
+extern struct net_device *wavelan_probe(int unit);
+extern struct net_device *arlan_probe(int unit);
+extern struct net_device *el16_probe(int unit);
+extern struct net_device *elmc_probe(int unit);
+extern struct net_device *skmca_probe(int unit);
+extern struct net_device *elplus_probe(int unit);
+extern struct net_device *ac3200_probe(int unit);
+extern struct net_device *es_probe(int unit);
+extern struct net_device *lne390_probe(int unit);
+extern struct net_device *e2100_probe(int unit);
+extern struct net_device *ni5010_probe(int unit);
+extern struct net_device *ni52_probe(int unit);
+extern struct net_device *ni65_probe(int unit);
+extern struct net_device *sonic_probe(int unit);
+extern struct net_device *SK_init(int unit);
+extern struct net_device *seeq8005_probe(int unit);
+extern struct net_device *smc_init(int unit);
+extern struct net_device *atarilance_probe(int unit);
+extern struct net_device *sun3lance_probe(int unit);
+extern struct net_device *sun3_82586_probe(int unit);
+extern struct net_device *apne_probe(int unit);
+extern struct net_device *bionet_probe(int unit);
+extern struct net_device *pamsnet_probe(int unit);
+extern struct net_device *cs89x0_probe(int unit);
+extern struct net_device *hplance_probe(int unit);
+extern struct net_device *bagetlance_probe(int unit);
+extern struct net_device *mvme147lance_probe(int unit);
+extern struct net_device *tc515_probe(int unit);
+extern struct net_device *lance_probe(int unit);
+extern struct net_device *mace_probe(int unit);
+extern struct net_device *macsonic_probe(int unit);
+extern struct net_device *mac8390_probe(int unit);
+extern struct net_device *mac89x0_probe(int unit);
+extern struct net_device *mc32_probe(int unit);
+extern struct net_device *cops_probe(int unit);
+extern struct net_device *ltpc_probe(void);
+  
+/* Detachable devices ("pocket adaptors") */
+extern struct net_device *de620_probe(int unit);
+
+/* Fibre Channel adapters */
+extern int iph5526_probe(struct net_device *dev);
+
+/* SBNI adapters */
+extern int sbni_probe(int unit);
+
+struct devprobe2 {
+	struct net_device *(*probe)(int unit);
+	int status;	/* non-zero if autoprobe has failed */
+};
+
+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
+ * drivers that probe for EISA cards (in the ISA group).  These are the
+ * legacy EISA only driver probes, and also the legacy PCI probes
+ */
+
+static struct devprobe2 eisa_probes[] __initdata = {
+#ifdef CONFIG_ULTRA32 
+	{ultra32_probe, 0},	
+#endif
+#ifdef CONFIG_AC3200	
+	{ac3200_probe, 0},
+#endif
+#ifdef CONFIG_ES3210
+	{es_probe, 0},
+#endif
+#ifdef CONFIG_LNE390
+	{lne390_probe, 0},
+#endif
+	{NULL, 0},
+};
+
+static struct devprobe2 mca_probes[] __initdata = {
+#ifdef CONFIG_NE2_MCA
+	{ne2_probe, 0},
+#endif
+#ifdef CONFIG_ELMC		/* 3c523 */
+	{elmc_probe, 0},
+#endif
+#ifdef CONFIG_ELMC_II		/* 3c527 */
+	{mc32_probe, 0},
+#endif
+#ifdef CONFIG_SKMC              /* SKnet Microchannel */
+        {skmca_probe, 0},
+#endif
+	{NULL, 0},
+};
+
+/*
+ * ISA probes that touch addresses < 0x400 (including those that also
+ * look for EISA/PCI/MCA cards in addition to ISA cards).
+ */
+static struct devprobe2 isa_probes[] __initdata = {
+#ifdef CONFIG_HP100 		/* ISA, EISA & PCI */
+	{hp100_probe, 0},
+#endif	
+#ifdef CONFIG_3C515
+	{tc515_probe, 0},
+#endif
+#ifdef CONFIG_ULTRA 
+	{ultra_probe, 0},
+#endif
+#ifdef CONFIG_WD80x3 
+	{wd_probe, 0},
+#endif
+#ifdef CONFIG_EL2 		/* 3c503 */
+	{el2_probe, 0},
+#endif
+#ifdef CONFIG_HPLAN
+	{hp_probe, 0},
+#endif
+#ifdef CONFIG_HPLAN_PLUS
+	{hp_plus_probe, 0},
+#endif
+#ifdef CONFIG_E2100		/* Cabletron E21xx series. */
+	{e2100_probe, 0},
+#endif
+#if defined(CONFIG_NE2000) || \
+    defined(CONFIG_NE_H8300)  /* ISA (use ne2k-pci for PCI cards) */
+	{ne_probe, 0},
+#endif
+#ifdef CONFIG_LANCE		/* ISA/VLB (use pcnet32 for PCI cards) */
+	{lance_probe, 0},
+#endif
+#ifdef CONFIG_SMC9194
+	{smc_init, 0},
+#endif
+#ifdef CONFIG_SEEQ8005 
+	{seeq8005_probe, 0},
+#endif
+#ifdef CONFIG_CS89x0
+ 	{cs89x0_probe, 0},
+#endif
+#ifdef CONFIG_AT1700
+	{at1700_probe, 0},
+#endif
+#ifdef CONFIG_FMV18X		/* Fujitsu FMV-181/182 */
+	{fmv18x_probe, 0},
+#endif
+#ifdef CONFIG_ETH16I
+	{eth16i_probe, 0},	/* ICL EtherTeam 16i/32 */
+#endif
+#ifdef CONFIG_EEXPRESS		/* Intel EtherExpress */
+	{express_probe, 0},
+#endif
+#ifdef CONFIG_EEXPRESS_PRO	/* Intel EtherExpress Pro/10 */
+	{eepro_probe, 0},
+#endif
+#ifdef CONFIG_EWRK3             /* DEC EtherWORKS 3 */
+    	{ewrk3_probe, 0},
+#endif
+#if defined(CONFIG_APRICOT) || defined(CONFIG_MVME16x_NET) || defined(CONFIG_BVME6000_NET)	/* Intel I82596 */
+	{i82596_probe, 0},
+#endif
+#ifdef CONFIG_EL1		/* 3c501 */
+	{el1_probe, 0},
+#endif
+#ifdef CONFIG_WAVELAN		/* WaveLAN */
+	{wavelan_probe, 0},
+#endif
+#ifdef CONFIG_ARLAN		/* Aironet */
+	{arlan_probe, 0},
+#endif
+#ifdef CONFIG_EL16		/* 3c507 */
+	{el16_probe, 0},
+#endif
+#ifdef CONFIG_ELPLUS		/* 3c505 */
+	{elplus_probe, 0},
+#endif
+#ifdef CONFIG_SK_G16
+	{SK_init, 0},
+#endif
+#ifdef CONFIG_NI5010
+	{ni5010_probe, 0},
+#endif
+#ifdef CONFIG_NI52
+	{ni52_probe, 0},
+#endif
+#ifdef CONFIG_NI65
+	{ni65_probe, 0},
+#endif
+	{NULL, 0},
+};
+
+static struct devprobe2 parport_probes[] __initdata = {
+#ifdef CONFIG_DE620		/* D-Link DE-620 adapter */
+	{de620_probe, 0},
+#endif
+	{NULL, 0},
+};
+
+static struct devprobe2 m68k_probes[] __initdata = {
+#ifdef CONFIG_ATARILANCE	/* Lance-based Atari ethernet boards */
+	{atarilance_probe, 0},
+#endif
+#ifdef CONFIG_SUN3LANCE         /* sun3 onboard Lance chip */
+	{sun3lance_probe, 0},
+#endif
+#ifdef CONFIG_SUN3_82586        /* sun3 onboard Intel 82586 chip */
+	{sun3_82586_probe, 0},
+#endif
+#ifdef CONFIG_APNE		/* A1200 PCMCIA NE2000 */
+	{apne_probe, 0},
+#endif
+#ifdef CONFIG_ATARI_BIONET	/* Atari Bionet Ethernet board */
+	{bionet_probe, 0},
+#endif
+#ifdef CONFIG_ATARI_PAMSNET	/* Atari PAMsNet Ethernet board */
+	{pamsnet_probe, 0},
+#endif
+#ifdef CONFIG_MVME147_NET	/* MVME147 internal Ethernet */
+	{mvme147lance_probe, 0},
+#endif
+#ifdef CONFIG_MACMACE		/* Mac 68k Quadra AV builtin Ethernet */
+	{mace_probe, 0},
+#endif
+#ifdef CONFIG_MACSONIC		/* Mac SONIC-based Ethernet of all sorts */ 
+	{macsonic_probe, 0},
+#endif
+#ifdef CONFIG_MAC8390           /* NuBus NS8390-based cards */
+	{mac8390_probe, 0},
+#endif
+#ifdef CONFIG_MAC89x0
+ 	{mac89x0_probe, 0},
+#endif
+	{NULL, 0},
+};
+
+/*
+ * Unified ethernet device probe, segmented per architecture and
+ * per bus interface. This drives the legacy devices only for now.
+ */
+ 
+static void __init ethif_probe2(int unit)
+{
+	unsigned long base_addr = netdev_boot_base("eth", unit);
+
+	if (base_addr == 1)
+		return;
+
+	(void)(	probe_list2(unit, m68k_probes, base_addr == 0) &&
+		probe_list2(unit, eisa_probes, base_addr == 0) &&
+		probe_list2(unit, mca_probes, base_addr == 0) &&
+		probe_list2(unit, isa_probes, base_addr == 0) &&
+		probe_list2(unit, parport_probes, base_addr == 0));
+}
+
+#ifdef CONFIG_TR
+/* Token-ring device probe */
+extern int ibmtr_probe_card(struct net_device *);
+extern struct net_device *sk_isa_probe(int unit);
+extern struct net_device *proteon_probe(int unit);
+extern struct net_device *smctr_probe(int unit);
+
+static struct devprobe2 tr_probes2[] __initdata = {
+#ifdef CONFIG_SKISA
+	{sk_isa_probe, 0},
+#endif
+#ifdef CONFIG_PROTEON
+	{proteon_probe, 0},
+#endif
+#ifdef CONFIG_SMCTR
+	{smctr_probe, 0},
+#endif
+	{NULL, 0},
+};
+
+static __init int trif_probe(int unit)
+{
+	int err = -ENODEV;
+#ifdef CONFIG_IBMTR
+	struct net_device *dev = alloc_trdev(0);
+	if (!dev)
+		return -ENOMEM;
+
+	sprintf(dev->name, "tr%d", unit);
+	netdev_boot_setup_check(dev);
+	err = ibmtr_probe_card(dev);
+	if (err)
+		free_netdev(dev);
+#endif
+	return err;
+}
+
+static void __init trif_probe2(int unit)
+{
+	unsigned long base_addr = netdev_boot_base("tr", unit);
+
+	if (base_addr == 1)
+		return;
+	probe_list2(unit, tr_probes2, base_addr == 0);
+}
+#endif
+
+	
+/*
+ *	The loopback device is global so it can be directly referenced
+ *	by the network code. Also, it must be first on device list.
+ */
+extern int loopback_init(void);
+
+/*  Statically configured drivers -- order matters here. */
+static int __init net_olddevs_init(void)
+{
+	int num;
+
+	if (loopback_init()) {
+		printk(KERN_ERR "Network loopback device setup failed\n");
+	}
+
+	
+#ifdef CONFIG_SBNI
+	for (num = 0; num < 8; ++num)
+		sbni_probe(num);
+#endif
+#ifdef CONFIG_TR
+	for (num = 0; num < 8; ++num)
+		if (!trif_probe(num))
+			trif_probe2(num);
+#endif
+	for (num = 0; num < 8; ++num)
+		ethif_probe2(num);
+
+#ifdef CONFIG_COPS
+	cops_probe(0);
+	cops_probe(1);
+	cops_probe(2);
+#endif
+#ifdef CONFIG_LTPC
+	ltpc_probe();
+#endif
+
+	return 0;
+}
+
+device_initcall(net_olddevs_init);
