#define PCI_SUBDEVICE_DEVICE 0x0000
+static irqreturn_t mf614_irq_handler(int irq, struct uio_info *dev_info)
+
static int __devinit mf614_pci_probe(struct pci_dev *dev,
const struct pci_device_id *id)
{
if (!info)
return -ENOMEM;
- if (pci_enable_device(dev)) //FIXME return value??
+ if (pci_enable_device(dev)) //FIXME what is return value??
goto out_free
if (pci_request_regions(dev, "mf614"))
goto out_disable
+ info->name = "MF614";
+ info->version = "0.0.1";
+
+ info->port[0].porttype = UIO_PORT_X86;
+ info->port[0].start = pci_resource_start(dev, 0);
+ if (!info->port[0].start)
+ goto out_release;
+ info->port[0].size = pci_resource_len(dev, 0);
+ info->mem[1].addr = pci_resource_start(dev, 4);
+ if (!info->mem[1].addr)
+ goto out_release;
+ info->mem[1].size = pci_resource_len(dev, 4);
+ info->mem[1].memtype = UIO_MEM_PHYS;
+ info->mem[1].internal_addr = pci_ioremap_bar(dev, 4);
+ if (!info->mem[1].internal_addr)
+ goto out_release;
+ info->irq = dev->irq;
+ info->irq_flags = IRQF_SHARED;
+ info->handler = mf614_irq_handler;
+
+ if(uio_register_device(&dev->dev, info))
+ goto out_unmap;
+ pci_set_drvdata(dev, info);
+ return 0;
+out_unmap:
+ iounmap(info->mem[1].internal_addr);
+out_release:
+ pci_release_regions(dev);
out_disable:
pci_disable_device(dev);
out_free: