Branch data Line data Source code
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 : : 37 : : struct devprobe2 { 38 : : struct net_device *(*probe)(int unit); 39 : : int status; /* non-zero if autoprobe has failed */ 40 : : }; 41 : : 42 : 3 : static int __init probe_list2(int unit, struct devprobe2 *p, int autoprobe) 43 : : { 44 : : struct net_device *dev; 45 : : 46 : 3 : for (; p->probe; p++) { 47 : 0 : if (autoprobe && p->status) 48 : 0 : continue; 49 : 0 : dev = p->probe(unit); 50 : 0 : if (!IS_ERR(dev)) 51 : : return 0; 52 : 0 : if (autoprobe) 53 : 0 : 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 : : */ 61 : : static 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 : : 97 : : static 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 : : 120 : 3 : static void __init ethif_probe2(int unit) 121 : : { 122 : 3 : unsigned long base_addr = netdev_boot_base("eth", unit); 123 : : 124 : 3 : if (base_addr == 1) 125 : 3 : return; 126 : : 127 : 3 : (void)(probe_list2(unit, m68k_probes, base_addr == 0) && 128 : 3 : probe_list2(unit, isa_probes, base_addr == 0)); 129 : : } 130 : : 131 : : /* Statically configured drivers -- order matters here. */ 132 : 3 : static 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 : 3 : for (num = 0; num < 8; ++num) 141 : 3 : 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 : 3 : return 0; 153 : : } 154 : : 155 : : device_initcall(net_olddevs_init);