diff options
Diffstat (limited to 'drivers/scsi/aacraid')
-rw-r--r-- | drivers/scsi/aacraid/README | 74 | ||||
-rw-r--r-- | drivers/scsi/aacraid/aacraid.h | 7 | ||||
-rw-r--r-- | drivers/scsi/aacraid/commctrl.c | 4 | ||||
-rw-r--r-- | drivers/scsi/aacraid/linit.c | 35 |
4 files changed, 40 insertions, 80 deletions
diff --git a/drivers/scsi/aacraid/README b/drivers/scsi/aacraid/README deleted file mode 100644 index 4193865d419c..000000000000 --- a/drivers/scsi/aacraid/README +++ /dev/null | |||
@@ -1,74 +0,0 @@ | |||
1 | AACRAID Driver for Linux (take two) | ||
2 | |||
3 | Introduction | ||
4 | ------------------------- | ||
5 | The aacraid driver adds support for Adaptec (http://www.adaptec.com) | ||
6 | RAID controllers. This is a major rewrite from the original | ||
7 | Adaptec supplied driver. It has signficantly cleaned up both the code | ||
8 | and the running binary size (the module is less than half the size of | ||
9 | the original). | ||
10 | |||
11 | Supported Cards/Chipsets | ||
12 | ------------------------- | ||
13 | Adaptec 2020S | ||
14 | Adaptec 2025S | ||
15 | Adaptec 2120S | ||
16 | Adaptec 2130S | ||
17 | Adaptec 2200S | ||
18 | Adaptec 2230S | ||
19 | Adaptec 2240S | ||
20 | Adaptec 2410SA | ||
21 | Adaptec 2610SA | ||
22 | Adaptec 2810SA | ||
23 | Adaptec 21610SA | ||
24 | Adaptec 3230S | ||
25 | Adaptec 3240S | ||
26 | Adaptec 4000SAS | ||
27 | Adaptec 4005SAS | ||
28 | Adaptec 4800SAS | ||
29 | Adaptec 4805SAS | ||
30 | Adaptec 5400S | ||
31 | Dell PERC 2 Quad Channel | ||
32 | Dell PERC 2/Si | ||
33 | Dell PERC 3/Si | ||
34 | Dell PERC 3/Di | ||
35 | Dell CERC 2 | ||
36 | HP NetRAID-4M | ||
37 | Legend S220 | ||
38 | Legend S230 | ||
39 | IBM ServeRAID 8i | ||
40 | ICP 9014R0 | ||
41 | ICP 9024R0 | ||
42 | ICP 9047MA | ||
43 | ICP 9087MA | ||
44 | ICP 9085LI | ||
45 | ICP 5085AU | ||
46 | |||
47 | People | ||
48 | ------------------------- | ||
49 | Alan Cox <alan@redhat.com> | ||
50 | Christoph Hellwig <hch@infradead.org> (updates for new-style PCI probing and SCSI host registration, | ||
51 | small cleanups/fixes) | ||
52 | Matt Domsch <matt_domsch@dell.com> (revision ioctl, adapter messages) | ||
53 | Deanna Bonds (non-DASD support, PAE fibs and 64 bit, added new adaptec controllers | ||
54 | added new ioctls, changed scsi interface to use new error handler, | ||
55 | increased the number of fibs and outstanding commands to a container) | ||
56 | |||
57 | (fixed 64bit and 64G memory model, changed confusing naming convention | ||
58 | where fibs that go to the hardware are consistently called hw_fibs and | ||
59 | not just fibs like the name of the driver tracking structure) | ||
60 | Mark Salyzyn <Mark_Salyzyn@adaptec.com> Fixed panic issues and added some new product ids for upcoming hbas. Performance tuning, card failover and bug mitigations. | ||
61 | |||
62 | Original Driver | ||
63 | ------------------------- | ||
64 | Adaptec Unix OEM Product Group | ||
65 | |||
66 | Mailing List | ||
67 | ------------------------- | ||
68 | linux-scsi@vger.kernel.org (Interested parties troll here) | ||
69 | Also note this is very different to Brian's original driver | ||
70 | so don't expect him to support it. | ||
71 | Adaptec does support this driver. Contact either tech support or Mark Salyzyn. | ||
72 | |||
73 | Original by Brian Boerner February 2001 | ||
74 | Rewritten by Alan Cox, November 2001 | ||
diff --git a/drivers/scsi/aacraid/aacraid.h b/drivers/scsi/aacraid/aacraid.h index 30fd8d6e3f31..66dbb6d2c506 100644 --- a/drivers/scsi/aacraid/aacraid.h +++ b/drivers/scsi/aacraid/aacraid.h | |||
@@ -532,6 +532,13 @@ struct aac_driver_ident | |||
532 | #define AAC_QUIRK_MASTER 0x0008 | 532 | #define AAC_QUIRK_MASTER 0x0008 |
533 | 533 | ||
534 | /* | 534 | /* |
535 | * Some adapter firmware perform poorly when it must split up scatter gathers | ||
536 | * in order to deal with the limits of the underlying CHIM. This limit in this | ||
537 | * class of adapters is 17 scatter gather elements. | ||
538 | */ | ||
539 | #define AAC_QUIRK_17SG 0x0010 | ||
540 | |||
541 | /* | ||
535 | * The adapter interface specs all queues to be located in the same | 542 | * The adapter interface specs all queues to be located in the same |
536 | * physically contigous block. The host structure that defines the | 543 | * physically contigous block. The host structure that defines the |
537 | * commuication queues will assume they are each a separate physically | 544 | * commuication queues will assume they are each a separate physically |
diff --git a/drivers/scsi/aacraid/commctrl.c b/drivers/scsi/aacraid/commctrl.c index ef623bd965f5..4fe79cd7c957 100644 --- a/drivers/scsi/aacraid/commctrl.c +++ b/drivers/scsi/aacraid/commctrl.c | |||
@@ -85,6 +85,10 @@ static int ioctl_send_fib(struct aac_dev * dev, void __user *arg) | |||
85 | if (size < le16_to_cpu(kfib->header.SenderSize)) | 85 | if (size < le16_to_cpu(kfib->header.SenderSize)) |
86 | size = le16_to_cpu(kfib->header.SenderSize); | 86 | size = le16_to_cpu(kfib->header.SenderSize); |
87 | if (size > dev->max_fib_size) { | 87 | if (size > dev->max_fib_size) { |
88 | if (size > 2048) { | ||
89 | retval = -EINVAL; | ||
90 | goto cleanup; | ||
91 | } | ||
88 | /* Highjack the hw_fib */ | 92 | /* Highjack the hw_fib */ |
89 | hw_fib = fibptr->hw_fib; | 93 | hw_fib = fibptr->hw_fib; |
90 | hw_fib_pa = fibptr->hw_fib_pa; | 94 | hw_fib_pa = fibptr->hw_fib_pa; |
diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c index 9b9062f02462..0bf5f9a943e8 100644 --- a/drivers/scsi/aacraid/linit.c +++ b/drivers/scsi/aacraid/linit.c | |||
@@ -200,10 +200,10 @@ static struct aac_driver_ident aac_drivers[] = { | |||
200 | { aac_rkt_init, "aacraid", "ADAPTEC ", "Callisto ", 2, AAC_QUIRK_MASTER }, /* Jupiter Platform */ | 200 | { aac_rkt_init, "aacraid", "ADAPTEC ", "Callisto ", 2, AAC_QUIRK_MASTER }, /* Jupiter Platform */ |
201 | { aac_rx_init, "aacraid", "ADAPTEC ", "ASR-2020SA ", 1 }, /* ASR-2020SA SATA PCI-X ZCR (Skyhawk) */ | 201 | { aac_rx_init, "aacraid", "ADAPTEC ", "ASR-2020SA ", 1 }, /* ASR-2020SA SATA PCI-X ZCR (Skyhawk) */ |
202 | { aac_rx_init, "aacraid", "ADAPTEC ", "ASR-2025SA ", 1 }, /* ASR-2025SA SATA SO-DIMM PCI-X ZCR (Terminator) */ | 202 | { aac_rx_init, "aacraid", "ADAPTEC ", "ASR-2025SA ", 1 }, /* ASR-2025SA SATA SO-DIMM PCI-X ZCR (Terminator) */ |
203 | { aac_rx_init, "aacraid", "ADAPTEC ", "AAR-2410SA SATA ", 1 }, /* AAR-2410SA PCI SATA 4ch (Jaguar II) */ | 203 | { aac_rx_init, "aacraid", "ADAPTEC ", "AAR-2410SA SATA ", 1, AAC_QUIRK_17SG }, /* AAR-2410SA PCI SATA 4ch (Jaguar II) */ |
204 | { aac_rx_init, "aacraid", "DELL ", "CERC SR2 ", 1 }, /* CERC SATA RAID 2 PCI SATA 6ch (DellCorsair) */ | 204 | { aac_rx_init, "aacraid", "DELL ", "CERC SR2 ", 1, AAC_QUIRK_17SG }, /* CERC SATA RAID 2 PCI SATA 6ch (DellCorsair) */ |
205 | { aac_rx_init, "aacraid", "ADAPTEC ", "AAR-2810SA SATA ", 1 }, /* AAR-2810SA PCI SATA 8ch (Corsair-8) */ | 205 | { aac_rx_init, "aacraid", "ADAPTEC ", "AAR-2810SA SATA ", 1, AAC_QUIRK_17SG }, /* AAR-2810SA PCI SATA 8ch (Corsair-8) */ |
206 | { aac_rx_init, "aacraid", "ADAPTEC ", "AAR-21610SA SATA", 1 }, /* AAR-21610SA PCI SATA 16ch (Corsair-16) */ | 206 | { aac_rx_init, "aacraid", "ADAPTEC ", "AAR-21610SA SATA", 1, AAC_QUIRK_17SG }, /* AAR-21610SA PCI SATA 16ch (Corsair-16) */ |
207 | { aac_rx_init, "aacraid", "ADAPTEC ", "ASR-2026ZCR ", 1 }, /* ESD SO-DIMM PCI-X SATA ZCR (Prowler) */ | 207 | { aac_rx_init, "aacraid", "ADAPTEC ", "ASR-2026ZCR ", 1 }, /* ESD SO-DIMM PCI-X SATA ZCR (Prowler) */ |
208 | { aac_rx_init, "aacraid", "ADAPTEC ", "AAR-2610SA ", 1 }, /* SATA 6Ch (Bearcat) */ | 208 | { aac_rx_init, "aacraid", "ADAPTEC ", "AAR-2610SA ", 1 }, /* SATA 6Ch (Bearcat) */ |
209 | { aac_rx_init, "aacraid", "ADAPTEC ", "ASR-2240S ", 1 }, /* ASR-2240S (SabreExpress) */ | 209 | { aac_rx_init, "aacraid", "ADAPTEC ", "ASR-2240S ", 1 }, /* ASR-2240S (SabreExpress) */ |
@@ -574,7 +574,15 @@ static ssize_t aac_show_model(struct class_device *class_dev, | |||
574 | struct aac_dev *dev = (struct aac_dev*)class_to_shost(class_dev)->hostdata; | 574 | struct aac_dev *dev = (struct aac_dev*)class_to_shost(class_dev)->hostdata; |
575 | int len; | 575 | int len; |
576 | 576 | ||
577 | len = snprintf(buf, PAGE_SIZE, "%s\n", | 577 | if (dev->supplement_adapter_info.AdapterTypeText[0]) { |
578 | char * cp = dev->supplement_adapter_info.AdapterTypeText; | ||
579 | while (*cp && *cp != ' ') | ||
580 | ++cp; | ||
581 | while (*cp == ' ') | ||
582 | ++cp; | ||
583 | len = snprintf(buf, PAGE_SIZE, "%s\n", cp); | ||
584 | } else | ||
585 | len = snprintf(buf, PAGE_SIZE, "%s\n", | ||
578 | aac_drivers[dev->cardtype].model); | 586 | aac_drivers[dev->cardtype].model); |
579 | return len; | 587 | return len; |
580 | } | 588 | } |
@@ -585,7 +593,15 @@ static ssize_t aac_show_vendor(struct class_device *class_dev, | |||
585 | struct aac_dev *dev = (struct aac_dev*)class_to_shost(class_dev)->hostdata; | 593 | struct aac_dev *dev = (struct aac_dev*)class_to_shost(class_dev)->hostdata; |
586 | int len; | 594 | int len; |
587 | 595 | ||
588 | len = snprintf(buf, PAGE_SIZE, "%s\n", | 596 | if (dev->supplement_adapter_info.AdapterTypeText[0]) { |
597 | char * cp = dev->supplement_adapter_info.AdapterTypeText; | ||
598 | while (*cp && *cp != ' ') | ||
599 | ++cp; | ||
600 | len = snprintf(buf, PAGE_SIZE, "%.*s\n", | ||
601 | (int)(cp - (char *)dev->supplement_adapter_info.AdapterTypeText), | ||
602 | dev->supplement_adapter_info.AdapterTypeText); | ||
603 | } else | ||
604 | len = snprintf(buf, PAGE_SIZE, "%s\n", | ||
589 | aac_drivers[dev->cardtype].vname); | 605 | aac_drivers[dev->cardtype].vname); |
590 | return len; | 606 | return len; |
591 | } | 607 | } |
@@ -837,6 +853,13 @@ static int __devinit aac_probe_one(struct pci_dev *pdev, | |||
837 | = (aac->scsi_host_ptr->sg_tablesize * 8) + 112; | 853 | = (aac->scsi_host_ptr->sg_tablesize * 8) + 112; |
838 | } | 854 | } |
839 | 855 | ||
856 | if ((aac_drivers[index].quirks & AAC_QUIRK_17SG) && | ||
857 | (aac->scsi_host_ptr->sg_tablesize > 17)) { | ||
858 | aac->scsi_host_ptr->sg_tablesize = 17; | ||
859 | aac->scsi_host_ptr->max_sectors | ||
860 | = (aac->scsi_host_ptr->sg_tablesize * 8) + 112; | ||
861 | } | ||
862 | |||
840 | /* | 863 | /* |
841 | * Firware printf works only with older firmware. | 864 | * Firware printf works only with older firmware. |
842 | */ | 865 | */ |