static int ether1_probe(struct expansion_card *ec, const struct ecard_id *id) { struct net_device *dev; int i, ret = 0; ether1_banner(); ret = ecard_request_resources(ec); if (ret) goto out; dev = alloc_etherdev(sizeof(struct ether1_priv)); if (!dev) { ret = -ENOMEM; goto release; } SET_NETDEV_DEV(dev, &ec->dev); dev->irq = ec->irq; priv(dev)->base = ecardm_iomap(ec, ECARD_RES_IOCFAST, 0, 0); if (!priv(dev)->base) { ret = -ENOMEM; goto free; } if ((priv(dev)->bus_type = ether1_reset(dev)) == 0) { ret = -ENODEV; goto free; } for (i = 0; i < 6; i++) dev->dev_addr[i] = readb(IDPROM_ADDRESS + (i << 2)); if (ether1_init_2(dev)) { ret = -ENODEV; goto free; } dev->netdev_ops = ðer1_netdev_ops; dev->watchdog_timeo = 5 * HZ / 100; ret = register_netdev(dev); if (ret) goto free; printk(KERN_INFO "%s: ether1 in slot %d, %pM\n", dev->name, ec->slot_no, dev->dev_addr); ecard_set_drvdata(ec, dev); return 0; free: free_netdev(dev); release: ecard_release_resources(ec); out: return ret; }
static int __devinit ether1_probe(struct expansion_card *ec, const struct ecard_id *id) { struct net_device *dev; int i, ret = 0; ether1_banner(); ret = ecard_request_resources(ec); if (ret) goto out; dev = alloc_etherdev(sizeof(struct ether1_priv)); if (!dev) { ret = -ENOMEM; goto release; } SET_MODULE_OWNER(dev); SET_NETDEV_DEV(dev, &ec->dev); dev->irq = ec->irq; priv(dev)->base = ioremap(ecard_resource_start(ec, ECARD_RES_IOCFAST), ecard_resource_len(ec, ECARD_RES_IOCFAST)); if (!priv(dev)->base) { ret = -ENOMEM; goto free; } if ((priv(dev)->bus_type = ether1_reset(dev)) == 0) { ret = -ENODEV; goto free; } for (i = 0; i < 6; i++) dev->dev_addr[i] = readb(IDPROM_ADDRESS + (i << 2)); if (ether1_init_2(dev)) { ret = -ENODEV; goto free; } dev->open = ether1_open; dev->stop = ether1_close; dev->hard_start_xmit = ether1_sendpacket; dev->get_stats = ether1_getstats; dev->set_multicast_list = ether1_setmulticastlist; dev->tx_timeout = ether1_timeout; dev->watchdog_timeo = 5 * HZ / 100; ret = register_netdev(dev); if (ret) goto free; printk(KERN_INFO "%s: ether1 in slot %d, ", dev->name, ec->slot_no); for (i = 0; i < 6; i++) printk ("%2.2x%c", dev->dev_addr[i], i == 5 ? '\n' : ':'); ecard_set_drvdata(ec, dev); return 0; free: if (priv(dev)->base) iounmap(priv(dev)->base); free_netdev(dev); release: ecard_release_resources(ec); out: return ret; }