1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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
38
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 *cs89x0_probe(int unit);
79extern struct net_device *hplance_probe(int unit);
80extern struct net_device *bagetlance_probe(int unit);
81extern struct net_device *mvme147lance_probe(int unit);
82extern struct net_device *tc515_probe(int unit);
83extern struct net_device *lance_probe(int unit);
84extern struct net_device *mac8390_probe(int unit);
85extern struct net_device *mac89x0_probe(int unit);
86extern struct net_device *mc32_probe(int unit);
87extern struct net_device *cops_probe(int unit);
88extern struct net_device *ltpc_probe(void);
89
90
91extern struct net_device *de620_probe(int unit);
92
93
94extern int iph5526_probe(struct net_device *dev);
95
96
97extern int sbni_probe(int unit);
98
99struct devprobe2 {
100 struct net_device *(*probe)(int unit);
101 int status;
102};
103
104static int __init probe_list2(int unit, struct devprobe2 *p, int autoprobe)
105{
106 struct net_device *dev;
107 for (; p->probe; p++) {
108 if (autoprobe && p->status)
109 continue;
110 dev = p->probe(unit);
111 if (!IS_ERR(dev))
112 return 0;
113 if (autoprobe)
114 p->status = PTR_ERR(dev);
115 }
116 return -ENODEV;
117}
118
119
120
121
122
123
124
125
126static struct devprobe2 eisa_probes[] __initdata = {
127#ifdef CONFIG_ULTRA32
128 {ultra32_probe, 0},
129#endif
130#ifdef CONFIG_AC3200
131 {ac3200_probe, 0},
132#endif
133#ifdef CONFIG_ES3210
134 {es_probe, 0},
135#endif
136#ifdef CONFIG_LNE390
137 {lne390_probe, 0},
138#endif
139 {NULL, 0},
140};
141
142static struct devprobe2 mca_probes[] __initdata = {
143#ifdef CONFIG_NE2_MCA
144 {ne2_probe, 0},
145#endif
146#ifdef CONFIG_ELMC
147 {elmc_probe, 0},
148#endif
149#ifdef CONFIG_ELMC_II
150 {mc32_probe, 0},
151#endif
152 {NULL, 0},
153};
154
155
156
157
158
159static struct devprobe2 isa_probes[] __initdata = {
160#if defined(CONFIG_HP100) && defined(CONFIG_ISA)
161 {hp100_probe, 0},
162#endif
163#ifdef CONFIG_3C515
164 {tc515_probe, 0},
165#endif
166#ifdef CONFIG_ULTRA
167 {ultra_probe, 0},
168#endif
169#ifdef CONFIG_WD80x3
170 {wd_probe, 0},
171#endif
172#ifdef CONFIG_EL2
173 {el2_probe, 0},
174#endif
175#ifdef CONFIG_HPLAN
176 {hp_probe, 0},
177#endif
178#ifdef CONFIG_HPLAN_PLUS
179 {hp_plus_probe, 0},
180#endif
181#ifdef CONFIG_E2100
182 {e2100_probe, 0},
183#endif
184#if defined(CONFIG_NE2000) || \
185 defined(CONFIG_NE_H8300)
186 {ne_probe, 0},
187#endif
188#ifdef CONFIG_LANCE
189 {lance_probe, 0},
190#endif
191#ifdef CONFIG_SMC9194
192 {smc_init, 0},
193#endif
194#ifdef CONFIG_SEEQ8005
195 {seeq8005_probe, 0},
196#endif
197#ifdef CONFIG_CS89x0
198 {cs89x0_probe, 0},
199#endif
200#ifdef CONFIG_AT1700
201 {at1700_probe, 0},
202#endif
203#ifdef CONFIG_ETH16I
204 {eth16i_probe, 0},
205#endif
206#ifdef CONFIG_EEXPRESS
207 {express_probe, 0},
208#endif
209#ifdef CONFIG_EEXPRESS_PRO
210 {eepro_probe, 0},
211#endif
212#ifdef CONFIG_EWRK3
213 {ewrk3_probe, 0},
214#endif
215#if defined(CONFIG_APRICOT) || defined(CONFIG_MVME16x_NET) || defined(CONFIG_BVME6000_NET)
216 {i82596_probe, 0},
217#endif
218#ifdef CONFIG_EL1
219 {el1_probe, 0},
220#endif
221#ifdef CONFIG_WAVELAN
222 {wavelan_probe, 0},
223#endif
224#ifdef CONFIG_ARLAN
225 {arlan_probe, 0},
226#endif
227#ifdef CONFIG_EL16
228 {el16_probe, 0},
229#endif
230#ifdef CONFIG_ELPLUS
231 {elplus_probe, 0},
232#endif
233#ifdef CONFIG_NI5010
234 {ni5010_probe, 0},
235#endif
236#ifdef CONFIG_NI52
237 {ni52_probe, 0},
238#endif
239#ifdef CONFIG_NI65
240 {ni65_probe, 0},
241#endif
242 {NULL, 0},
243};
244
245static struct devprobe2 parport_probes[] __initdata = {
246#ifdef CONFIG_DE620
247 {de620_probe, 0},
248#endif
249 {NULL, 0},
250};
251
252static struct devprobe2 m68k_probes[] __initdata = {
253#ifdef CONFIG_ATARILANCE
254 {atarilance_probe, 0},
255#endif
256#ifdef CONFIG_SUN3LANCE
257 {sun3lance_probe, 0},
258#endif
259#ifdef CONFIG_SUN3_82586
260 {sun3_82586_probe, 0},
261#endif
262#ifdef CONFIG_APNE
263 {apne_probe, 0},
264#endif
265#ifdef CONFIG_MVME147_NET
266 {mvme147lance_probe, 0},
267#endif
268#ifdef CONFIG_MAC8390
269 {mac8390_probe, 0},
270#endif
271#ifdef CONFIG_MAC89x0
272 {mac89x0_probe, 0},
273#endif
274 {NULL, 0},
275};
276
277
278
279
280
281
282static void __init ethif_probe2(int unit)
283{
284 unsigned long base_addr = netdev_boot_base("eth", unit);
285
286 if (base_addr == 1)
287 return;
288
289 (void)( probe_list2(unit, m68k_probes, base_addr == 0) &&
290 probe_list2(unit, eisa_probes, base_addr == 0) &&
291 probe_list2(unit, mca_probes, base_addr == 0) &&
292 probe_list2(unit, isa_probes, base_addr == 0) &&
293 probe_list2(unit, parport_probes, base_addr == 0));
294}
295
296#ifdef CONFIG_TR
297
298extern int ibmtr_probe_card(struct net_device *);
299extern struct net_device *smctr_probe(int unit);
300
301static struct devprobe2 tr_probes2[] __initdata = {
302#ifdef CONFIG_SMCTR
303 {smctr_probe, 0},
304#endif
305 {NULL, 0},
306};
307
308static __init int trif_probe(int unit)
309{
310 int err = -ENODEV;
311#ifdef CONFIG_IBMTR
312 struct net_device *dev = alloc_trdev(0);
313 if (!dev)
314 return -ENOMEM;
315
316 sprintf(dev->name, "tr%d", unit);
317 netdev_boot_setup_check(dev);
318 err = ibmtr_probe_card(dev);
319 if (err)
320 free_netdev(dev);
321#endif
322 return err;
323}
324
325static void __init trif_probe2(int unit)
326{
327 unsigned long base_addr = netdev_boot_base("tr", unit);
328
329 if (base_addr == 1)
330 return;
331 probe_list2(unit, tr_probes2, base_addr == 0);
332}
333#endif
334
335
336
337static int __init net_olddevs_init(void)
338{
339 int num;
340
341#ifdef CONFIG_SBNI
342 for (num = 0; num < 8; ++num)
343 sbni_probe(num);
344#endif
345#ifdef CONFIG_TR
346 for (num = 0; num < 8; ++num)
347 if (!trif_probe(num))
348 trif_probe2(num);
349#endif
350 for (num = 0; num < 8; ++num)
351 ethif_probe2(num);
352
353#ifdef CONFIG_COPS
354 cops_probe(0);
355 cops_probe(1);
356 cops_probe(2);
357#endif
358#ifdef CONFIG_LTPC
359 ltpc_probe();
360#endif
361
362 return 0;
363}
364
365device_initcall(net_olddevs_init);
366