summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOndrej Zary <linux@zary.sk>2019-05-14 13:23:08 -0400
committerMartin K. Petersen <martin.petersen@oracle.com>2019-06-18 19:46:18 -0400
commit68046d5003e7b7b4083cdf5dfc2823b7bb0e40ea (patch)
tree89fea01a0b0f5fcc0a01b735cdeb97a2ea16b4da
parentebeb466531154d6238399eb54438235f6fbbd013 (diff)
scsi: fdomain: Resurrect driver - PCI support
Future Domain TMC-3260/AHA-2920A PCI card support. Tested on Adaptec AHA-2920A PCI card. Signed-off-by: Ondrej Zary <linux@zary.sk> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
-rw-r--r--drivers/scsi/Kconfig17
-rw-r--r--drivers/scsi/Makefile1
-rw-r--r--drivers/scsi/fdomain_pci.c68
3 files changed, 86 insertions, 0 deletions
diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig
index 213c5df4d591..b66c624affb0 100644
--- a/drivers/scsi/Kconfig
+++ b/drivers/scsi/Kconfig
@@ -645,6 +645,23 @@ config SCSI_FDOMAIN
645 tristate 645 tristate
646 depends on SCSI 646 depends on SCSI
647 647
648config SCSI_FDOMAIN_PCI
649 tristate "Future Domain TMC-3260/AHA-2920A PCI SCSI support"
650 depends on PCI && SCSI
651 select SCSI_FDOMAIN
652 help
653 This is support for Future Domain's PCI SCSI host adapters (TMC-3260)
654 and other adapters with PCI bus based on the Future Domain chipsets
655 (Adaptec AHA-2920A).
656
657 NOTE: Newer Adaptec AHA-2920C boards use the Adaptec AIC-7850 chip
658 and should use the aic7xxx driver ("Adaptec AIC7xxx chipset SCSI
659 controller support"). This Future Domain driver works with the older
660 Adaptec AHA-2920A boards with a Future Domain chip on them.
661
662 To compile this driver as a module, choose M here: the
663 module will be called fdomain_pci.
664
648config SCSI_GDTH 665config SCSI_GDTH
649 tristate "Intel/ICP (former GDT SCSI Disk Array) RAID Controller support" 666 tristate "Intel/ICP (former GDT SCSI Disk Array) RAID Controller support"
650 depends on PCI && SCSI 667 depends on PCI && SCSI
diff --git a/drivers/scsi/Makefile b/drivers/scsi/Makefile
index 9fecb50fd213..f2cea7032419 100644
--- a/drivers/scsi/Makefile
+++ b/drivers/scsi/Makefile
@@ -77,6 +77,7 @@ obj-$(CONFIG_SCSI_PM8001) += pm8001/
77obj-$(CONFIG_SCSI_ISCI) += isci/ 77obj-$(CONFIG_SCSI_ISCI) += isci/
78obj-$(CONFIG_SCSI_IPS) += ips.o 78obj-$(CONFIG_SCSI_IPS) += ips.o
79obj-$(CONFIG_SCSI_FDOMAIN) += fdomain.o 79obj-$(CONFIG_SCSI_FDOMAIN) += fdomain.o
80obj-$(CONFIG_SCSI_FDOMAIN_PCI) += fdomain_pci.o
80obj-$(CONFIG_SCSI_GENERIC_NCR5380) += g_NCR5380.o 81obj-$(CONFIG_SCSI_GENERIC_NCR5380) += g_NCR5380.o
81obj-$(CONFIG_SCSI_QLOGIC_FAS) += qlogicfas408.o qlogicfas.o 82obj-$(CONFIG_SCSI_QLOGIC_FAS) += qlogicfas408.o qlogicfas.o
82obj-$(CONFIG_PCMCIA_QLOGIC) += qlogicfas408.o 83obj-$(CONFIG_PCMCIA_QLOGIC) += qlogicfas408.o
diff --git a/drivers/scsi/fdomain_pci.c b/drivers/scsi/fdomain_pci.c
new file mode 100644
index 000000000000..3e05ce7b89e5
--- /dev/null
+++ b/drivers/scsi/fdomain_pci.c
@@ -0,0 +1,68 @@
1// SPDX-License-Identifier: GPL-2.0
2
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");