linux/drivers/net/Space.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-or-later
   2/*
   3 * INET         An implementation of the TCP/IP protocol suite for the LINUX
   4 *              operating system.  INET is implemented using the  BSD Socket
   5 *              interface as the means of communication with the user level.
   6 *
   7 *              Holds initial configuration information for devices.
   8 *
   9 * Version:     @(#)Space.c     1.0.7   08/12/93
  10 *
  11 * Authors:     Ross Biro
  12 *              Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
  13 *              Donald J. Becker, <becker@scyld.com>
  14 *
  15 * Changelog:
  16 *              Stephen Hemminger (09/2003)
  17 *              - get rid of pre-linked dev list, dynamic device allocation
  18 *              Paul Gortmaker (03/2002)
  19 *              - struct init cleanup, enable multiple ISA autoprobes.
  20 *              Arnaldo Carvalho de Melo <acme@conectiva.com.br> - 09/1999
  21 *              - fix sbni: s/device/net_device/
  22 *              Paul Gortmaker (06/98):
  23 *               - sort probes in a sane way, make sure all (safe) probes
  24 *                 get run once & failed autoprobes don't autoprobe again.
  25 */
  26#include <linux/netdevice.h>
  27#include <linux/etherdevice.h>
  28#include <linux/errno.h>
  29#include <linux/init.h>
  30#include <linux/netlink.h>
  31#include <net/Space.h>
  32
  33/* A unified ethernet device probe.  This is the easiest way to have every
  34 * ethernet adaptor have the name "eth[0123...]".
  35 */
  36
  37struct devprobe2 {
  38        struct net_device *(*probe)(int unit);
  39        int status;     /* non-zero if autoprobe has failed */
  40};
  41
  42static int __init probe_list2(int unit, struct devprobe2 *p, int autoprobe)
  43{
  44        struct net_device *dev;
  45
  46        for (; p->probe; p++) {
  47                if (autoprobe && p->status)
  48                        continue;
  49                dev = p->probe(unit);
  50                if (!IS_ERR(dev))
  51                        return 0;
  52                if (autoprobe)
  53                        p->status = PTR_ERR(dev);
  54        }
  55        return -ENODEV;
  56}
  57
  58/* ISA probes that touch addresses < 0x400 (including those that also
  59 * look for EISA/PCI cards in addition to ISA cards).
  60 */
  61static struct devprobe2 isa_probes[] __initdata = {
  62#if defined(CONFIG_HP100) && defined(CONFIG_ISA)        /* ISA, EISA */
  63        {hp100_probe, 0},
  64#endif
  65#ifdef CONFIG_3C515
  66        {tc515_probe, 0},
  67#endif
  68#ifdef CONFIG_ULTRA
  69        {ultra_probe, 0},
  70#endif
  71#ifdef CONFIG_WD80x3
  72        {wd_probe, 0},
  73#endif
  74#if defined(CONFIG_NE2000) /* ISA (use ne2k-pci for PCI cards) */
  75        {ne_probe, 0},
  76#endif
  77#ifdef CONFIG_LANCE             /* ISA/VLB (use pcnet32 for PCI cards) */
  78        {lance_probe, 0},
  79#endif
  80#ifdef CONFIG_SMC9194
  81        {smc_init, 0},
  82#endif
  83#ifdef CONFIG_CS89x0
  84#ifndef CONFIG_CS89x0_PLATFORM
  85        {cs89x0_probe, 0},
  86#endif
  87#endif
  88#if defined(CONFIG_MVME16x_NET) || defined(CONFIG_BVME6000_NET) /* Intel */
  89        {i82596_probe, 0},                                      /* I82596 */
  90#endif
  91#ifdef CONFIG_NI65
  92        {ni65_probe, 0},
  93#endif
  94        {NULL, 0},
  95};
  96
  97static struct devprobe2 m68k_probes[] __initdata = {
  98#ifdef CONFIG_ATARILANCE        /* Lance-based Atari ethernet boards */
  99        {atarilance_probe, 0},
 100#endif
 101#ifdef CONFIG_SUN3LANCE         /* sun3 onboard Lance chip */
 102        {sun3lance_probe, 0},
 103#endif
 104#ifdef CONFIG_SUN3_82586        /* sun3 onboard Intel 82586 chip */
 105        {sun3_82586_probe, 0},
 106#endif
 107#ifdef CONFIG_APNE              /* A1200 PCMCIA NE2000 */
 108        {apne_probe, 0},
 109#endif
 110#ifdef CONFIG_MVME147_NET       /* MVME147 internal Ethernet */
 111        {mvme147lance_probe, 0},
 112#endif
 113        {NULL, 0},
 114};
 115
 116/* Unified ethernet device probe, segmented per architecture and
 117 * per bus interface. This drives the legacy devices only for now.
 118 */
 119
 120static void __init ethif_probe2(int unit)
 121{
 122        unsigned long base_addr = netdev_boot_base("eth", unit);
 123
 124        if (base_addr == 1)
 125                return;
 126
 127        (void)(probe_list2(unit, m68k_probes, base_addr == 0) &&
 128                probe_list2(unit, isa_probes, base_addr == 0));
 129}
 130
 131/*  Statically configured drivers -- order matters here. */
 132static int __init net_olddevs_init(void)
 133{
 134        int num;
 135
 136#ifdef CONFIG_SBNI
 137        for (num = 0; num < 8; ++num)
 138                sbni_probe(num);
 139#endif
 140        for (num = 0; num < 8; ++num)
 141                ethif_probe2(num);
 142
 143#ifdef CONFIG_COPS
 144        cops_probe(0);
 145        cops_probe(1);
 146        cops_probe(2);
 147#endif
 148#ifdef CONFIG_LTPC
 149        ltpc_probe();
 150#endif
 151
 152        return 0;
 153}
 154
 155device_initcall(net_olddevs_init);
 156