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 * NOTE: This file is a nice idea, but its current format does not work
9 * well for drivers that support multiple units, like the SLIP
10 * driver. We should actually have only one pointer to a driver
11 * here, with the driver knowing how many units it supports.
12 * Currently, the SLIP driver abuses the "base_addr" integer
13 * field of the 'device' structure to store the unit number...
14 * -FvK
15 *
16 * Version: @(#)Space.c 1.0.7 08/12/93
17 *
18 * Authors: Ross Biro, <bir7@leland.Stanford.Edu>
19 * Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
20 * Donald J. Becker, <becker@super.org>
21 *
22 * FIXME:
23 * Sort the device chain fastest first.
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/config.h>
31 #include <linux/netdevice.h>
32 #include <linux/errno.h>
33
34 #define NEXT_DEV NULL
35
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
41 extern int ultra_probe(struct device *dev);
42 extern int wd_probe(struct device *dev);
43 extern int el2_probe(struct device *dev);
44 extern int ne_probe(struct device *dev);
45 extern int hp_probe(struct device *dev);
46 extern int hp_plus_probe(struct device *dev);
47 extern int znet_probe(struct device *);
48 extern int express_probe(struct device *);
49 extern int eepro_probe(struct device *);
50 extern int el3_probe(struct device *);
51 extern int at1500_probe(struct device *);
52 extern int at1700_probe(struct device *);
53 extern int depca_probe(struct device *);
54 extern int apricot_probe(struct device *);
55 extern int ewrk3_probe(struct device *);
56 extern int de4x5_probe(struct device *);
57 extern int el1_probe(struct device *);
58 #if defined(CONFIG_WAVELAN)
59 extern int wavelan_probe(struct device *);
60 #endif /* defined(CONFIG_WAVELAN) */
61 extern int el16_probe(struct device *);
62 extern int elplus_probe(struct device *);
63 extern int ac3200_probe(struct device *);
64 extern int e2100_probe(struct device *);
65 extern int ni52_probe(struct device *);
66 extern int ni65_probe(struct device *);
67 extern int SK_init(struct device *);
68
69 /* Detachable devices ("pocket adaptors") */
70 extern int atp_init(struct device *);
71 extern int de600_probe(struct device *);
72 extern int de620_probe(struct device *);
73
74 static int
75 ethif_probe(struct device *dev)
/* ![[previous]](../icons/n_left.png)
![[next]](../icons/n_right.png)
![[first]](../icons/n_first.png)
![[last]](../icons/n_last.png)
![[top]](../icons/top.png)
![[bottom]](../icons/bottom.png)
![[index]](../icons/index.png)
*/
76 {
77 short base_addr = dev->base_addr;
78
79 if (base_addr < 0 || base_addr == 1)
80 return 1; /* ENXIO */
81
82 if (1
83 #if defined(CONFIG_ULTRA)
84 && ultra_probe(dev)
85 #endif
86 #if defined(CONFIG_WD80x3) || defined(WD80x3)
87 && wd_probe(dev)
88 #endif
89 #if defined(CONFIG_EL2) || defined(EL2) /* 3c503 */
90 && el2_probe(dev)
91 #endif
92 #if defined(CONFIG_NE2000) || defined(NE2000)
93 && ne_probe(dev)
94 #endif
95 #if defined(CONFIG_HPLAN) || defined(HPLAN)
96 && hp_probe(dev)
97 #endif
98 #if defined(CONFIG_HPLAN_PLUS)
99 && hp_plus_probe(dev)
100 #endif
101 #ifdef CONFIG_AT1500
102 && at1500_probe(dev)
103 #endif
104 #ifdef CONFIG_AT1700
105 && at1700_probe(dev)
106 #endif
107 #ifdef CONFIG_EL3 /* 3c509 */
108 && el3_probe(dev)
109 #endif
110 #ifdef CONFIG_ZNET /* Zenith Z-Note and some IBM Thinkpads. */
111 && znet_probe(dev)
112 #endif
113 #ifdef CONFIG_EEXPRESS /* Intel EtherExpress */
114 && express_probe(dev)
115 #endif
116 #ifdef CONFIG_EEXPRESS_PRO /* Intel EtherExpress Pro/10 */
117 && eepro_probe(dev)
118 #endif
119 #ifdef CONFIG_DEPCA /* DEC DEPCA */
120 && depca_probe(dev)
121 #endif
122 #ifdef CONFIG_EWRK3 /* DEC EtherWORKS 3 */
123 && ewrk3_probe(dev)
124 #endif
125 #ifdef CONFIG_DE4X5 /* DEC DE425, DE434, DE435 adapters */
126 && de4x5_probe(dev)
127 #endif
128 #ifdef CONFIG_APRICOT /* Apricot I82596 */
129 && apricot_probe(dev)
130 #endif
131 #ifdef CONFIG_EL1 /* 3c501 */
132 && el1_probe(dev)
133 #endif
134 #if defined(CONFIG_WAVELAN) /* WaveLAN */
135 && wavelan_probe(dev)
136 #endif /* defined(CONFIG_WAVELAN) */
137 #ifdef CONFIG_EL16 /* 3c507 */
138 && el16_probe(dev)
139 #endif
140 #ifdef CONFIG_ELPLUS /* 3c505 */
141 && elplus_probe(dev)
142 #endif
143 #ifdef CONFIG_AC3200 /* Ansel Communications EISA 3200. */
144 && ac3200_probe(dev)
145 #endif
146 #ifdef CONFIG_E2100 /* Cabletron E21xx series. */
147 && e2100_probe(dev)
148 #endif
149 #ifdef CONFIG_DE600 /* D-Link DE-600 adapter */
150 && de600_probe(dev)
151 #endif
152 #ifdef CONFIG_DE620 /* D-Link DE-620 adapter */
153 && de620_probe(dev)
154 #endif
155 #if defined(CONFIG_SK_G16)
156 && SK_init(dev)
157 #endif
158 #ifdef CONFIG_NI52
159 && ni52_probe(dev)
160 #endif
161 #ifdef CONFIG_NI65
162 && ni65_probe(dev)
163 #endif
164 && 1 ) {
165 return 1; /* -ENODEV or -EAGAIN would be more accurate. */
166 }
167 return 0;
168 }
169
170
171 #ifdef CONFIG_NETROM
172 extern int nr_init(struct device *);
173
174 static struct device nr3_dev = { "nr3", 0, 0, 0, 0, 0, 0, 0, 0, 0, NEXT_DEV, nr_init, };
175 static struct device nr2_dev = { "nr2", 0, 0, 0, 0, 0, 0, 0, 0, 0, &nr3_dev, nr_init, };
176 static struct device nr1_dev = { "nr1", 0, 0, 0, 0, 0, 0, 0, 0, 0, &nr2_dev, nr_init, };
177 static struct device nr0_dev = { "nr0", 0, 0, 0, 0, 0, 0, 0, 0, 0, &nr1_dev, nr_init, };
178
179 # undef NEXT_DEV
180 # define NEXT_DEV (&nr0_dev)
181 #endif
182
183 /* Run-time ATtachable (Pocket) devices have a different (not "eth#") name. */
184 #ifdef CONFIG_ATP /* AT-LAN-TEC (RealTek) pocket adaptor. */
185 static struct device atp_dev = {
186 "atp0", 0, 0, 0, 0, 0, 0, 0, 0, 0, NEXT_DEV, atp_init, /* ... */ };
187 # undef NEXT_DEV
188 # define NEXT_DEV (&atp_dev)
189 #endif
190
191 #ifdef CONFIG_ARCNET
192 extern int arcnet_probe(struct device *dev);
193 static struct device arcnet_dev = {
194 "arc0", 0x0, 0x0, 0x0, 0x0, 0, 0, 0, 0, 0, NEXT_DEV, arcnet_probe, };
195 # undef NEXT_DEV
196 # define NEXT_DEV (&arcnet_dev)
197 #endif
198
199 /* The first device defaults to I/O base '0', which means autoprobe. */
200 #ifndef ETH0_ADDR
201 # define ETH0_ADDR 0
202 #endif
203 #ifndef ETH0_IRQ
204 # define ETH0_IRQ 0
205 #endif
206 /* "eth0" defaults to autoprobe (== 0), other use a base of 0xffe0 (== -0x20),
207 which means "don't probe". These entries exist to only to provide empty
208 slots which may be enabled at boot-time. */
209
210 static struct device eth3_dev = {
211 "eth3", 0,0,0,0,0xffe0 /* I/O base*/, 0,0,0,0, NEXT_DEV, ethif_probe };
212 static struct device eth2_dev = {
213 "eth2", 0,0,0,0,0xffe0 /* I/O base*/, 0,0,0,0, ð3_dev, ethif_probe };
214 static struct device eth1_dev = {
215 "eth1", 0,0,0,0,0xffe0 /* I/O base*/, 0,0,0,0, ð2_dev, ethif_probe };
216
217 static struct device eth0_dev = {
218 "eth0", 0, 0, 0, 0, ETH0_ADDR, ETH0_IRQ, 0, 0, 0, ð1_dev, ethif_probe };
219
220 # undef NEXT_DEV
221 # define NEXT_DEV (ð0_dev)
222
223 #if defined(PLIP) || defined(CONFIG_PLIP)
224 extern int plip_init(struct device *);
225 static struct device plip2_dev = {
226 "plip2", 0, 0, 0, 0, 0x278, 2, 0, 0, 0, NEXT_DEV, plip_init, };
227 static struct device plip1_dev = {
228 "plip1", 0, 0, 0, 0, 0x378, 7, 0, 0, 0, &plip2_dev, plip_init, };
229 static struct device plip0_dev = {
230 "plip0", 0, 0, 0, 0, 0x3BC, 5, 0, 0, 0, &plip1_dev, plip_init, };
231 # undef NEXT_DEV
232 # define NEXT_DEV (&plip0_dev)
233 #endif /* PLIP */
234
235 #if defined(SLIP) || defined(CONFIG_SLIP)
236 extern int slip_init(struct device *);
237
238 #ifdef SL_SLIP_LOTS
239
240 static struct device slip15_dev={"sl15",0,0,0,0,15,0,0,0,0,NEXT_DEV,slip_init};
241 static struct device slip14_dev={"sl14",0,0,0,0,14,0,0,0,0,&slip15_dev,slip_init};
242 static struct device slip13_dev={"sl13",0,0,0,0,13,0,0,0,0,&slip14_dev,slip_init};
243 static struct device slip12_dev={"sl12",0,0,0,0,12,0,0,0,0,&slip13_dev,slip_init};
244 static struct device slip11_dev={"sl11",0,0,0,0,11,0,0,0,0,&slip12_dev,slip_init};
245 static struct device slip10_dev={"sl10",0,0,0,0,10,0,0,0,0,&slip11_dev,slip_init};
246 static struct device slip9_dev={"sl9",0,0,0,0,9,0,0,0,0,&slip10_dev,slip_init};
247 static struct device slip8_dev={"sl8",0,0,0,0,8,0,0,0,0,&slip9_dev,slip_init};
248 static struct device slip7_dev={"sl7",0,0,0,0,7,0,0,0,0,&slip8_dev,slip_init};
249 static struct device slip6_dev={"sl6",0,0,0,0,6,0,0,0,0,&slip7_dev,slip_init};
250 static struct device slip5_dev={"sl5",0,0,0,0,5,0,0,0,0,&slip6_dev,slip_init};
251 static struct device slip4_dev={"sl4",0,0,0,0,4,0,0,0,0,&slip5_dev,slip_init};
252 # undef NEXT_DEV
253 # define NEXT_DEV (&slip4_dev)
254 #endif /* SL_SLIP_LOTS */
255
256 static struct device slip3_dev = {
257 "sl3", /* Internal SLIP driver, channel 3 */
258 0x0, /* recv memory end */
259 0x0, /* recv memory start */
260 0x0, /* memory end */
261 0x0, /* memory start */
262 0x3, /* base I/O address */
263 0, /* IRQ */
264 0, 0, 0, /* flags */
265 NEXT_DEV, /* next device */
266 slip_init /* slip_init should set up the rest */
267 };
268 static struct device slip2_dev = {
269 "sl2", /* Internal SLIP driver, channel 2 */
270 0x0, /* recv memory end */
271 0x0, /* recv memory start */
272 0x0, /* memory end */
273 0x0, /* memory start */
274 0x2, /* base I/O address */
275 0, /* IRQ */
276 0, 0, 0, /* flags */
277 &slip3_dev, /* next device */
278 slip_init /* slip_init should set up the rest */
279 };
280 static struct device slip1_dev = {
281 "sl1", /* Internal SLIP driver, channel 1 */
282 0x0, /* recv memory end */
283 0x0, /* recv memory start */
284 0x0, /* memory end */
285 0x0, /* memory start */
286 0x1, /* base I/O address */
287 0, /* IRQ */
288 0, 0, 0, /* flags */
289 &slip2_dev, /* next device */
290 slip_init /* slip_init should set up the rest */
291 };
292 static struct device slip0_dev = {
293 "sl0", /* Internal SLIP driver, channel 0 */
294 0x0, /* recv memory end */
295 0x0, /* recv memory start */
296 0x0, /* memory end */
297 0x0, /* memory start */
298 0x0, /* base I/O address */
299 0, /* IRQ */
300 0, 0, 0, /* flags */
301 &slip1_dev, /* next device */
302 slip_init /* slip_init should set up the rest */
303 };
304 # undef NEXT_DEV
305 # define NEXT_DEV (&slip0_dev)
306 #endif /* SLIP */
307
308 #if defined(CONFIG_PPP)
309 extern int ppp_init(struct device *);
310 #ifdef CONFIG_PPP_LOTS
311
312 static struct device ppp15_dev={"ppp15",0,0,0,0,15,0,0,0,0,NEXT_DEV,ppp_init};
313 static struct device ppp14_dev={"ppp14",0,0,0,0,14,0,0,0,0,&ppp15_dev,ppp_init};
314 static struct device ppp13_dev={"ppp13",0,0,0,0,13,0,0,0,0,&ppp14_dev,ppp_init};
315 static struct device ppp12_dev={"ppp12",0,0,0,0,12,0,0,0,0,&ppp13_dev,ppp_init};
316 static struct device ppp11_dev={"ppp11",0,0,0,0,11,0,0,0,0,&ppp12_dev,ppp_init};
317 static struct device ppp10_dev={"ppp10",0,0,0,0,10,0,0,0,0,&ppp11_dev,ppp_init};
318 static struct device ppp9_dev={"ppp9",0,0,0,0,9,0,0,0,0,&ppp10_dev,ppp_init};
319 static struct device ppp8_dev={"ppp8",0,0,0,0,8,0,0,0,0,&ppp9_dev,ppp_init};
320 static struct device ppp7_dev={"ppp7",0,0,0,0,7,0,0,0,0,&ppp8_dev,ppp_init};
321 static struct device ppp6_dev={"ppp6",0,0,0,0,6,0,0,0,0,&ppp7_dev,ppp_init};
322 static struct device ppp5_dev={"ppp5",0,0,0,0,5,0,0,0,0,&ppp6_dev,ppp_init};
323 static struct device ppp4_dev={"ppp4",0,0,0,0,4,0,0,0,0,&ppp5_dev,ppp_init};
324 # undef NEXT_DEV
325 # define NEXT_DEV (&ppp4_dev)
326 #endif /* CONFIG_PPP_LOTS */
327
328 static struct device ppp3_dev = {
329 "ppp3", 0x0, 0x0, 0x0, 0x0, 3, 0, 0, 0, 0, NEXT_DEV, ppp_init, };
330 static struct device ppp2_dev = {
331 "ppp2", 0x0, 0x0, 0x0, 0x0, 2, 0, 0, 0, 0, &ppp3_dev, ppp_init, };
332 static struct device ppp1_dev = {
333 "ppp1", 0x0, 0x0, 0x0, 0x0, 1, 0, 0, 0, 0, &ppp2_dev, ppp_init, };
334 static struct device ppp0_dev = {
335 "ppp0", 0x0, 0x0, 0x0, 0x0, 0, 0, 0, 0, 0, &ppp1_dev, ppp_init, };
336 #undef NEXT_DEV
337 #define NEXT_DEV (&ppp0_dev)
338 #endif /* PPP */
339
340 #ifdef CONFIG_DUMMY
341 extern int dummy_init(struct device *dev);
342 static struct device dummy_dev = {
343 "dummy", 0x0, 0x0, 0x0, 0x0, 0, 0, 0, 0, 0, NEXT_DEV, dummy_init, };
344 # undef NEXT_DEV
345 # define NEXT_DEV (&dummy_dev)
346 #endif
347
348 #ifdef CONFIG_EQUALIZER
349 extern int eql_init(struct device *dev);
350 struct device eql_dev = {
351 "eql", /* Master device for IP traffic load
352 balancing */
353 0x0, 0x0, 0x0, 0x0, /* recv end/start; mem end/start */
354 0, /* base I/O address */
355 0, /* IRQ */
356 0, 0, 0, /* flags */
357 NEXT_DEV, /* next device */
358 eql_init /* set up the rest */
359 };
360 # undef NEXT_DEV
361 # define NEXT_DEV (&eql_dev)
362 #endif
363
364 #ifdef CONFIG_IBMTR
365
366 extern int tok_probe(struct device *dev);
367 static struct device ibmtr_dev1 = {
368 "tr1", /* IBM Token Ring (Non-DMA) Interface */
369 0x0, /* recv memory end */
370 0x0, /* recv memory start */
371 0x0, /* memory end */
372 0x0, /* memory start */
373 0xa24, /* base I/O address */
374 0, /* IRQ */
375 0, 0, 0, /* flags */
376 NEXT_DEV, /* next device */
377 tok_probe /* ??? Token_init should set up the rest */
378 };
379 # undef NEXT_DEV
380 # define NEXT_DEV (&ibmtr_dev1)
381
382
383 extern int tok_probe(struct device *dev);
384 static struct device ibmtr_dev0 = {
385 "tr0", /* IBM Token Ring (Non-DMA) Interface */
386 0x0, /* recv memory end */
387 0x0, /* recv memory start */
388 0x0, /* memory end */
389 0x0, /* memory start */
390 0xa20, /* base I/O address */
391 0, /* IRQ */
392 0, 0, 0, /* flags */
393 NEXT_DEV, /* next device */
394 tok_probe /* ??? Token_init should set up the rest */
395 };
396 # undef NEXT_DEV
397 # define NEXT_DEV (&ibmtr_dev0)
398
399 #endif
400 #ifdef CONFIG_NET_IPIP
401 #ifdef CONFIG_IP_FORWARD
402 extern int tunnel_init(struct device *);
403
404 static struct device tunnel_dev1 =
405 {
406 "tunl1", /* IPIP tunnel */
407 0x0, /* recv memory end */
408 0x0, /* recv memory start */
409 0x0, /* memory end */
410 0x0, /* memory start */
411 0x0, /* base I/O address */
412 0, /* IRQ */
413 0, 0, 0, /* flags */
414 NEXT_DEV, /* next device */
415 tunnel_init /* Fill in the details */
416 };
417
418 static struct device tunnel_dev0 =
419 {
420 "tunl0", /* IPIP tunnel */
421 0x0, /* recv memory end */
422 0x0, /* recv memory start */
423 0x0, /* memory end */
424 0x0, /* memory start */
425 0x0, /* base I/O address */
426 0, /* IRQ */
427 0, 0, 0, /* flags */
428 &tunnel_dev1, /* next device */
429 tunnel_init /* Fill in the details */
430 };
431 # undef NEXT_DEV
432 # define NEXT_DEV (&tunnel_dev0)
433
434 #endif
435 #endif
436
437 extern int loopback_init(struct device *dev);
438 struct device loopback_dev = {
439 "lo", /* Software Loopback interface */
440 0x0, /* recv memory end */
441 0x0, /* recv memory start */
442 0x0, /* memory end */
443 0x0, /* memory start */
444 0, /* base I/O address */
445 0, /* IRQ */
446 0, 0, 0, /* flags */
447 NEXT_DEV, /* next device */
448 loopback_init /* loopback_init should set up the rest */
449 };
450
451 struct device *dev_base = &loopback_dev;