home *** CD-ROM | disk | FTP | other *** search
/ Il CD di internet / CD.iso / SOURCE / KERNEL-S / V1.0 / LINUX-1.0 / LINUX-1 / linux / drivers / net / Space.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-02-18  |  8.1 KB  |  265 lines

  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/ddi.h>
  29. #include "dev.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 d_link_init(struct device *);
  60.  
  61. static int
  62. ethif_probe(struct device *dev)
  63. {
  64.     short base_addr = dev->base_addr;
  65.  
  66.     if (base_addr < 0  ||  base_addr == 1)
  67.     return 1;        /* ENXIO */
  68.  
  69.     if (1
  70. #if defined(CONFIG_ULTRA)
  71.     && ultra_probe(dev)
  72. #endif
  73. #if defined(CONFIG_WD80x3) || defined(WD80x3)
  74.     && wd_probe(dev)
  75. #endif
  76. #if defined(CONFIG_EL2) || defined(EL2)    /* 3c503 */
  77.     && el2_probe(dev)
  78. #endif
  79. #if defined(CONFIG_NE2000) || defined(NE2000)
  80.     && ne_probe(dev)
  81. #endif
  82. #if defined(CONFIG_HPLAN) || defined(HPLAN)
  83.     && hp_probe(dev)
  84. #endif
  85. #ifdef CONFIG_AT1500
  86.     && at1500_probe(dev)
  87. #endif
  88. #ifdef CONFIG_AT1700
  89.     && at1700_probe(dev)
  90. #endif
  91. #ifdef CONFIG_EL3        /* 3c509 */
  92.     && el3_probe(dev)
  93. #endif
  94. #ifdef CONFIG_ZNET        /* Zenith Z-Note and some IBM Thinkpads. */
  95.     && znet_probe(dev)
  96. #endif
  97. #ifdef CONFIG_EEXPRESS        /* Intel EtherExpress */
  98.     && express_probe(dev)
  99. #endif
  100. #ifdef CONFIG_DEPCA        /* DEC DEPCA */
  101.     && depca_probe(dev)
  102. #endif
  103. #ifdef CONFIG_EL1        /* 3c501 */
  104.     && el1_probe(dev)
  105. #endif
  106. #ifdef CONFIG_EL16        /* 3c507 */
  107.     && el16_probe(dev)
  108. #endif
  109. #ifdef CONFIG_ELPLUS        /* 3c505 */
  110.     && elplus_probe(dev)
  111. #endif
  112. #ifdef CONFIG_AC3200        /* Ansel Communications EISA 3200. */
  113.     && ac3200_probe(dev)
  114. #endif
  115. #ifdef CONFIG_E2100        /* Cabletron E21xx series. */
  116.     && e2100_probe(dev)
  117. #endif
  118.     && 1 ) {
  119.     return 1;    /* -ENODEV or -EAGAIN would be more accurate. */
  120.     }
  121.     return 0;
  122. }
  123.  
  124.  
  125. /* This remains seperate because it requires the addr and IRQ to be set. */
  126. #if defined(D_LINK) || defined(CONFIG_DE600)
  127. static struct device d_link_dev = {
  128.     "dl0", 0, 0, 0, 0, D_LINK_IO, D_LINK_IRQ, 0, 0, 0, NEXT_DEV, d_link_init };
  129. #   undef NEXT_DEV
  130. #   define NEXT_DEV    (&d_link_dev)
  131. #endif
  132.  
  133. /* Run-time ATtachable (Pocket) devices have a different (not "eth#") name. */
  134. #ifdef CONFIG_ATP        /* AT-LAN-TEC (RealTek) pocket adaptor. */
  135. static struct device atp_dev = {
  136.     "atp0", 0, 0, 0, 0, 0, 0, 0, 0, 0, NEXT_DEV, atp_init, /* ... */ };
  137. #   undef NEXT_DEV
  138. #   define NEXT_DEV    (&atp_dev)
  139. #endif
  140.  
  141. /* The first device defaults to I/O base '0', which means autoprobe. */
  142. #ifndef ETH0_ADDR
  143. # define ETH0_ADDR 0
  144. #endif
  145. #ifndef ETH0_IRQ
  146. # define ETH0_IRQ 0
  147. #endif
  148. /* "eth0" defaults to autoprobe (== 0), other use a base of 0xffe0 (== -0x20),
  149.    which means "don't probe".  These entries exist to only to provide empty
  150.    slots which may be enabled at boot-time. */
  151.  
  152. static struct device eth3_dev = {
  153.     "eth3", 0,0,0,0,0xffe0 /* I/O base*/, 0,0,0,0, NEXT_DEV, ethif_probe };
  154. static struct device eth2_dev = {
  155.     "eth2", 0,0,0,0,0xffe0 /* I/O base*/, 0,0,0,0, ð3_dev, ethif_probe };
  156. static struct device eth1_dev = {
  157.     "eth1", 0,0,0,0,0xffe0 /* I/O base*/, 0,0,0,0, ð2_dev, ethif_probe };
  158.  
  159. static struct device eth0_dev = {
  160.     "eth0", 0, 0, 0, 0, ETH0_ADDR, ETH0_IRQ, 0, 0, 0, ð1_dev, ethif_probe };
  161.  
  162. #   undef NEXT_DEV
  163. #   define NEXT_DEV    (ð0_dev)
  164.  
  165. #if defined(PLIP) || defined(CONFIG_PLIP)
  166.     extern int plip_init(struct device *);
  167.     static struct device plip2_dev = {
  168.     "plip2", 0, 0, 0, 0, 0x278, 2, 0, 0, 0, NEXT_DEV, plip_init, };
  169.     static struct device plip1_dev = {
  170.     "plip1", 0, 0, 0, 0, 0x378, 7, 0, 0, 0, &plip2_dev, plip_init, };
  171.     static struct device plip0_dev = {
  172.     "plip0", 0, 0, 0, 0, 0x3BC, 5, 0, 0, 0, &plip1_dev, plip_init, };
  173. #   undef NEXT_DEV
  174. #   define NEXT_DEV    (&plip0_dev)
  175. #endif  /* PLIP */
  176.  
  177. #if defined(SLIP) || defined(CONFIG_SLIP)
  178.     extern int slip_init(struct device *);
  179.     static struct device slip3_dev = {
  180.     "sl3",            /* Internal SLIP driver, channel 3    */
  181.     0x0,            /* recv memory end            */
  182.     0x0,            /* recv memory start            */
  183.     0x0,            /* memory end                */
  184.     0x0,            /* memory start                */
  185.     0x3,            /* base I/O address            */
  186.     0,            /* IRQ                    */
  187.     0, 0, 0,        /* flags                */
  188.     NEXT_DEV,        /* next device                */
  189.     slip_init        /* slip_init should set up the rest    */
  190.     };
  191.     static struct device slip2_dev = {
  192.     "sl2",            /* Internal SLIP driver, channel 2    */
  193.     0x0,            /* recv memory end            */
  194.     0x0,            /* recv memory start            */
  195.     0x0,            /* memory end                */
  196.     0x0,            /* memory start                */
  197.     0x2,            /* base I/O address            */
  198.     0,            /* IRQ                    */
  199.     0, 0, 0,        /* flags                */
  200.     &slip3_dev,        /* next device                */
  201.     slip_init        /* slip_init should set up the rest    */
  202.     };
  203.     static struct device slip1_dev = {
  204.     "sl1",            /* Internal SLIP driver, channel 1    */
  205.     0x0,            /* recv memory end            */
  206.     0x0,            /* recv memory start            */
  207.     0x0,            /* memory end                */
  208.     0x0,            /* memory start                */
  209.     0x1,            /* base I/O address            */
  210.     0,            /* IRQ                    */
  211.     0, 0, 0,        /* flags                */
  212.     &slip2_dev,        /* next device                */
  213.     slip_init        /* slip_init should set up the rest    */
  214.     };
  215.     static struct device slip0_dev = {
  216.     "sl0",            /* Internal SLIP driver, channel 0    */
  217.     0x0,            /* recv memory end            */
  218.     0x0,            /* recv memory start            */
  219.     0x0,            /* memory end                */
  220.     0x0,            /* memory start                */
  221.     0x0,            /* base I/O address            */
  222.     0,            /* IRQ                    */
  223.     0, 0, 0,        /* flags                */
  224.     &slip1_dev,        /* next device                */
  225.     slip_init        /* slip_init should set up the rest    */
  226.     };
  227. #   undef    NEXT_DEV
  228. #   define    NEXT_DEV    (&slip0_dev)
  229. #endif    /* SLIP */
  230.   
  231. #if defined(CONFIG_PPP)
  232. extern int ppp_init(struct device *);
  233. static struct device ppp3_dev = {
  234.     "ppp3", 0x0, 0x0, 0x0, 0x0, 3, 0, 0, 0, 0, NEXT_DEV,  ppp_init, };
  235. static struct device ppp2_dev = {
  236.     "ppp2", 0x0, 0x0, 0x0, 0x0, 2, 0, 0, 0, 0, &ppp3_dev, ppp_init, };
  237. static struct device ppp1_dev = {
  238.     "ppp1", 0x0, 0x0, 0x0, 0x0, 1, 0, 0, 0, 0, &ppp2_dev, ppp_init, };
  239. static struct device ppp0_dev = {
  240.     "ppp0", 0x0, 0x0, 0x0, 0x0, 0, 0, 0, 0, 0, &ppp1_dev, ppp_init, };
  241. #undef NEXT_DEV
  242. #define NEXT_DEV (&ppp0_dev)
  243. #endif   /* PPP */
  244.  
  245. #ifdef LOOPBACK
  246.     extern int loopback_init(struct device *dev);
  247.     static struct device loopback_dev = {
  248.     "lo",            /* Software Loopback interface        */
  249.     0x0,            /* recv memory end            */
  250.     0x0,            /* recv memory start            */
  251.     0x0,            /* memory end                */
  252.     0x0,            /* memory start                */
  253.     0,            /* base I/O address            */
  254.     0,            /* IRQ                    */
  255.     0, 0, 0,        /* flags                */
  256.     NEXT_DEV,        /* next device                */
  257.     loopback_init        /* loopback_init should set up the rest    */
  258.     };
  259. #   undef    NEXT_DEV
  260. #   define    NEXT_DEV    (&loopback_dev)
  261. #endif
  262.  
  263.  
  264. struct device *dev_base = NEXT_DEV;
  265.