69 lines · c
1// SPDX-License-Identifier: GPL-2.02 3#include <linux/module.h>4#include <linux/pci.h>5#include "fdomain.h"6 7static int fdomain_pci_probe(struct pci_dev *pdev,8 const struct pci_device_id *d)9{10 int err;11 struct Scsi_Host *sh;12 13 err = pci_enable_device(pdev);14 if (err)15 goto fail;16 17 err = pci_request_regions(pdev, "fdomain_pci");18 if (err)19 goto disable_device;20 21 err = -ENODEV;22 if (pci_resource_len(pdev, 0) == 0)23 goto release_region;24 25 sh = fdomain_create(pci_resource_start(pdev, 0), pdev->irq, 7,26 &pdev->dev);27 if (!sh)28 goto release_region;29 30 pci_set_drvdata(pdev, sh);31 return 0;32 33release_region:34 pci_release_regions(pdev);35disable_device:36 pci_disable_device(pdev);37fail:38 return err;39}40 41static void fdomain_pci_remove(struct pci_dev *pdev)42{43 struct Scsi_Host *sh = pci_get_drvdata(pdev);44 45 fdomain_destroy(sh);46 pci_release_regions(pdev);47 pci_disable_device(pdev);48}49 50static struct pci_device_id fdomain_pci_table[] = {51 { PCI_DEVICE(PCI_VENDOR_ID_FD, PCI_DEVICE_ID_FD_36C70) },52 {}53};54MODULE_DEVICE_TABLE(pci, fdomain_pci_table);55 56static struct pci_driver fdomain_pci_driver = {57 .name = "fdomain_pci",58 .id_table = fdomain_pci_table,59 .probe = fdomain_pci_probe,60 .remove = fdomain_pci_remove,61 .driver.pm = FDOMAIN_PM_OPS,62};63 64module_pci_driver(fdomain_pci_driver);65 66MODULE_AUTHOR("Ondrej Zary, Rickard E. Faith");67MODULE_DESCRIPTION("Future Domain TMC-3260 PCI SCSI driver");68MODULE_LICENSE("GPL");69