diff options
author | Ondrej Zary <linux@zary.sk> | 2019-05-14 13:23:08 -0400 |
---|---|---|
committer | Martin K. Petersen <martin.petersen@oracle.com> | 2019-06-18 19:46:18 -0400 |
commit | 68046d5003e7b7b4083cdf5dfc2823b7bb0e40ea (patch) | |
tree | 89fea01a0b0f5fcc0a01b735cdeb97a2ea16b4da | |
parent | ebeb466531154d6238399eb54438235f6fbbd013 (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/Kconfig | 17 | ||||
-rw-r--r-- | drivers/scsi/Makefile | 1 | ||||
-rw-r--r-- | drivers/scsi/fdomain_pci.c | 68 |
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 | ||
648 | config 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 | |||
648 | config SCSI_GDTH | 665 | config 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/ | |||
77 | obj-$(CONFIG_SCSI_ISCI) += isci/ | 77 | obj-$(CONFIG_SCSI_ISCI) += isci/ |
78 | obj-$(CONFIG_SCSI_IPS) += ips.o | 78 | obj-$(CONFIG_SCSI_IPS) += ips.o |
79 | obj-$(CONFIG_SCSI_FDOMAIN) += fdomain.o | 79 | obj-$(CONFIG_SCSI_FDOMAIN) += fdomain.o |
80 | obj-$(CONFIG_SCSI_FDOMAIN_PCI) += fdomain_pci.o | ||
80 | obj-$(CONFIG_SCSI_GENERIC_NCR5380) += g_NCR5380.o | 81 | obj-$(CONFIG_SCSI_GENERIC_NCR5380) += g_NCR5380.o |
81 | obj-$(CONFIG_SCSI_QLOGIC_FAS) += qlogicfas408.o qlogicfas.o | 82 | obj-$(CONFIG_SCSI_QLOGIC_FAS) += qlogicfas408.o qlogicfas.o |
82 | obj-$(CONFIG_PCMCIA_QLOGIC) += qlogicfas408.o | 83 | obj-$(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 | |||
7 | static 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 | |||
33 | release_region: | ||
34 | pci_release_regions(pdev); | ||
35 | disable_device: | ||
36 | pci_disable_device(pdev); | ||
37 | fail: | ||
38 | return err; | ||
39 | } | ||
40 | |||
41 | static 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 | |||
50 | static struct pci_device_id fdomain_pci_table[] = { | ||
51 | { PCI_DEVICE(PCI_VENDOR_ID_FD, PCI_DEVICE_ID_FD_36C70) }, | ||
52 | {} | ||
53 | }; | ||
54 | MODULE_DEVICE_TABLE(pci, fdomain_pci_table); | ||
55 | |||
56 | static 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 | |||
64 | module_pci_driver(fdomain_pci_driver); | ||
65 | |||
66 | MODULE_AUTHOR("Ondrej Zary, Rickard E. Faith"); | ||
67 | MODULE_DESCRIPTION("Future Domain TMC-3260 PCI SCSI driver"); | ||
68 | MODULE_LICENSE("GPL"); | ||