|
|
1.1 root 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.8 07/31/96
17: *
18: * Authors: Ross Biro, <[email protected]>
19: * Fred N. van Kempen, <[email protected]>
20: * Donald J. Becker, <[email protected]>
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 tulip_probe(struct device *dev);
42: extern int hp100_probe(struct device *dev);
43: extern int ultra_probe(struct device *dev);
44: extern int ultra32_probe(struct device *dev);
45: extern int wd_probe(struct device *dev);
46: extern int el2_probe(struct device *dev);
47: extern int ne_probe(struct device *dev);
48: extern int ne2k_pci_probe(struct device *dev);
49: extern int hp_probe(struct device *dev);
50: extern int hp_plus_probe(struct device *dev);
51: extern int znet_probe(struct device *);
52: extern int express_probe(struct device *);
53: extern int eepro_probe(struct device *);
54: extern int el3_probe(struct device *);
55: extern int at1500_probe(struct device *);
56: extern int at1700_probe(struct device *);
57: extern int fmv18x_probe(struct device *);
58: extern int eth16i_probe(struct device *);
59: extern int depca_probe(struct device *);
60: extern int apricot_probe(struct device *);
61: extern int ewrk3_probe(struct device *);
62: extern int de4x5_probe(struct device *);
63: extern int el1_probe(struct device *);
64: extern int via_rhine_probe(struct device *);
1.1.1.3 ! root 65: extern int natsemi_probe(struct device *);
! 66: extern int ns820_probe(struct device *);
! 67: extern int winbond840_probe(struct device *);
! 68: extern int hamachi_probe(struct device *);
! 69: extern int sundance_probe(struct device *);
! 70: extern int starfire_probe(struct device *);
! 71: extern int myson803_probe(struct device *);
! 72: extern int igige_probe(struct device *);
1.1 root 73: #if defined(CONFIG_WAVELAN)
74: extern int wavelan_probe(struct device *);
75: #endif /* defined(CONFIG_WAVELAN) */
76: extern int el16_probe(struct device *);
77: extern int elplus_probe(struct device *);
78: extern int ac3200_probe(struct device *);
79: extern int e2100_probe(struct device *);
80: extern int ni52_probe(struct device *);
81: extern int ni65_probe(struct device *);
82: extern int SK_init(struct device *);
83: extern int seeq8005_probe(struct device *);
84: extern int tc59x_probe(struct device *);
85: extern int dgrs_probe(struct device *);
86: extern int smc_init( struct device * );
87: extern int sparc_lance_probe(struct device *);
88: extern int atarilance_probe(struct device *);
89: extern int a2065_probe(struct device *);
90: extern int ariadne_probe(struct device *);
91: extern int hydra_probe(struct device *);
92: extern int yellowfin_probe(struct device *);
93: extern int eepro100_probe(struct device *);
94: extern int epic100_probe(struct device *);
95: extern int rtl8139_probe(struct device *);
1.1.1.3 ! root 96: extern int sis900_probe(struct device *);
1.1 root 97: extern int tlan_probe(struct device *);
98: extern int isa515_probe(struct device *);
99: extern int pcnet32_probe(struct device *);
100: extern int lance_probe(struct device *);
101: /* Detachable devices ("pocket adaptors") */
102: extern int atp_init(struct device *);
103: extern int de600_probe(struct device *);
104: extern int de620_probe(struct device *);
1.1.1.2 root 105: extern int tc515_probe(struct device *);
1.1 root 106:
107: static int
108: ethif_probe(struct device *dev)
109: {
110: u_long base_addr = dev->base_addr;
111:
112: if ((base_addr == 0xffe0) || (base_addr == 1))
113: return 1; /* ENXIO */
114:
115: if (1
116: /* All PCI probes are safe, and thus should be first. */
117: #ifdef CONFIG_DE4X5 /* DEC DE425, DE434, DE435 adapters */
118: && de4x5_probe(dev)
119: #endif
120: #ifdef CONFIG_DGRS
121: && dgrs_probe(dev)
122: #endif
123: #ifdef CONFIG_EEXPRESS_PRO100B /* Intel EtherExpress Pro100B */
124: && eepro100_probe(dev)
125: #endif
126: #ifdef CONFIG_EPIC
127: && epic100_probe(dev)
128: #endif
129: #if defined(CONFIG_HP100)
130: && hp100_probe(dev)
131: #endif
132: #if defined(CONFIG_NE2K_PCI)
133: && ne2k_pci_probe(dev)
134: #endif
135: #ifdef CONFIG_PCNET32
136: && pcnet32_probe(dev)
137: #endif
138: #ifdef CONFIG_RTL8139
139: && rtl8139_probe(dev)
140: #endif
1.1.1.3 ! root 141: #ifdef CONFIG_SIS900
! 142: && sis900_probe(dev)
! 143: #endif
1.1 root 144: #ifdef CONFIG_VIA_RHINE
145: && via_rhine_probe(dev)
146: #endif
1.1.1.3 ! root 147: #ifdef CONFIG_NATSEMI
! 148: && natsemi_probe(dev)
! 149: #endif
! 150: #ifdef CONFIG_NS820
! 151: && ns820_probe(dev)
! 152: #endif
! 153: #ifdef CONFIG_WINBOND840
! 154: && winbond840_probe(dev)
! 155: #endif
! 156: #ifdef CONFIG_HAMACHI
! 157: && hamachi_probe(dev)
! 158: #endif
! 159: #ifdef CONFIG_SUNDANCE
! 160: && sundance_probe(dev)
! 161: #endif
! 162: #ifdef CONFIG_STARFIRE
! 163: && starfire_probe(dev)
! 164: #endif
! 165: #ifdef CONFIG_MYSON803
! 166: && myson803_probe(dev)
! 167: #endif
! 168: #ifdef CONFIG_INTEL_GIGE
! 169: && igige_probe(dev)
! 170: #endif
1.1 root 171: #if defined(CONFIG_DEC_ELCP)
172: && tulip_probe(dev)
173: #endif
174: #ifdef CONFIG_YELLOWFIN
175: && yellowfin_probe(dev)
176: #endif
177: /* Next mostly-safe EISA-only drivers. */
178: #ifdef CONFIG_AC3200 /* Ansel Communications EISA 3200. */
179: && ac3200_probe(dev)
180: #endif
181: #if defined(CONFIG_ULTRA32)
182: && ultra32_probe(dev)
183: #endif
184: /* Third, sensitive ISA boards. */
185: #ifdef CONFIG_AT1700
186: && at1700_probe(dev)
187: #endif
188: #if defined(CONFIG_ULTRA)
189: && ultra_probe(dev)
190: #endif
191: #if defined(CONFIG_SMC9194)
192: && smc_init(dev)
193: #endif
194: #if defined(CONFIG_WD80x3)
195: && wd_probe(dev)
196: #endif
197: #if defined(CONFIG_EL2) /* 3c503 */
198: && el2_probe(dev)
199: #endif
200: #if defined(CONFIG_HPLAN)
201: && hp_probe(dev)
202: #endif
203: #if defined(CONFIG_HPLAN_PLUS)
204: && hp_plus_probe(dev)
205: #endif
206: #if defined(CONFIG_SEEQ8005)
207: && seeq8005_probe(dev)
208: #endif
209: #ifdef CONFIG_E2100 /* Cabletron E21xx series. */
210: && e2100_probe(dev)
211: #endif
212: #if defined(CONFIG_NE2000)
213: && ne_probe(dev)
214: #endif
215: #ifdef CONFIG_AT1500
216: && at1500_probe(dev)
217: #endif
218: #ifdef CONFIG_FMV18X /* Fujitsu FMV-181/182 */
219: && fmv18x_probe(dev)
220: #endif
221: #ifdef CONFIG_ETH16I
222: && eth16i_probe(dev) /* ICL EtherTeam 16i/32 */
223: #endif
224: #ifdef CONFIG_EL3 /* 3c509 */
225: && el3_probe(dev)
226: #endif
227: #if defined(CONFIG_VORTEX)
228: && tc59x_probe(dev)
229: #endif
230: #ifdef CONFIG_3C515 /* 3c515 */
231: && tc515_probe(dev)
232: #endif
233: #ifdef CONFIG_ZNET /* Zenith Z-Note and some IBM Thinkpads. */
234: && znet_probe(dev)
235: #endif
236: #ifdef CONFIG_EEXPRESS /* Intel EtherExpress */
237: && express_probe(dev)
238: #endif
239: #ifdef CONFIG_EEXPRESS_PRO /* Intel EtherExpress Pro/10 */
240: && eepro_probe(dev)
241: #endif
242: #ifdef CONFIG_DEPCA /* DEC DEPCA */
243: && depca_probe(dev)
244: #endif
245: #ifdef CONFIG_EWRK3 /* DEC EtherWORKS 3 */
246: && ewrk3_probe(dev)
247: #endif
248: #ifdef CONFIG_APRICOT /* Apricot I82596 */
249: && apricot_probe(dev)
250: #endif
251: #ifdef CONFIG_EL1 /* 3c501 */
252: && el1_probe(dev)
253: #endif
254: #if defined(CONFIG_WAVELAN) /* WaveLAN */
255: && wavelan_probe(dev)
256: #endif /* defined(CONFIG_WAVELAN) */
257: #ifdef CONFIG_EL16 /* 3c507 */
258: && el16_probe(dev)
259: #endif
260: #ifdef CONFIG_ELPLUS /* 3c505 */
261: && elplus_probe(dev)
262: #endif
263: #ifdef CONFIG_DE600 /* D-Link DE-600 adapter */
264: && de600_probe(dev)
265: #endif
266: #ifdef CONFIG_DE620 /* D-Link DE-620 adapter */
267: && de620_probe(dev)
268: #endif
269: #if defined(CONFIG_SK_G16)
270: && SK_init(dev)
271: #endif
272: #ifdef CONFIG_NI52
273: && ni52_probe(dev)
274: #endif
275: #ifdef CONFIG_NI65
276: && ni65_probe(dev)
277: #endif
278: #ifdef CONFIG_LANCE /* ISA LANCE boards */
279: && lance_probe(dev)
280: #endif
281: #ifdef CONFIG_ATARILANCE /* Lance-based Atari ethernet boards */
282: && atarilance_probe(dev)
283: #endif
284: #ifdef CONFIG_A2065 /* Commodore/Ameristar A2065 Ethernet Board */
285: && a2065_probe(dev)
286: #endif
287: #ifdef CONFIG_ARIADNE /* Village Tronic Ariadne Ethernet Board */
288: && ariadne_probe(dev)
289: #endif
290: #ifdef CONFIG_HYDRA /* Hydra Systems Amiganet Ethernet board */
291: && hydra_probe(dev)
292: #endif
293: #ifdef CONFIG_SUNLANCE
294: && sparc_lance_probe(dev)
295: #endif
296: #ifdef CONFIG_TLAN
297: && tlan_probe(dev)
298: #endif
299: #ifdef CONFIG_LANCE
300: && lance_probe(dev)
301: #endif
302: && 1 ) {
303: return 1; /* -ENODEV or -EAGAIN would be more accurate. */
304: }
305: return 0;
306: }
307:
308: #ifdef CONFIG_SDLA
309: extern int sdla_init(struct device *);
310: static struct device sdla0_dev = { "sdla0", 0, 0, 0, 0, 0, 0, 0, 0, 0, NEXT_DEV, sdla_init, };
311:
312: # undef NEXT_DEV
313: # define NEXT_DEV (&sdla0_dev)
314: #endif
315:
316: #ifdef CONFIG_NETROM
317: extern int nr_init(struct device *);
318:
319: static struct device nr3_dev = { "nr3", 0, 0, 0, 0, 0, 0, 0, 0, 0, NEXT_DEV, nr_init, };
320: static struct device nr2_dev = { "nr2", 0, 0, 0, 0, 0, 0, 0, 0, 0, &nr3_dev, nr_init, };
321: static struct device nr1_dev = { "nr1", 0, 0, 0, 0, 0, 0, 0, 0, 0, &nr2_dev, nr_init, };
322: static struct device nr0_dev = { "nr0", 0, 0, 0, 0, 0, 0, 0, 0, 0, &nr1_dev, nr_init, };
323:
324: # undef NEXT_DEV
325: # define NEXT_DEV (&nr0_dev)
326: #endif
327:
328: /* Run-time ATtachable (Pocket) devices have a different (not "eth#") name. */
329: #ifdef CONFIG_ATP /* AT-LAN-TEC (RealTek) pocket adaptor. */
330: static struct device atp_dev = {
331: "atp0", 0, 0, 0, 0, 0, 0, 0, 0, 0, NEXT_DEV, atp_init, /* ... */ };
332: # undef NEXT_DEV
333: # define NEXT_DEV (&atp_dev)
334: #endif
335:
336: #ifdef CONFIG_ARCNET
337: extern int arcnet_probe(struct device *dev);
338: static struct device arcnet_dev = {
339: "arc0", 0x0, 0x0, 0x0, 0x0, 0, 0, 0, 0, 0, NEXT_DEV, arcnet_probe, };
340: # undef NEXT_DEV
341: # define NEXT_DEV (&arcnet_dev)
342: #endif
343:
344: /* In Mach, by default allow at least 2 interfaces. */
345: #ifdef MACH
346: #ifndef ETH1_ADDR
347: # define ETH1_ADDR 0
348: #endif
349: #ifndef ETH1_IRQ
350: # define ETH1_IRQ 0
351: #endif
352: #endif
353:
354: /* The first device defaults to I/O base '0', which means autoprobe. */
355: #ifndef ETH0_ADDR
356: # define ETH0_ADDR 0
357: #endif
358: #ifndef ETH0_IRQ
359: # define ETH0_IRQ 0
360: #endif
361: /* "eth0" defaults to autoprobe (== 0), other use a base of 0xffe0 (== -0x20),
362: which means "don't probe". These entries exist to only to provide empty
363: slots which may be enabled at boot-time. */
364:
365: static struct device eth7_dev = {
366: "eth7", 0,0,0,0,0xffe0 /* I/O base*/, 0,0,0,0, NEXT_DEV, ethif_probe };
367: static struct device eth6_dev = {
368: "eth6", 0,0,0,0,0xffe0 /* I/O base*/, 0,0,0,0, ð7_dev, ethif_probe };
369: static struct device eth5_dev = {
370: "eth5", 0,0,0,0,0xffe0 /* I/O base*/, 0,0,0,0, ð6_dev, ethif_probe };
371: static struct device eth4_dev = {
372: "eth4", 0,0,0,0,0xffe0 /* I/O base*/, 0,0,0,0, ð5_dev, ethif_probe };
373: static struct device eth3_dev = {
374: "eth3", 0,0,0,0,0xffe0 /* I/O base*/, 0,0,0,0, ð4_dev, ethif_probe };
375: static struct device eth2_dev = {
376: "eth2", 0,0,0,0,0xffe0 /* I/O base*/, 0,0,0,0, ð3_dev, ethif_probe };
377:
378: #ifdef MACH
379: static struct device eth1_dev = {
380: "eth1", 0, 0, 0, 0, ETH1_ADDR, ETH1_IRQ, 0, 0, 0, ð2_dev, ethif_probe };
381: #else
382: static struct device eth1_dev = {
383: "eth1", 0,0,0,0,0xffe0 /* I/O base*/, 0,0,0,0, ð2_dev, ethif_probe };
384: #endif
385:
386: static struct device eth0_dev = {
387: "eth0", 0, 0, 0, 0, ETH0_ADDR, ETH0_IRQ, 0, 0, 0, ð1_dev, ethif_probe };
388:
389: # undef NEXT_DEV
390: # define NEXT_DEV (ð0_dev)
391:
392: #if defined(PLIP) || defined(CONFIG_PLIP)
393: extern int plip_init(struct device *);
394: static struct device plip2_dev = {
395: "plip2", 0, 0, 0, 0, 0x278, 2, 0, 0, 0, NEXT_DEV, plip_init, };
396: static struct device plip1_dev = {
397: "plip1", 0, 0, 0, 0, 0x378, 7, 0, 0, 0, &plip2_dev, plip_init, };
398: static struct device plip0_dev = {
399: "plip0", 0, 0, 0, 0, 0x3BC, 5, 0, 0, 0, &plip1_dev, plip_init, };
400: # undef NEXT_DEV
401: # define NEXT_DEV (&plip0_dev)
402: #endif /* PLIP */
403:
404: #if defined(SLIP) || defined(CONFIG_SLIP)
405: /* To be exact, this node just hooks the initialization
406: routines to the device structures. */
407: extern int slip_init_ctrl_dev(struct device *);
408: static struct device slip_bootstrap = {
409: "slip_proto", 0x0, 0x0, 0x0, 0x0, 0, 0, 0, 0, 0, NEXT_DEV, slip_init_ctrl_dev, };
410: #undef NEXT_DEV
411: #define NEXT_DEV (&slip_bootstrap)
412: #endif /* SLIP */
413:
414: #if defined(CONFIG_STRIP)
415: extern int strip_init_ctrl_dev(struct device *);
416: static struct device strip_bootstrap = {
417: "strip_proto", 0x0, 0x0, 0x0, 0x0, 0, 0, 0, 0, 0, NEXT_DEV, strip_init_ctrl_dev, };
418: #undef NEXT_DEV
419: #define NEXT_DEV (&strip_bootstrap)
420: #endif /* STRIP */
421:
422: #if defined(CONFIG_PPP)
423: extern int ppp_init(struct device *);
424: static struct device ppp_bootstrap = {
425: "ppp_proto", 0x0, 0x0, 0x0, 0x0, 0, 0, 0, 0, 0, NEXT_DEV, ppp_init, };
426: #undef NEXT_DEV
427: #define NEXT_DEV (&ppp_bootstrap)
428: #endif /* PPP */
429:
430: #ifdef CONFIG_DUMMY
431: extern int dummy_init(struct device *dev);
432: static struct device dummy_dev = {
433: "dummy", 0x0, 0x0, 0x0, 0x0, 0, 0, 0, 0, 0, NEXT_DEV, dummy_init, };
434: # undef NEXT_DEV
435: # define NEXT_DEV (&dummy_dev)
436: #endif
437:
438: #ifdef CONFIG_EQUALIZER
439: extern int eql_init(struct device *dev);
440: struct device eql_dev = {
441: "eql", /* Master device for IP traffic load
442: balancing */
443: 0x0, 0x0, 0x0, 0x0, /* recv end/start; mem end/start */
444: 0, /* base I/O address */
445: 0, /* IRQ */
446: 0, 0, 0, /* flags */
447: NEXT_DEV, /* next device */
448: eql_init /* set up the rest */
449: };
450: # undef NEXT_DEV
451: # define NEXT_DEV (&eql_dev)
452: #endif
453:
454: #ifdef CONFIG_IBMTR
455:
456: extern int tok_probe(struct device *dev);
457: static struct device ibmtr_dev1 = {
458: "tr1", /* IBM Token Ring (Non-DMA) Interface */
459: 0x0, /* recv memory end */
460: 0x0, /* recv memory start */
461: 0x0, /* memory end */
462: 0x0, /* memory start */
463: 0xa24, /* base I/O address */
464: 0, /* IRQ */
465: 0, 0, 0, /* flags */
466: NEXT_DEV, /* next device */
467: tok_probe /* ??? Token_init should set up the rest */
468: };
469: # undef NEXT_DEV
470: # define NEXT_DEV (&ibmtr_dev1)
471:
472:
473: static struct device ibmtr_dev0 = {
474: "tr0", /* IBM Token Ring (Non-DMA) Interface */
475: 0x0, /* recv memory end */
476: 0x0, /* recv memory start */
477: 0x0, /* memory end */
478: 0x0, /* memory start */
479: 0xa20, /* base I/O address */
480: 0, /* IRQ */
481: 0, 0, 0, /* flags */
482: NEXT_DEV, /* next device */
483: tok_probe /* ??? Token_init should set up the rest */
484: };
485: # undef NEXT_DEV
486: # define NEXT_DEV (&ibmtr_dev0)
487:
488: #endif
489:
490: #ifdef CONFIG_DEFXX
491: extern int dfx_probe(struct device *dev);
492: static struct device fddi7_dev =
493: {"fddi7", 0, 0, 0, 0, 0, 0, 0, 0, 0, NEXT_DEV, dfx_probe};
494: static struct device fddi6_dev =
495: {"fddi6", 0, 0, 0, 0, 0, 0, 0, 0, 0, &fddi7_dev, dfx_probe};
496: static struct device fddi5_dev =
497: {"fddi5", 0, 0, 0, 0, 0, 0, 0, 0, 0, &fddi6_dev, dfx_probe};
498: static struct device fddi4_dev =
499: {"fddi4", 0, 0, 0, 0, 0, 0, 0, 0, 0, &fddi5_dev, dfx_probe};
500: static struct device fddi3_dev =
501: {"fddi3", 0, 0, 0, 0, 0, 0, 0, 0, 0, &fddi4_dev, dfx_probe};
502: static struct device fddi2_dev =
503: {"fddi2", 0, 0, 0, 0, 0, 0, 0, 0, 0, &fddi3_dev, dfx_probe};
504: static struct device fddi1_dev =
505: {"fddi1", 0, 0, 0, 0, 0, 0, 0, 0, 0, &fddi2_dev, dfx_probe};
506: static struct device fddi0_dev =
507: {"fddi0", 0, 0, 0, 0, 0, 0, 0, 0, 0, &fddi1_dev, dfx_probe};
508:
509: #undef NEXT_DEV
510: #define NEXT_DEV (&fddi0_dev)
511: #endif
512:
513: #ifdef CONFIG_NET_IPIP
514: extern int tunnel_init(struct device *);
515:
516: static struct device tunnel_dev1 =
517: {
518: "tunl1", /* IPIP tunnel */
519: 0x0, /* recv memory end */
520: 0x0, /* recv memory start */
521: 0x0, /* memory end */
522: 0x0, /* memory start */
523: 0x0, /* base I/O address */
524: 0, /* IRQ */
525: 0, 0, 0, /* flags */
526: NEXT_DEV, /* next device */
527: tunnel_init /* Fill in the details */
528: };
529:
530: static struct device tunnel_dev0 =
531: {
532: "tunl0", /* IPIP tunnel */
533: 0x0, /* recv memory end */
534: 0x0, /* recv memory start */
535: 0x0, /* memory end */
536: 0x0, /* memory start */
537: 0x0, /* base I/O address */
538: 0, /* IRQ */
539: 0, 0, 0, /* flags */
540: &tunnel_dev1, /* next device */
541: tunnel_init /* Fill in the details */
542: };
543: # undef NEXT_DEV
544: # define NEXT_DEV (&tunnel_dev0)
545:
546: #endif
547:
548: #ifdef CONFIG_APFDDI
549: extern int apfddi_init(struct device *dev);
550: static struct device fddi_dev = {
551: "fddi", 0x0, 0x0, 0x0, 0x0, 0, 0, 0, 0, 0, NEXT_DEV, apfddi_init };
552: # undef NEXT_DEV
553: # define NEXT_DEV (&fddi_dev)
554: #endif
555:
556: #ifdef CONFIG_APBIF
557: extern int bif_init(struct device *dev);
558: static struct device bif_dev = {
559: "bif", 0x0, 0x0, 0x0, 0x0, 0, 0, 0, 0, 0, NEXT_DEV, bif_init };
560: # undef NEXT_DEV
561: # define NEXT_DEV (&bif_dev)
562: #endif
563:
564: #ifdef MACH
565: struct device *dev_base = ð0_dev;
566: #else
567: extern int loopback_init(struct device *dev);
568: struct device loopback_dev = {
569: "lo", /* Software Loopback interface */
570: 0x0, /* recv memory end */
571: 0x0, /* recv memory start */
572: 0x0, /* memory end */
573: 0x0, /* memory start */
574: 0, /* base I/O address */
575: 0, /* IRQ */
576: 0, 0, 0, /* flags */
577: NEXT_DEV, /* next device */
578: loopback_init /* loopback_init should set up the rest */
579: };
580:
581: struct device *dev_base = &loopback_dev;
582: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.