int __init xtsonic_probe(struct platform_device *pdev) { struct net_device *dev; struct sonic_local *lp; struct resource *resmem, *resirq; int err = 0; DECLARE_MAC_BUF(mac); if ((resmem = platform_get_resource(pdev, IORESOURCE_MEM, 0)) == NULL) return -ENODEV; if ((resirq = platform_get_resource(pdev, IORESOURCE_IRQ, 0)) == NULL) return -ENODEV; if ((dev = alloc_etherdev(sizeof(struct sonic_local))) == NULL) return -ENOMEM; lp = netdev_priv(dev); lp->device = &pdev->dev; SET_NETDEV_DEV(dev, &pdev->dev); netdev_boot_setup_check(dev); dev->base_addr = resmem->start; dev->irq = resirq->start; if ((err = sonic_probe1(dev))) goto out; if ((err = register_netdev(dev))) goto out1; printk("%s: SONIC ethernet @%08lx, MAC %s, IRQ %d\n", dev->name, dev->base_addr, print_mac(mac, dev->dev_addr), dev->irq); return 0; out1: release_region(dev->base_addr, SONIC_MEM_SIZE); out: free_netdev(dev); return err; }
/* * Probe for a SONIC ethernet controller on a Mips Jazz board. * Actually probing is superfluous but we're paranoid. */ static int __init jazz_sonic_probe(struct platform_device *pdev) { struct net_device *dev; struct sonic_local *lp; struct resource *res; int err = 0; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!res) return -ENODEV; dev = alloc_etherdev(sizeof(struct sonic_local)); if (!dev) return -ENOMEM; lp = netdev_priv(dev); lp->device = &pdev->dev; SET_NETDEV_DEV(dev, &pdev->dev); platform_set_drvdata(pdev, dev); netdev_boot_setup_check(dev); dev->base_addr = res->start; dev->irq = platform_get_irq(pdev, 0); err = sonic_probe1(dev); if (err) goto out; err = register_netdev(dev); if (err) goto out1; printk("%s: MAC %pM IRQ %d\n", dev->name, dev->dev_addr, dev->irq); return 0; out1: release_region(dev->base_addr, SONIC_MEM_SIZE); out: free_netdev(dev); return err; }