diff options
author | Dmitry Torokhov <dtor_core@ameritech.net> | 2005-09-04 02:35:56 -0400 |
---|---|---|
committer | Dmitry Torokhov <dtor_core@ameritech.net> | 2005-09-04 02:35:56 -0400 |
commit | 15c42e5a1f0bccb69508059b8ae0720840068b8e (patch) | |
tree | 921b088cc7acb50bb8b65dbc30451a8a3958ec8d /drivers/scsi/sata_nv.c | |
parent | 541e316aed6f7d6efeb427a88645c2a8f61418d6 (diff) | |
parent | f505380ba7b98ec97bf25300c2a58aeae903530b (diff) |
Merge HEAD from rsync://rsync.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
Diffstat (limited to 'drivers/scsi/sata_nv.c')
-rw-r--r-- | drivers/scsi/sata_nv.c | 62 |
1 files changed, 45 insertions, 17 deletions
diff --git a/drivers/scsi/sata_nv.c b/drivers/scsi/sata_nv.c index b0403ccd8a25..03d9bc6e69df 100644 --- a/drivers/scsi/sata_nv.c +++ b/drivers/scsi/sata_nv.c | |||
@@ -4,21 +4,37 @@ | |||
4 | * Copyright 2004 NVIDIA Corp. All rights reserved. | 4 | * Copyright 2004 NVIDIA Corp. All rights reserved. |
5 | * Copyright 2004 Andrew Chew | 5 | * Copyright 2004 Andrew Chew |
6 | * | 6 | * |
7 | * The contents of this file are subject to the Open | ||
8 | * Software License version 1.1 that can be found at | ||
9 | * http://www.opensource.org/licenses/osl-1.1.txt and is included herein | ||
10 | * by reference. | ||
11 | * | 7 | * |
12 | * Alternatively, the contents of this file may be used under the terms | 8 | * This program is free software; you can redistribute it and/or modify |
13 | * of the GNU General Public License version 2 (the "GPL") as distributed | 9 | * it under the terms of the GNU General Public License as published by |
14 | * in the kernel source COPYING file, in which case the provisions of | 10 | * the Free Software Foundation; either version 2, or (at your option) |
15 | * the GPL are applicable instead of the above. If you wish to allow | 11 | * any later version. |
16 | * the use of your version of this file only under the terms of the | 12 | * |
17 | * GPL and not to allow others to use your version of this file under | 13 | * This program is distributed in the hope that it will be useful, |
18 | * the OSL, indicate your decision by deleting the provisions above and | 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
19 | * replace them with the notice and other provisions required by the GPL. | 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
20 | * If you do not delete the provisions above, a recipient may use your | 16 | * GNU General Public License for more details. |
21 | * version of this file under either the OSL or the GPL. | 17 | * |
18 | * You should have received a copy of the GNU General Public License | ||
19 | * along with this program; see the file COPYING. If not, write to | ||
20 | * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. | ||
21 | * | ||
22 | * | ||
23 | * libata documentation is available via 'make {ps|pdf}docs', | ||
24 | * as Documentation/DocBook/libata.* | ||
25 | * | ||
26 | * No hardware documentation available outside of NVIDIA. | ||
27 | * This driver programs the NVIDIA SATA controller in a similar | ||
28 | * fashion as with other PCI IDE BMDMA controllers, with a few | ||
29 | * NV-specific details such as register offsets, SATA phy location, | ||
30 | * hotplug info, etc. | ||
31 | * | ||
32 | * | ||
33 | * 0.08 | ||
34 | * - Added support for MCP51 and MCP55. | ||
35 | * | ||
36 | * 0.07 | ||
37 | * - Added support for RAID class code. | ||
22 | * | 38 | * |
23 | * 0.06 | 39 | * 0.06 |
24 | * - Added generic SATA support by using a pci_device_id that filters on | 40 | * - Added generic SATA support by using a pci_device_id that filters on |
@@ -48,7 +64,7 @@ | |||
48 | #include <linux/libata.h> | 64 | #include <linux/libata.h> |
49 | 65 | ||
50 | #define DRV_NAME "sata_nv" | 66 | #define DRV_NAME "sata_nv" |
51 | #define DRV_VERSION "0.6" | 67 | #define DRV_VERSION "0.8" |
52 | 68 | ||
53 | #define NV_PORTS 2 | 69 | #define NV_PORTS 2 |
54 | #define NV_PIO_MASK 0x1f | 70 | #define NV_PIO_MASK 0x1f |
@@ -116,7 +132,9 @@ enum nv_host_type | |||
116 | GENERIC, | 132 | GENERIC, |
117 | NFORCE2, | 133 | NFORCE2, |
118 | NFORCE3, | 134 | NFORCE3, |
119 | CK804 | 135 | CK804, |
136 | MCP51, | ||
137 | MCP55 | ||
120 | }; | 138 | }; |
121 | 139 | ||
122 | static struct pci_device_id nv_pci_tbl[] = { | 140 | static struct pci_device_id nv_pci_tbl[] = { |
@@ -134,9 +152,18 @@ static struct pci_device_id nv_pci_tbl[] = { | |||
134 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, CK804 }, | 152 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, CK804 }, |
135 | { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA2, | 153 | { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA2, |
136 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, CK804 }, | 154 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, CK804 }, |
155 | { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_SATA, | ||
156 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, MCP51 }, | ||
157 | { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_SATA2, | ||
158 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, MCP51 }, | ||
159 | { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA, | ||
160 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, MCP55 }, | ||
137 | { PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID, | 161 | { PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID, |
138 | PCI_ANY_ID, PCI_ANY_ID, | 162 | PCI_ANY_ID, PCI_ANY_ID, |
139 | PCI_CLASS_STORAGE_IDE<<8, 0xffff00, GENERIC }, | 163 | PCI_CLASS_STORAGE_IDE<<8, 0xffff00, GENERIC }, |
164 | { PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID, | ||
165 | PCI_ANY_ID, PCI_ANY_ID, | ||
166 | PCI_CLASS_STORAGE_RAID<<8, 0xffff00, GENERIC }, | ||
140 | { 0, } /* terminate list */ | 167 | { 0, } /* terminate list */ |
141 | }; | 168 | }; |
142 | 169 | ||
@@ -274,7 +301,8 @@ static irqreturn_t nv_interrupt (int irq, void *dev_instance, | |||
274 | struct ata_port *ap; | 301 | struct ata_port *ap; |
275 | 302 | ||
276 | ap = host_set->ports[i]; | 303 | ap = host_set->ports[i]; |
277 | if (ap && (!(ap->flags & ATA_FLAG_PORT_DISABLED))) { | 304 | if (ap && |
305 | !(ap->flags & (ATA_FLAG_PORT_DISABLED | ATA_FLAG_NOINTR))) { | ||
278 | struct ata_queued_cmd *qc; | 306 | struct ata_queued_cmd *qc; |
279 | 307 | ||
280 | qc = ata_qc_from_tag(ap, ap->active_tag); | 308 | qc = ata_qc_from_tag(ap, ap->active_tag); |