root/drivers/net/Space.c

/* [previous][next][first][last][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. ethif_probe

   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][next][first][last][top][bottom][index][help] */
  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, &eth3_dev, ethif_probe };
 214 static struct device eth1_dev = {
 215     "eth1", 0,0,0,0,0xffe0 /* I/O base*/, 0,0,0,0, &eth2_dev, ethif_probe };
 216 
 217 static struct device eth0_dev = {
 218     "eth0", 0, 0, 0, 0, ETH0_ADDR, ETH0_IRQ, 0, 0, 0, &eth1_dev, ethif_probe };
 219 
 220 #   undef NEXT_DEV
 221 #   define NEXT_DEV     (&eth0_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;

/* [previous][next][first][last][top][bottom][index][help] */