1/*
2 * INET		An implementation of the TCP/IP protocol suite for the LINUX
3 *		operating system.  INET is implemented using the  BSD Socket
4 *		interface as the means of communication with the user level.
5 *
6 *		Holds initial configuration information for devices.
7 *
8 * Version:	@(#)Space.c	1.0.7	08/12/93
9 *
10 * Authors:	Ross Biro
11 *		Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
12 *		Donald J. Becker, <becker@scyld.com>
13 *
14 * Changelog:
15 *		Stephen Hemminger (09/2003)
16 *		- get rid of pre-linked dev list, dynamic device allocation
17 *		Paul Gortmaker (03/2002)
18 *		- struct init cleanup, enable multiple ISA autoprobes.
19 *		Arnaldo Carvalho de Melo <acme@conectiva.com.br> - 09/1999
20 *		- fix sbni: s/device/net_device/
21 *		Paul Gortmaker (06/98):
22 *		 - sort probes in a sane way, make sure all (safe) probes
23 *		   get run once & failed autoprobes don't autoprobe again.
24 *
25 *		This program is free software; you can redistribute it and/or
26 *		modify it under the terms of the GNU General Public License
27 *		as published by the Free Software Foundation; either version
28 *		2 of the License, or (at your option) any later version.
29 */
30#include <linux/netdevice.h>
31#include <linux/etherdevice.h>
32#include <linux/trdevice.h>
33#include <linux/errno.h>
34#include <linux/init.h>
35#include <linux/netlink.h>
36
37/* A unified ethernet device probe.  This is the easiest way to have every
38   ethernet adaptor have the name "eth[0123...]".
39   */
40
41extern struct net_device *ne2_probe(int unit);
42extern struct net_device *hp100_probe(int unit);
43extern struct net_device *ultra_probe(int unit);
44extern struct net_device *ultra32_probe(int unit);
45extern struct net_device *wd_probe(int unit);
46extern struct net_device *el2_probe(int unit);
47extern struct net_device *ne_probe(int unit);
48extern struct net_device *hp_probe(int unit);
49extern struct net_device *hp_plus_probe(int unit);
50extern struct net_device *express_probe(int unit);
51extern struct net_device *eepro_probe(int unit);
52extern struct net_device *at1700_probe(int unit);
53extern struct net_device *fmv18x_probe(int unit);
54extern struct net_device *eth16i_probe(int unit);
55extern struct net_device *i82596_probe(int unit);
56extern struct net_device *ewrk3_probe(int unit);
57extern struct net_device *el1_probe(int unit);
58extern struct net_device *wavelan_probe(int unit);
59extern struct net_device *arlan_probe(int unit);
60extern struct net_device *el16_probe(int unit);
61extern struct net_device *elmc_probe(int unit);
62extern struct net_device *elplus_probe(int unit);
63extern struct net_device *ac3200_probe(int unit);
64extern struct net_device *es_probe(int unit);
65extern struct net_device *lne390_probe(int unit);
66extern struct net_device *e2100_probe(int unit);
67extern struct net_device *ni5010_probe(int unit);
68extern struct net_device *ni52_probe(int unit);
69extern struct net_device *ni65_probe(int unit);
70extern struct net_device *sonic_probe(int unit);
71extern struct net_device *SK_init(int unit);
72extern struct net_device *seeq8005_probe(int unit);
73extern struct net_device *smc_init(int unit);
74extern struct net_device *atarilance_probe(int unit);
75extern struct net_device *sun3lance_probe(int unit);
76extern struct net_device *sun3_82586_probe(int unit);
77extern struct net_device *apne_probe(int unit);
78extern struct net_device *bionet_probe(int unit);
79extern struct net_device *pamsnet_probe(int unit);
80extern struct net_device *cs89x0_probe(int unit);
81extern struct net_device *hplance_probe(int unit);
82extern struct net_device *bagetlance_probe(int unit);
83extern struct net_device *mvme147lance_probe(int unit);
84extern struct net_device *tc515_probe(int unit);
85extern struct net_device *lance_probe(int unit);
86extern struct net_device *mac8390_probe(int unit);
87extern struct net_device *mac89x0_probe(int unit);
88extern struct net_device *mc32_probe(int unit);
89extern struct net_device *cops_probe(int unit);
90extern struct net_device *ltpc_probe(void);
91
92/* Detachable devices ("pocket adaptors") */
93extern struct net_device *de620_probe(int unit);
94
95/* Fibre Channel adapters */
96extern int iph5526_probe(struct net_device *dev);
97
98/* SBNI adapters */
99extern int sbni_probe(int unit);
100
101struct devprobe2 {
102	struct net_device *(*probe)(int unit);
103	int status;	/* non-zero if autoprobe has failed */
104};
105
106static int __init probe_list2(int unit, struct devprobe2 *p, int autoprobe)
107{
108	struct net_device *dev;
109	for (; p->probe; p++) {
110		if (autoprobe && p->status)
111			continue;
112		dev = p->probe(unit);
113		if (!IS_ERR(dev))
114			return 0;
115		if (autoprobe)
116			p->status = PTR_ERR(dev);
117	}
118	return -ENODEV;
119}
120
121/*
122 * This is a bit of an artificial separation as there are PCI drivers
123 * that also probe for EISA cards (in the PCI group) and there are ISA
124 * drivers that probe for EISA cards (in the ISA group).  These are the
125 * legacy EISA only driver probes, and also the legacy PCI probes
126 */
127
128static struct devprobe2 eisa_probes[] __initdata = {
129#ifdef CONFIG_ULTRA32
130	{ultra32_probe, 0},
131#endif
132#ifdef CONFIG_AC3200
133	{ac3200_probe, 0},
134#endif
135#ifdef CONFIG_ES3210
136	{es_probe, 0},
137#endif
138#ifdef CONFIG_LNE390
139	{lne390_probe, 0},
140#endif
141	{NULL, 0},
142};
143
144static struct devprobe2 mca_probes[] __initdata = {
145#ifdef CONFIG_NE2_MCA
146	{ne2_probe, 0},
147#endif
148#ifdef CONFIG_ELMC		    /* 3c523 */
149	{elmc_probe, 0},
150#endif
151#ifdef CONFIG_ELMC_II		    /* 3c527 */
152	{mc32_probe, 0},
153#endif
154	{NULL, 0},
155};
156
157/*
158 * ISA probes that touch addresses < 0x400 (including those that also
159 * look for EISA/PCI/MCA cards in addition to ISA cards).
160 */
161static struct devprobe2 isa_probes[] __initdata = {
162#if defined(CONFIG_HP100) && defined(CONFIG_ISA)	    /* ISA, EISA */
163	{hp100_probe, 0},
164#endif
165#ifdef CONFIG_3C515
166	{tc515_probe, 0},
167#endif
168#ifdef CONFIG_ULTRA
169	{ultra_probe, 0},
170#endif
171#ifdef CONFIG_WD80x3
172	{wd_probe, 0},
173#endif
174#ifdef CONFIG_EL2 		    /* 3c503 */
175	{el2_probe, 0},
176#endif
177#ifdef CONFIG_HPLAN
178	{hp_probe, 0},
179#endif
180#ifdef CONFIG_HPLAN_PLUS
181	{hp_plus_probe, 0},
182#endif
183#ifdef CONFIG_E2100		    /* Cabletron E21xx series. */
184	{e2100_probe, 0},
185#endif
186#if defined(CONFIG_NE2000) || defined(CONFIG_NE_H8300)      /* ISA (use ne2k-pci for \
187	PCI cards) */
188	{ne_probe, 0},
189#endif
190#ifdef CONFIG_LANCE		    /* ISA/VLB (use pcnet32 for PCI cards) */
191	{lance_probe, 0},
192#endif
193#ifdef CONFIG_SMC9194
194	{smc_init, 0},
195#endif
196#ifdef CONFIG_SEEQ8005
197	{seeq8005_probe, 0},
198#endif
199#ifdef CONFIG_CS89x0
200 	{cs89x0_probe, 0},
201#endif
202#ifdef CONFIG_AT1700
203	{at1700_probe, 0},
204#endif
205#ifdef CONFIG_ETH16I
206	{eth16i_probe, 0},	/* ICL EtherTeam 16i/32 */
207#endif
208#ifdef CONFIG_EEXPRESS		    /* Intel EtherExpress */
209	{express_probe, 0},
210#endif
211#ifdef CONFIG_EEXPRESS_PRO	    /* Intel EtherExpress Pro/10 */
212	{eepro_probe, 0},
213#endif
214#ifdef CONFIG_EWRK3                 /* DEC EtherWORKS 3 */
215    	{ewrk3_probe, 0},
216#endif
217#if defined(CONFIG_APRICOT) || defined(CONFIG_MVME16x_NET) || \
218	defined(CONFIG_BVME6000_NET)	    /* Intel I82596 */
219	{i82596_probe, 0},
220#endif
221#ifdef CONFIG_EL1		    /* 3c501 */
222	{el1_probe, 0},
223#endif
224#ifdef CONFIG_WAVELAN		    /* WaveLAN */
225	{wavelan_probe, 0},
226#endif
227#ifdef CONFIG_ARLAN		    /* Aironet */
228	{arlan_probe, 0},
229#endif
230#ifdef CONFIG_EL16		    /* 3c507 */
231	{el16_probe, 0},
232#endif
233#ifdef CONFIG_ELPLUS		    /* 3c505 */
234	{elplus_probe, 0},
235#endif
236#ifdef CONFIG_NI5010
237	{ni5010_probe, 0},
238#endif
239#ifdef CONFIG_NI52
240	{ni52_probe, 0},
241#endif
242#ifdef CONFIG_NI65
243	{ni65_probe, 0},
244#endif
245	{NULL, 0},
246};
247
248static struct devprobe2 parport_probes[] __initdata = {
249#ifdef CONFIG_DE620		    /* D-Link DE-620 adapter */
250	{de620_probe, 0},
251#endif
252	{NULL, 0},
253};
254
255static struct devprobe2 m68k_probes[] __initdata = {
256#ifdef CONFIG_ATARILANCE	    /* Lance-based Atari ethernet boards */
257	{atarilance_probe, 0},
258#endif
259#ifdef CONFIG_SUN3LANCE             /* sun3 onboard Lance chip */
260	{sun3lance_probe, 0},
261#endif
262#ifdef CONFIG_SUN3_82586            /* sun3 onboard Intel 82586 chip */
263	{sun3_82586_probe, 0},
264#endif
265#ifdef CONFIG_APNE		    /* A1200 PCMCIA NE2000 */
266	{apne_probe, 0},
267#endif
268#ifdef CONFIG_ATARI_BIONET	    /* Atari Bionet Ethernet board */
269	{bionet_probe, 0},
270#endif
271#ifdef CONFIG_ATARI_PAMSNET	    /* Atari PAMsNet Ethernet board */
272	{pamsnet_probe, 0},
273#endif
274#ifdef CONFIG_MVME147_NET	    /* MVME147 internal Ethernet */
275	{mvme147lance_probe, 0},
276#endif
277#ifdef CONFIG_MAC8390               /* NuBus NS8390-based cards */
278	{mac8390_probe, 0},
279#endif
280#ifdef CONFIG_MAC89x0
281 	{mac89x0_probe, 0},
282#endif
283	{NULL, 0},
284};
285
286/*
287 * Unified ethernet device probe, segmented per architecture and
288 * per bus interface. This drives the legacy devices only for now.
289 */
290
291static void __init ethif_probe2(int unit)
292{
293	unsigned long base_addr = netdev_boot_base("eth", unit);
294
295	if (base_addr == 1)
296		return;
297
298	(void)(	probe_list2(unit, m68k_probes, base_addr == 0) &&
299		probe_list2(unit, eisa_probes, base_addr == 0) &&
300		probe_list2(unit, mca_probes, base_addr == 0) &&
301		probe_list2(unit, isa_probes, base_addr == 0) &&
302		probe_list2(unit, parport_probes, base_addr == 0));
303}
304
305#ifdef CONFIG_TR
306/* Token-ring device probe */
307extern int ibmtr_probe_card(struct net_device *);
308extern struct net_device *smctr_probe(int unit);
309
310static struct devprobe2 tr_probes2[] __initdata = {
311#ifdef CONFIG_SMCTR
312	{smctr_probe, 0},
313#endif
314	{NULL, 0},
315};
316
317static __init int trif_probe(int unit)
318{
319	int err = -ENODEV;
320#ifdef CONFIG_IBMTR
321	struct net_device *dev = alloc_trdev(0);
322	if (!dev)
323		return -ENOMEM;
324
325	sprintf(dev->name, "tr%d", unit);
326	netdev_boot_setup_check(dev);
327	err = ibmtr_probe_card(dev);
328	if (err)
329		free_netdev(dev);
330#endif
331	return err;
332}
333
334static void __init trif_probe2(int unit)
335{
336	unsigned long base_addr = netdev_boot_base("tr", unit);
337
338	if (base_addr == 1)
339		return;
340	probe_list2(unit, tr_probes2, base_addr == 0);
341}
342#endif
343
344
345/*  Statically configured drivers -- order matters here. */
346static int __init net_olddevs_init(void)
347{
348	int num;
349
350#ifdef CONFIG_SBNI
351	for (num = 0; num < 8; ++num)
352		sbni_probe(num);
353#endif
354#ifdef CONFIG_TR
355	for (num = 0; num < 8; ++num)
356		if (!trif_probe(num))
357			trif_probe2(num);
358#endif
359	for (num = 0; num < 8; ++num)
360		ethif_probe2(num);
361
362#ifdef CONFIG_COPS
363	cops_probe(0);
364	cops_probe(1);
365	cops_probe(2);
366#endif
367#ifdef CONFIG_LTPC
368	ltpc_probe();
369#endif
370
371	return 0;
372}
373
374device_initcall(net_olddevs_init);
375