static int __init ccio_probe()

in ccio-dma.c [1516:1565]


static int __init ccio_probe(struct parisc_device *dev)
{
	int i;
	struct ioc *ioc, **ioc_p = &ioc_list;
	struct pci_hba_data *hba;

	ioc = kzalloc(sizeof(struct ioc), GFP_KERNEL);
	if (ioc == NULL) {
		printk(KERN_ERR MODULE_NAME ": memory allocation failure\n");
		return -ENOMEM;
	}

	ioc->name = dev->id.hversion == U2_IOA_RUNWAY ? "U2" : "UTurn";

	printk(KERN_INFO "Found %s at 0x%lx\n", ioc->name,
		(unsigned long)dev->hpa.start);

	for (i = 0; i < ioc_count; i++) {
		ioc_p = &(*ioc_p)->next;
	}
	*ioc_p = ioc;

	ioc->hw_path = dev->hw_path;
	ioc->ioc_regs = ioremap(dev->hpa.start, 4096);
	if (!ioc->ioc_regs) {
		kfree(ioc);
		return -ENOMEM;
	}
	ccio_ioc_init(ioc);
	ccio_init_resources(ioc);
	hppa_dma_ops = &ccio_ops;

	hba = kzalloc(sizeof(*hba), GFP_KERNEL);
	/* if this fails, no I/O cards will work, so may as well bug */
	BUG_ON(hba == NULL);

	hba->iommu = ioc;
	dev->dev.platform_data = hba;

#ifdef CONFIG_PROC_FS
	if (ioc_count == 0) {
		proc_create_single(MODULE_NAME, 0, proc_runway_root,
				ccio_proc_info);
		proc_create_single(MODULE_NAME"-bitmap", 0, proc_runway_root,
				ccio_proc_bitmap_info);
	}
#endif
	ioc_count++;
	return 0;
}