root/drivers/net/Space.c

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

DEFINITIONS

This source file includes following definitions.
  1. ethif_probe
  2. pc_eth_probe
  3. pc_eth_open

   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  *              This program is free software; you can redistribute it and/or
  23  *              modify it under the terms of the GNU General Public License
  24  *              as published by the Free Software Foundation; either version
  25  *              2 of the License, or (at your option) any later version.
  26  */
  27 #include <linux/config.h>
  28 #include <linux/netdevice.h>
  29 #include <linux/errno.h>
  30 
  31 #define LOOPBACK                        /* always present, right?       */
  32 
  33 #define NEXT_DEV        NULL
  34 
  35 
  36 /* A unifed ethernet device probe.  This is the easiest way to have every
  37    ethernet adaptor have the name "eth[0123...]".
  38    */
  39 
  40 extern int ultra_probe(struct device *dev);
  41 extern int wd_probe(struct device *dev);
  42 extern int el2_probe(struct device *dev);
  43 extern int ne_probe(struct device *dev);
  44 extern int hp_probe(struct device *dev);
  45 extern int znet_probe(struct device *);
  46 extern int express_probe(struct device *);
  47 extern int el3_probe(struct device *);
  48 extern int at1500_probe(struct device *);
  49 extern int at1700_probe(struct device *);
  50 extern int depca_probe(struct device *);
  51 extern int el1_probe(struct device *);
  52 extern int el16_probe(struct device *);
  53 extern int elplus_probe(struct device *);
  54 extern int ac3200_probe(struct device *);
  55 extern int e2100_probe(struct device *);
  56 
  57 /* Detachable devices ("pocket adaptors" and special PCMCIA drivers). */
  58 extern int atp_init(struct device *);
  59 extern int de600_probe(struct device *);
  60 extern int de620_probe(struct device *);
  61 
  62 static int
  63 ethif_probe(struct device *dev)
     /* [previous][next][first][last][top][bottom][index][help] */
  64 {
  65     short base_addr = dev->base_addr;
  66 
  67     if (base_addr < 0  ||  base_addr == 1)
  68         return 1;               /* ENXIO */
  69 
  70     if (1
  71 #if defined(CONFIG_ULTRA)
  72         && ultra_probe(dev)
  73 #endif
  74 #if defined(CONFIG_WD80x3) || defined(WD80x3)
  75         && wd_probe(dev)
  76 #endif
  77 #if defined(CONFIG_EL2) || defined(EL2) /* 3c503 */
  78         && el2_probe(dev)
  79 #endif
  80 #if defined(CONFIG_NE2000) || defined(NE2000)
  81         && ne_probe(dev)
  82 #endif
  83 #if defined(CONFIG_HPLAN) || defined(HPLAN)
  84         && hp_probe(dev)
  85 #endif
  86 #ifdef CONFIG_AT1500
  87         && at1500_probe(dev)
  88 #endif
  89 #ifdef CONFIG_AT1700
  90         && at1700_probe(dev)
  91 #endif
  92 #ifdef CONFIG_EL3               /* 3c509 */
  93         && el3_probe(dev)
  94 #endif
  95 #ifdef CONFIG_ZNET              /* Zenith Z-Note and some IBM Thinkpads. */
  96         && znet_probe(dev)
  97 #endif
  98 #ifdef CONFIG_EEXPRESS          /* Intel EtherExpress */
  99         && express_probe(dev)
 100 #endif
 101 #ifdef CONFIG_DEPCA             /* DEC DEPCA */
 102         && depca_probe(dev)
 103 #endif
 104 #ifdef CONFIG_EL1               /* 3c501 */
 105         && el1_probe(dev)
 106 #endif
 107 #ifdef CONFIG_EL16              /* 3c507 */
 108         && el16_probe(dev)
 109 #endif
 110 #ifdef CONFIG_ELPLUS            /* 3c505 */
 111         && elplus_probe(dev)
 112 #endif
 113 #ifdef CONFIG_AC3200            /* Ansel Communications EISA 3200. */
 114         && ac3200_probe(dev)
 115 #endif
 116 #ifdef CONFIG_E2100             /* Cabletron E21xx series. */
 117         && e2100_probe(dev)
 118 #endif
 119 #ifdef CONFIG_DE600             /* D-Link DE-600 adapter */
 120         && de600_probe(dev)
 121 #endif
 122 #ifdef CONFIG_DE620             /* D-Link DE-620 adapter */
 123         && de620_probe(dev)
 124 #endif
 125         && 1 ) {
 126         return 1;       /* -ENODEV or -EAGAIN would be more accurate. */
 127     }
 128     return 0;
 129 }
 130 
 131 #ifdef CONFIG_PCMCIA_NET
 132 extern int dl_open(struct device *dev);
 133 extern int tc589_open(struct device *dev);
 134 extern int ibmccae_open(struct device *dev);
 135 static int pc_eth_open(struct device *dev);
 136 
 137 static int pc_eth_probe(struct device *dev)
     /* [previous][next][first][last][top][bottom][index][help] */
 138   {
 139   dev->open = &pc_eth_open;
 140   dev->set_config = &ether_config;
 141   dev->tbusy = 1;
 142   return 0;
 143   }
 144 
 145 static int pc_eth_open(struct device *dev)
     /* [previous][next][first][last][top][bottom][index][help] */
 146   {
 147   if (1
 148 #ifdef CONFIG_DE650
 149       && dl_open(dev)
 150 #endif
 151 #ifdef CONFIG_3C589
 152       && tc589_open(dev)
 153 #endif
 154 #ifdef CONFIG_IBMCCAE
 155       && ibmccae_open(dev)
 156 #endif
 157       && 1)
 158     return -ENODEV;
 159   else
 160     return 0;
 161   }
 162 #endif /* CONFIG_PCMCIA_NET */
 163 
 164 
 165 /* Run-time ATtachable (Pocket) devices have a different (not "eth#") name. */
 166 #ifdef CONFIG_ATP               /* AT-LAN-TEC (RealTek) pocket adaptor. */
 167 static struct device atp_dev = {
 168     "atp0", 0, 0, 0, 0, 0, 0, 0, 0, 0, NEXT_DEV, atp_init, /* ... */ };
 169 #   undef NEXT_DEV
 170 #   define NEXT_DEV     (&atp_dev)
 171 #endif
 172 
 173 #ifdef CONFIG_PCMCIA_NET
 174 static struct device pc_eth1_dev = {
 175     "pc_eth1", 0, 0, 0, 0, 0, 0, 0, 0, 0, NEXT_DEV, pc_eth_probe,
 176     };
 177 static struct device pc_eth0_dev = {
 178     "pc_eth0", 0, 0, 0, 0, 0, 0, 0, 0, 0, &pc_eth1_dev, pc_eth_probe,
 179     };
 180 #   undef NEXT_DEV
 181 #   define NEXT_DEV     (&pc_eth0_dev)
 182 #endif /* CONFIG_PCMCIA_NET */
 183 
 184 /* The first device defaults to I/O base '0', which means autoprobe. */
 185 #ifndef ETH0_ADDR
 186 # define ETH0_ADDR 0
 187 #endif
 188 #ifndef ETH0_IRQ
 189 # define ETH0_IRQ 0
 190 #endif
 191 /* "eth0" defaults to autoprobe (== 0), other use a base of 0xffe0 (== -0x20),
 192    which means "don't probe".  These entries exist to only to provide empty
 193    slots which may be enabled at boot-time. */
 194 
 195 static struct device eth3_dev = {
 196     "eth3", 0,0,0,0,0xffe0 /* I/O base*/, 0,0,0,0, NEXT_DEV, ethif_probe };
 197 static struct device eth2_dev = {
 198     "eth2", 0,0,0,0,0xffe0 /* I/O base*/, 0,0,0,0, &eth3_dev, ethif_probe };
 199 static struct device eth1_dev = {
 200     "eth1", 0,0,0,0,0xffe0 /* I/O base*/, 0,0,0,0, &eth2_dev, ethif_probe };
 201 
 202 static struct device eth0_dev = {
 203     "eth0", 0, 0, 0, 0, ETH0_ADDR, ETH0_IRQ, 0, 0, 0, &eth1_dev, ethif_probe };
 204 
 205 #   undef NEXT_DEV
 206 #   define NEXT_DEV     (&eth0_dev)
 207 
 208 #if defined(PLIP) || defined(CONFIG_PLIP)
 209     extern int plip_init(struct device *);
 210     static struct device plip2_dev = {
 211         "plip2", 0, 0, 0, 0, 0x278, 2, 0, 0, 0, NEXT_DEV, plip_init, };
 212     static struct device plip1_dev = {
 213         "plip1", 0, 0, 0, 0, 0x378, 7, 0, 0, 0, &plip2_dev, plip_init, };
 214     static struct device plip0_dev = {
 215         "plip0", 0, 0, 0, 0, 0x3BC, 5, 0, 0, 0, &plip1_dev, plip_init, };
 216 #   undef NEXT_DEV
 217 #   define NEXT_DEV     (&plip0_dev)
 218 #endif  /* PLIP */
 219 
 220 #if defined(SLIP) || defined(CONFIG_SLIP)
 221     extern int slip_init(struct device *);
 222     static struct device slip3_dev = {
 223         "sl3",                  /* Internal SLIP driver, channel 3      */
 224         0x0,                    /* recv memory end                      */
 225         0x0,                    /* recv memory start                    */
 226         0x0,                    /* memory end                           */
 227         0x0,                    /* memory start                         */
 228         0x3,                    /* base I/O address                     */
 229         0,                      /* IRQ                                  */
 230         0, 0, 0,                /* flags                                */
 231         NEXT_DEV,               /* next device                          */
 232         slip_init               /* slip_init should set up the rest     */
 233     };
 234     static struct device slip2_dev = {
 235         "sl2",                  /* Internal SLIP driver, channel 2      */
 236         0x0,                    /* recv memory end                      */
 237         0x0,                    /* recv memory start                    */
 238         0x0,                    /* memory end                           */
 239         0x0,                    /* memory start                         */
 240         0x2,                    /* base I/O address                     */
 241         0,                      /* IRQ                                  */
 242         0, 0, 0,                /* flags                                */
 243         &slip3_dev,             /* next device                          */
 244         slip_init               /* slip_init should set up the rest     */
 245     };
 246     static struct device slip1_dev = {
 247         "sl1",                  /* Internal SLIP driver, channel 1      */
 248         0x0,                    /* recv memory end                      */
 249         0x0,                    /* recv memory start                    */
 250         0x0,                    /* memory end                           */
 251         0x0,                    /* memory start                         */
 252         0x1,                    /* base I/O address                     */
 253         0,                      /* IRQ                                  */
 254         0, 0, 0,                /* flags                                */
 255         &slip2_dev,             /* next device                          */
 256         slip_init               /* slip_init should set up the rest     */
 257     };
 258     static struct device slip0_dev = {
 259         "sl0",                  /* Internal SLIP driver, channel 0      */
 260         0x0,                    /* recv memory end                      */
 261         0x0,                    /* recv memory start                    */
 262         0x0,                    /* memory end                           */
 263         0x0,                    /* memory start                         */
 264         0x0,                    /* base I/O address                     */
 265         0,                      /* IRQ                                  */
 266         0, 0, 0,                /* flags                                */
 267         &slip1_dev,             /* next device                          */
 268         slip_init               /* slip_init should set up the rest     */
 269     };
 270 #   undef       NEXT_DEV
 271 #   define      NEXT_DEV        (&slip0_dev)
 272 #endif  /* SLIP */
 273   
 274 #if defined(CONFIG_PPP)
 275 extern int ppp_init(struct device *);
 276 static struct device ppp3_dev = {
 277     "ppp3", 0x0, 0x0, 0x0, 0x0, 3, 0, 0, 0, 0, NEXT_DEV,  ppp_init, };
 278 static struct device ppp2_dev = {
 279     "ppp2", 0x0, 0x0, 0x0, 0x0, 2, 0, 0, 0, 0, &ppp3_dev, ppp_init, };
 280 static struct device ppp1_dev = {
 281     "ppp1", 0x0, 0x0, 0x0, 0x0, 1, 0, 0, 0, 0, &ppp2_dev, ppp_init, };
 282 static struct device ppp0_dev = {
 283     "ppp0", 0x0, 0x0, 0x0, 0x0, 0, 0, 0, 0, 0, &ppp1_dev, ppp_init, };
 284 #undef NEXT_DEV
 285 #define NEXT_DEV (&ppp0_dev)
 286 #endif   /* PPP */
 287 
 288 #ifdef CONFIG_DUMMY
 289     extern int dummy_init(struct device *dev);
 290     static struct device dummy_dev = {
 291         "dummy", 0x0, 0x0, 0x0, 0x0, 0, 0, 0, 0, 0, NEXT_DEV, dummy_init, };
 292 #   undef       NEXT_DEV
 293 #   define      NEXT_DEV        (&dummy_dev)
 294 #endif
 295 
 296 #ifdef LOOPBACK
 297     extern int loopback_init(struct device *dev);
 298     static struct device loopback_dev = {
 299         "lo",                   /* Software Loopback interface          */
 300         0x0,                    /* recv memory end                      */
 301         0x0,                    /* recv memory start                    */
 302         0x0,                    /* memory end                           */
 303         0x0,                    /* memory start                         */
 304         0,                      /* base I/O address                     */
 305         0,                      /* IRQ                                  */
 306         0, 0, 0,                /* flags                                */
 307         NEXT_DEV,               /* next device                          */
 308         loopback_init           /* loopback_init should set up the rest */
 309     };
 310 #   undef       NEXT_DEV
 311 #   define      NEXT_DEV        (&loopback_dev)
 312 #endif
 313 
 314 
 315 struct device *dev_base = NEXT_DEV;

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