static int __init ethif_probe(struct net_device *dev) { unsigned long base_addr = dev->base_addr; /* * Backwards compatibility - historically an I/O base of 1 was * used to indicate not to probe for this ethN interface */ if (base_addr == 1) return 1; /* ENXIO */ /* * The arch specific probes are 1st so that any on-board ethernet * will be probed before other ISA/EISA/MCA/PCI bus cards. */ if (probe_list(dev, m68k_probes) == 0) return 0; if (probe_list(dev, mips_probes) == 0) return 0; if (probe_list(dev, arm_probes) == 0) return 0; if (probe_list(dev, sgi_probes) == 0) return 0; if (probe_list(dev, eisa_probes) == 0) return 0; if (probe_list(dev, mca_probes) == 0) return 0; /* * Backwards compatibility - an I/O of 0xffe0 was used to indicate * that we shouldn't do a bunch of potentially risky ISA probes * for ethN (N>1). Since the widespread use of modules, *nobody* * compiles a kernel with all the ISA drivers built in anymore, * and so we should delete this check in linux 2.3 - Paul G. */ if (base_addr != 0xffe0 && probe_list(dev, isa_probes) == 0) return 0; if (probe_list(dev, parport_probes) == 0) return 0; return -ENODEV; }
static struct resource *find_oprom(struct pci_dev *pdev) { struct resource *oprom = NULL; int i; for (i = 0; i < ARRAY_SIZE(adapter_rom_resources); i++) { struct resource *res = &adapter_rom_resources[i]; unsigned short offset, vendor, device, list, rev; const unsigned char *rom; if (res->end == 0) break; rom = isa_bus_to_virt(res->start); if (probe_kernel_address(rom + 0x18, offset) != 0) continue; if (probe_kernel_address(rom + offset + 0x4, vendor) != 0) continue; if (probe_kernel_address(rom + offset + 0x6, device) != 0) continue; if (match_id(pdev, vendor, device)) { oprom = res; break; } if (probe_kernel_address(rom + offset + 0x8, list) == 0 && probe_kernel_address(rom + offset + 0xc, rev) == 0 && rev >= 3 && list && probe_list(pdev, vendor, rom + offset + list)) { oprom = res; break; } } return oprom; }