int __init seeq8005_probe(struct net_device *dev) { int i; int base_addr = dev ? dev->base_addr : 0; if (base_addr > 0x1ff) /* Check a single specified location. */ return seeq8005_probe1(dev, base_addr); else if (base_addr != 0) /* Don't probe at all. */ return -ENXIO; for (i = 0; seeq8005_portlist[i]; i++) if (seeq8005_probe1(dev, seeq8005_portlist[i]) == 0) return 0; return -ENODEV; }
__initfunc(int seeq8005_probe(struct device *dev)) { int i; int base_addr = dev ? dev->base_addr : 0; if (base_addr > 0x1ff) /* Check a single specified location. */ return seeq8005_probe1(dev, base_addr); else if (base_addr != 0) /* Don't probe at all. */ return ENXIO; for (i = 0; seeq8005_portlist[i]; i++) { int ioaddr = seeq8005_portlist[i]; if (check_region(ioaddr, SEEQ8005_IO_EXTENT)) continue; if (seeq8005_probe1(dev, ioaddr) == 0) return 0; } return ENODEV; }
struct net_device * __init seeq8005_probe(int unit) { struct net_device *dev = alloc_etherdev(sizeof(struct net_local)); unsigned *port; int err = 0; if (!dev) return ERR_PTR(-ENODEV); if (unit >= 0) { sprintf(dev->name, "eth%d", unit); netdev_boot_setup_check(dev); io = dev->base_addr; irq = dev->irq; } if (io > 0x1ff) { /* Check a single specified location. */ err = seeq8005_probe1(dev, io); } else if (io != 0) { /* Don't probe at all. */ err = -ENXIO; } else { for (port = seeq8005_portlist; *port; port++) { if (seeq8005_probe1(dev, *port) == 0) break; } if (!*port) err = -ENODEV; } if (err) goto out; err = register_netdev(dev); if (err) goto out1; return dev; out1: release_region(dev->base_addr, SEEQ8005_IO_EXTENT); out: free_netdev(dev); return ERR_PTR(err); }