Example #1
0
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;
}
Example #2
0
/*
 * 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;
}