diff options
Diffstat (limited to 'drivers/scsi/sata_qstor.c')
-rw-r--r-- | drivers/scsi/sata_qstor.c | 43 |
1 files changed, 24 insertions, 19 deletions
diff --git a/drivers/scsi/sata_qstor.c b/drivers/scsi/sata_qstor.c index 1383e8a28d72..9c99ab433bd3 100644 --- a/drivers/scsi/sata_qstor.c +++ b/drivers/scsi/sata_qstor.c | |||
@@ -6,21 +6,24 @@ | |||
6 | * Copyright 2005 Pacific Digital Corporation. | 6 | * Copyright 2005 Pacific Digital Corporation. |
7 | * (OSL/GPL code release authorized by Jalil Fadavi). | 7 | * (OSL/GPL code release authorized by Jalil Fadavi). |
8 | * | 8 | * |
9 | * The contents of this file are subject to the Open | ||
10 | * Software License version 1.1 that can be found at | ||
11 | * http://www.opensource.org/licenses/osl-1.1.txt and is included herein | ||
12 | * by reference. | ||
13 | * | 9 | * |
14 | * Alternatively, the contents of this file may be used under the terms | 10 | * This program is free software; you can redistribute it and/or modify |
15 | * of the GNU General Public License version 2 (the "GPL") as distributed | 11 | * it under the terms of the GNU General Public License as published by |
16 | * in the kernel source COPYING file, in which case the provisions of | 12 | * the Free Software Foundation; either version 2, or (at your option) |
17 | * the GPL are applicable instead of the above. If you wish to allow | 13 | * any later version. |
18 | * the use of your version of this file only under the terms of the | 14 | * |
19 | * GPL and not to allow others to use your version of this file under | 15 | * This program is distributed in the hope that it will be useful, |
20 | * the OSL, indicate your decision by deleting the provisions above and | 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
21 | * replace them with the notice and other provisions required by the GPL. | 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
22 | * If you do not delete the provisions above, a recipient may use your | 18 | * GNU General Public License for more details. |
23 | * version of this file under either the OSL or the GPL. | 19 | * |
20 | * You should have received a copy of the GNU General Public License | ||
21 | * along with this program; see the file COPYING. If not, write to | ||
22 | * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. | ||
23 | * | ||
24 | * | ||
25 | * libata documentation is available via 'make {ps|pdf}docs', | ||
26 | * as Documentation/DocBook/libata.* | ||
24 | * | 27 | * |
25 | */ | 28 | */ |
26 | 29 | ||
@@ -117,7 +120,7 @@ static void qs_phy_reset(struct ata_port *ap); | |||
117 | static void qs_qc_prep(struct ata_queued_cmd *qc); | 120 | static void qs_qc_prep(struct ata_queued_cmd *qc); |
118 | static int qs_qc_issue(struct ata_queued_cmd *qc); | 121 | static int qs_qc_issue(struct ata_queued_cmd *qc); |
119 | static int qs_check_atapi_dma(struct ata_queued_cmd *qc); | 122 | static int qs_check_atapi_dma(struct ata_queued_cmd *qc); |
120 | static void qs_bmdma_stop(struct ata_port *ap); | 123 | static void qs_bmdma_stop(struct ata_queued_cmd *qc); |
121 | static u8 qs_bmdma_status(struct ata_port *ap); | 124 | static u8 qs_bmdma_status(struct ata_port *ap); |
122 | static void qs_irq_clear(struct ata_port *ap); | 125 | static void qs_irq_clear(struct ata_port *ap); |
123 | static void qs_eng_timeout(struct ata_port *ap); | 126 | static void qs_eng_timeout(struct ata_port *ap); |
@@ -198,7 +201,7 @@ static int qs_check_atapi_dma(struct ata_queued_cmd *qc) | |||
198 | return 1; /* ATAPI DMA not supported */ | 201 | return 1; /* ATAPI DMA not supported */ |
199 | } | 202 | } |
200 | 203 | ||
201 | static void qs_bmdma_stop(struct ata_port *ap) | 204 | static void qs_bmdma_stop(struct ata_queued_cmd *qc) |
202 | { | 205 | { |
203 | /* nothing */ | 206 | /* nothing */ |
204 | } | 207 | } |
@@ -386,7 +389,8 @@ static inline unsigned int qs_intr_pkt(struct ata_host_set *host_set) | |||
386 | DPRINTK("SFF=%08x%08x: sCHAN=%u sHST=%d sDST=%02x\n", | 389 | DPRINTK("SFF=%08x%08x: sCHAN=%u sHST=%d sDST=%02x\n", |
387 | sff1, sff0, port_no, sHST, sDST); | 390 | sff1, sff0, port_no, sHST, sDST); |
388 | handled = 1; | 391 | handled = 1; |
389 | if (ap && (!(ap->flags & ATA_FLAG_PORT_DISABLED))) { | 392 | if (ap && !(ap->flags & |
393 | (ATA_FLAG_PORT_DISABLED|ATA_FLAG_NOINTR))) { | ||
390 | struct ata_queued_cmd *qc; | 394 | struct ata_queued_cmd *qc; |
391 | struct qs_port_priv *pp = ap->private_data; | 395 | struct qs_port_priv *pp = ap->private_data; |
392 | if (!pp || pp->state != qs_state_pkt) | 396 | if (!pp || pp->state != qs_state_pkt) |
@@ -417,7 +421,8 @@ static inline unsigned int qs_intr_mmio(struct ata_host_set *host_set) | |||
417 | for (port_no = 0; port_no < host_set->n_ports; ++port_no) { | 421 | for (port_no = 0; port_no < host_set->n_ports; ++port_no) { |
418 | struct ata_port *ap; | 422 | struct ata_port *ap; |
419 | ap = host_set->ports[port_no]; | 423 | ap = host_set->ports[port_no]; |
420 | if (ap && (!(ap->flags & ATA_FLAG_PORT_DISABLED))) { | 424 | if (ap && |
425 | !(ap->flags & (ATA_FLAG_PORT_DISABLED | ATA_FLAG_NOINTR))) { | ||
421 | struct ata_queued_cmd *qc; | 426 | struct ata_queued_cmd *qc; |
422 | struct qs_port_priv *pp = ap->private_data; | 427 | struct qs_port_priv *pp = ap->private_data; |
423 | if (!pp || pp->state != qs_state_mmio) | 428 | if (!pp || pp->state != qs_state_mmio) |
@@ -431,7 +436,7 @@ static inline unsigned int qs_intr_mmio(struct ata_host_set *host_set) | |||
431 | continue; | 436 | continue; |
432 | DPRINTK("ata%u: protocol %d (dev_stat 0x%X)\n", | 437 | DPRINTK("ata%u: protocol %d (dev_stat 0x%X)\n", |
433 | ap->id, qc->tf.protocol, status); | 438 | ap->id, qc->tf.protocol, status); |
434 | 439 | ||
435 | /* complete taskfile transaction */ | 440 | /* complete taskfile transaction */ |
436 | pp->state = qs_state_idle; | 441 | pp->state = qs_state_idle; |
437 | ata_qc_complete(qc, status); | 442 | ata_qc_complete(qc, status); |