CTC++ Coverage Report - Execution Profile    #524/1532

Files Summary | Functions Summary | Execution Profile | Index | No Index
First | Previous | Next | Last


File: drivers/net/Space.c
Instrumentation mode: function-decision-multicondition
TER: 48 % ( 12/ 25)

Start/ End/    
True False - Line Source

  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  * Version:   @(#)Space.c   1.0.7   08/12/93
  9  *
  10  * Authors:   Ross Biro
  11  *      Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
  12  *      Donald J. Becker, <becker@scyld.com>
  13  *
  14  * Changelog:
  15  *      Stephen Hemminger (09/2003)
  16  *      - get rid of pre-linked dev list, dynamic device allocation
  17  *      Paul Gortmaker (03/2002)
  18  *      - struct init cleanup, enable multiple ISA autoprobes.
  19  *      Arnaldo Carvalho de Melo <acme@conectiva.com.br> - 09/1999
  20  *      - fix sbni: s/device/net_device/
  21  *      Paul Gortmaker (06/98): 
  22  *       - sort probes in a sane way, make sure all (safe) probes
  23  *         get run once & failed autoprobes don't autoprobe again.
  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/etherdevice.h>
  33 #include <linux/trdevice.h>
  34 #include <linux/errno.h>
  35 #include <linux/init.h>
  36 #include <linux/netlink.h>
  37 #include <linux/divert.h>
  38 
  39 /* A unified ethernet device probe.  This is the easiest way to have every
  40    ethernet adaptor have the name "eth[0123...]".
  41    */
  42 
  43 extern struct net_device *ne2_probe(int unit);
  44 extern struct net_device *hp100_probe(int unit);
  45 extern struct net_device *ultra_probe(int unit);
  46 extern struct net_device *ultra32_probe(int unit);
  47 extern struct net_device *wd_probe(int unit);
  48 extern struct net_device *el2_probe(int unit);
  49 extern struct net_device *ne_probe(int unit);
  50 extern struct net_device *hp_probe(int unit);
  51 extern struct net_device *hp_plus_probe(int unit);
  52 extern struct net_device *express_probe(int unit);
  53 extern struct net_device *eepro_probe(int unit);
  54 extern struct net_device *at1700_probe(int unit);
  55 extern struct net_device *fmv18x_probe(int unit);
  56 extern struct net_device *eth16i_probe(int unit);
  57 extern struct net_device *i82596_probe(int unit);
  58 extern struct net_device *ewrk3_probe(int unit);
  59 extern struct net_device *el1_probe(int unit);
  60 extern struct net_device *wavelan_probe(int unit);
  61 extern struct net_device *arlan_probe(int unit);
  62 extern struct net_device *el16_probe(int unit);
  63 extern struct net_device *elmc_probe(int unit);
  64 extern struct net_device *skmca_probe(int unit);
  65 extern struct net_device *elplus_probe(int unit);
  66 extern struct net_device *ac3200_probe(int unit);
  67 extern struct net_device *es_probe(int unit);
  68 extern struct net_device *lne390_probe(int unit);
  69 extern struct net_device *e2100_probe(int unit);
  70 extern struct net_device *ni5010_probe(int unit);
  71 extern struct net_device *ni52_probe(int unit);
  72 extern struct net_device *ni65_probe(int unit);
  73 extern struct net_device *sonic_probe(int unit);
  74 extern struct net_device *SK_init(int unit);
  75 extern struct net_device *seeq8005_probe(int unit);
  76 extern struct net_device *smc_init(int unit);
  77 extern struct net_device *atarilance_probe(int unit);
  78 extern struct net_device *sun3lance_probe(int unit);
  79 extern struct net_device *sun3_82586_probe(int unit);
  80 extern struct net_device *apne_probe(int unit);
  81 extern struct net_device *bionet_probe(int unit);
  82 extern struct net_device *pamsnet_probe(int unit);
  83 extern struct net_device *cs89x0_probe(int unit);
  84 extern struct net_device *hplance_probe(int unit);
  85 extern struct net_device *bagetlance_probe(int unit);
  86 extern struct net_device *mvme147lance_probe(int unit);
  87 extern struct net_device *tc515_probe(int unit);
  88 extern struct net_device *lance_probe(int unit);
  89 extern struct net_device *mace_probe(int unit);
  90 extern struct net_device *mac8390_probe(int unit);
  91 extern struct net_device *mac89x0_probe(int unit);
  92 extern struct net_device *mc32_probe(int unit);
  93 extern struct net_device *cops_probe(int unit);
  94 extern struct net_device *ltpc_probe(void);
  95   
  96 /* Detachable devices ("pocket adaptors") */
  97 extern struct net_device *de620_probe(int unit);
  98 
  99 /* Fibre Channel adapters */
  100 extern int iph5526_probe(struct net_device *dev);
  101 
  102 /* SBNI adapters */
  103 extern int sbni_probe(int unit);
  104 
  105 struct devprobe2 {
  106    struct net_device *(*probe)(int unit);
  107    int status;   /* non-zero if autoprobe has failed */
  108 };
  109 
 
210   110 static int __init probe_list2(int unit, struct devprobe2 *p, int autoprobe)
  111 {
  112    struct net_device *dev;
210 - 113    for (; p->probe; p++) {
- 114       if (autoprobe && p->status)
 - 114     T && T
 - 114     T && F
 - 114     F && _
 - 115          continue;
  116       dev = p->probe(unit);
- 117       if (!IS_ERR(dev))
 - 118          return 0;
- 119       if (autoprobe)
  120          p->status = PTR_ERR(dev);
  121    }
210    122    return -ENODEV;
  123 }
  124 
  125 /*
  126  * This is a bit of an artificial separation as there are PCI drivers
  127  * that also probe for EISA cards (in the PCI group) and there are ISA
  128  * drivers that probe for EISA cards (in the ISA group).  These are the
  129  * legacy EISA only driver probes, and also the legacy PCI probes
  130  */
  131 
  132 static struct devprobe2 eisa_probes[] __initdata = {
  133 #ifdef CONFIG_ULTRA32 
  134    {ultra32_probe, 0},   
  135 #endif
  136 #ifdef CONFIG_AC3200   
  137    {ac3200_probe, 0},
  138 #endif
  139 #ifdef CONFIG_ES3210
  140    {es_probe, 0},
  141 #endif
  142 #ifdef CONFIG_LNE390
  143    {lne390_probe, 0},
  144 #endif
  145    {NULL, 0},
  146 };
  147 
  148 static struct devprobe2 mca_probes[] __initdata = {
  149 #ifdef CONFIG_NE2_MCA
  150    {ne2_probe, 0},
  151 #endif
  152 #ifdef CONFIG_ELMC      /* 3c523 */
  153    {elmc_probe, 0},
  154 #endif
  155 #ifdef CONFIG_ELMC_II      /* 3c527 */
  156    {mc32_probe, 0},
  157 #endif
  158 #ifdef CONFIG_SKMC              /* SKnet Microchannel */
  159         {skmca_probe, 0},
  160 #endif
  161    {NULL, 0},
  162 };
  163 
  164 /*
  165  * ISA probes that touch addresses < 0x400 (including those that also
  166  * look for EISA/PCI/MCA cards in addition to ISA cards).
  167  */
  168 static struct devprobe2 isa_probes[] __initdata = {
  169 #ifdef CONFIG_HP100       /* ISA, EISA & PCI */
  170    {hp100_probe, 0},
  171 #endif   
  172 #ifdef CONFIG_3C515
  173    {tc515_probe, 0},
  174 #endif
  175 #ifdef CONFIG_ULTRA 
  176    {ultra_probe, 0},
  177 #endif
  178 #ifdef CONFIG_WD80x3 
  179    {wd_probe, 0},
  180 #endif
  181 #ifdef CONFIG_EL2       /* 3c503 */
  182    {el2_probe, 0},
  183 #endif
  184 #ifdef CONFIG_HPLAN
  185    {hp_probe, 0},
  186 #endif
  187 #ifdef CONFIG_HPLAN_PLUS
  188    {hp_plus_probe, 0},
  189 #endif
  190 #ifdef CONFIG_E2100      /* Cabletron E21xx series. */
  191    {e2100_probe, 0},
  192 #endif
  193 #if defined(CONFIG_NE2000) || \
  194     defined(CONFIG_NE_H8300)  /* ISA (use ne2k-pci for PCI cards) */
  195    {ne_probe, 0},
  196 #endif
  197 #ifdef CONFIG_LANCE      /* ISA/VLB (use pcnet32 for PCI cards) */
  198    {lance_probe, 0},
  199 #endif
  200 #ifdef CONFIG_SMC9194
  201    {smc_init, 0},
  202 #endif
  203 #ifdef CONFIG_SEEQ8005 
  204    {seeq8005_probe, 0},
  205 #endif
  206 #ifdef CONFIG_CS89x0
  207     {cs89x0_probe, 0},
  208 #endif
  209 #ifdef CONFIG_AT1700
  210    {at1700_probe, 0},
  211 #endif
  212 #ifdef CONFIG_ETH16I
  213    {eth16i_probe, 0},   /* ICL EtherTeam 16i/32 */
  214 #endif
  215 #ifdef CONFIG_EEXPRESS      /* Intel EtherExpress */
  216    {express_probe, 0},
  217 #endif
  218 #ifdef CONFIG_EEXPRESS_PRO   /* Intel EtherExpress Pro/10 */
  219    {eepro_probe, 0},
  220 #endif
  221 #ifdef CONFIG_EWRK3             /* DEC EtherWORKS 3 */
  222        {ewrk3_probe, 0},
  223 #endif
  224 #if defined(CONFIG_APRICOT) || defined(CONFIG_MVME16x_NET) || defined(CONFIG_BVME6000_NET)   /* Intel I82596 */
  225    {i82596_probe, 0},
  226 #endif
  227 #ifdef CONFIG_EL1      /* 3c501 */
  228    {el1_probe, 0},
  229 #endif
  230 #ifdef CONFIG_WAVELAN      /* WaveLAN */
  231    {wavelan_probe, 0},
  232 #endif
  233 #ifdef CONFIG_ARLAN      /* Aironet */
  234    {arlan_probe, 0},
  235 #endif
  236 #ifdef CONFIG_EL16      /* 3c507 */
  237    {el16_probe, 0},
  238 #endif
  239 #ifdef CONFIG_ELPLUS      /* 3c505 */
  240    {elplus_probe, 0},
  241 #endif
  242 #ifdef CONFIG_NI5010
  243    {ni5010_probe, 0},
  244 #endif
  245 #ifdef CONFIG_NI52
  246    {ni52_probe, 0},
  247 #endif
  248 #ifdef CONFIG_NI65
  249    {ni65_probe, 0},
  250 #endif
  251    {NULL, 0},
  252 };
  253 
  254 static struct devprobe2 parport_probes[] __initdata = {
  255 #ifdef CONFIG_DE620      /* D-Link DE-620 adapter */
  256    {de620_probe, 0},
  257 #endif
  258    {NULL, 0},
  259 };
  260 
  261 static struct devprobe2 m68k_probes[] __initdata = {
  262 #ifdef CONFIG_ATARILANCE   /* Lance-based Atari ethernet boards */
  263    {atarilance_probe, 0},
  264 #endif
  265 #ifdef CONFIG_SUN3LANCE         /* sun3 onboard Lance chip */
  266    {sun3lance_probe, 0},
  267 #endif
  268 #ifdef CONFIG_SUN3_82586        /* sun3 onboard Intel 82586 chip */
  269    {sun3_82586_probe, 0},
  270 #endif
  271 #ifdef CONFIG_APNE      /* A1200 PCMCIA NE2000 */
  272    {apne_probe, 0},
  273 #endif
  274 #ifdef CONFIG_ATARI_BIONET   /* Atari Bionet Ethernet board */
  275    {bionet_probe, 0},
  276 #endif
  277 #ifdef CONFIG_ATARI_PAMSNET   /* Atari PAMsNet Ethernet board */
  278    {pamsnet_probe, 0},
  279 #endif
  280 #ifdef CONFIG_MVME147_NET   /* MVME147 internal Ethernet */
  281    {mvme147lance_probe, 0},
  282 #endif
  283 #ifdef CONFIG_MACMACE      /* Mac 68k Quadra AV builtin Ethernet */
  284    {mace_probe, 0},
  285 #endif
  286 #ifdef CONFIG_MAC8390           /* NuBus NS8390-based cards */
  287    {mac8390_probe, 0},
  288 #endif
  289 #ifdef CONFIG_MAC89x0
  290     {mac89x0_probe, 0},
  291 #endif
  292    {NULL, 0},
  293 };
  294 
  295 /*
  296  * Unified ethernet device probe, segmented per architecture and
  297  * per bus interface. This drives the legacy devices only for now.
  298  */
  299  
 
48 42   300 static void __init ethif_probe2(int unit)
  301 {
  302    unsigned long base_addr = netdev_boot_base("eth", unit);
  303 
42   304    if (base_addr == 1)
   305       return;
  306 
  307    (void)(   probe_list2(unit, m68k_probes, base_addr == 0) &&
  308       probe_list2(unit, eisa_probes, base_addr == 0) &&
  309       probe_list2(unit, mca_probes, base_addr == 0) &&
  310       probe_list2(unit, isa_probes, base_addr == 0) &&
  311       probe_list2(unit, parport_probes, base_addr == 0));
  312 }
  313 
  314 #ifdef CONFIG_TR
  315 /* Token-ring device probe */
  316 extern int ibmtr_probe_card(struct net_device *);
  317 extern struct net_device *smctr_probe(int unit);
  318 
  319 static struct devprobe2 tr_probes2[] __initdata = {
  320 #ifdef CONFIG_SMCTR
  321    {smctr_probe, 0},
  322 #endif
  323    {NULL, 0},
  324 };
  325 
  326 static __init int trif_probe(int unit)
  327 {
  328    int err = -ENODEV;
  329 #ifdef CONFIG_IBMTR
  330    struct net_device *dev = alloc_trdev(0);
  331    if (!dev)
  332       return -ENOMEM;
  333 
  334    sprintf(dev->name, "tr%d", unit);
  335    netdev_boot_setup_check(dev);
  336    err = ibmtr_probe_card(dev);
  337    if (err)
  338       free_netdev(dev);
  339 #endif
  340    return err;
  341 }
  342 
  343 static void __init trif_probe2(int unit)
  344 {
  345    unsigned long base_addr = netdev_boot_base("tr", unit);
  346 
  347    if (base_addr == 1)
  348       return;
  349    probe_list2(unit, tr_probes2, base_addr == 0);
  350 }
  351 #endif
  352 
  353    
  354 /*
  355  *   The loopback device is global so it can be directly referenced
  356  *   by the network code. Also, it must be first on device list.
  357  */
  358 extern int loopback_init(void);
  359 
  360 /*  Statically configured drivers -- order matters here. */
 
  361 static int __init net_olddevs_init(void)
  362 {
  363    int num;
  364 
- 365    if (loopback_init()) {
  366       printk(KERN_ERR "Network loopback device setup failed\n");
  367    }
  368 
  369    
  370 #ifdef CONFIG_SBNI
  371    for (num = 0; num < 8; ++num)
  372       sbni_probe(num);
  373 #endif
  374 #ifdef CONFIG_TR
  375    for (num = 0; num < 8; ++num)
  376       if (!trif_probe(num))
  377          trif_probe2(num);
  378 #endif
48   379    for (num = 0; num < 8; ++num)
  380       ethif_probe2(num);
  381 
  382 #ifdef CONFIG_COPS
  383    cops_probe(0);
  384    cops_probe(1);
  385    cops_probe(2);
  386 #endif
  387 #ifdef CONFIG_LTPC
  388    ltpc_probe();
  389 #endif
  390 
   391    return 0;
  392 }
  393 
  394 device_initcall(net_olddevs_init);
***TER 48% (12/25) of SOURCE FILE Space.c

Files Summary | Functions Summary | Execution Profile | Index | No Index
First | Previous | Next | Last | Top