diff options
Diffstat (limited to 'drivers/scsi')
-rw-r--r-- | drivers/scsi/ahci.c | 4 | ||||
-rw-r--r-- | drivers/scsi/ata_piix.c | 4 | ||||
-rw-r--r-- | drivers/scsi/ibmmca.c | 2 | ||||
-rw-r--r-- | drivers/scsi/ibmvscsi/rpa_vscsi.c | 10 | ||||
-rw-r--r-- | drivers/scsi/libata-core.c | 28 | ||||
-rw-r--r-- | drivers/scsi/libata-scsi.c | 8 | ||||
-rw-r--r-- | drivers/scsi/libata.h | 2 |
7 files changed, 28 insertions, 30 deletions
diff --git a/drivers/scsi/ahci.c b/drivers/scsi/ahci.c index ffba65656a83..1bd82c4e52a0 100644 --- a/drivers/scsi/ahci.c +++ b/drivers/scsi/ahci.c | |||
@@ -293,6 +293,10 @@ static const struct pci_device_id ahci_pci_tbl[] = { | |||
293 | board_ahci }, /* JMicron JMB360 */ | 293 | board_ahci }, /* JMicron JMB360 */ |
294 | { 0x197b, 0x2363, PCI_ANY_ID, PCI_ANY_ID, 0, 0, | 294 | { 0x197b, 0x2363, PCI_ANY_ID, PCI_ANY_ID, 0, 0, |
295 | board_ahci }, /* JMicron JMB363 */ | 295 | board_ahci }, /* JMicron JMB363 */ |
296 | { PCI_VENDOR_ID_ATI, 0x4380, PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
297 | board_ahci }, /* ATI SB600 non-raid */ | ||
298 | { PCI_VENDOR_ID_ATI, 0x4381, PCI_ANY_ID, PCI_ANY_ID, 0, 0, | ||
299 | board_ahci }, /* ATI SB600 raid */ | ||
296 | { } /* terminate list */ | 300 | { } /* terminate list */ |
297 | }; | 301 | }; |
298 | 302 | ||
diff --git a/drivers/scsi/ata_piix.c b/drivers/scsi/ata_piix.c index 2d5be84d8bd4..24e71b555172 100644 --- a/drivers/scsi/ata_piix.c +++ b/drivers/scsi/ata_piix.c | |||
@@ -301,7 +301,7 @@ static struct piix_map_db ich6_map_db = { | |||
301 | .mask = 0x3, | 301 | .mask = 0x3, |
302 | .map = { | 302 | .map = { |
303 | /* PM PS SM SS MAP */ | 303 | /* PM PS SM SS MAP */ |
304 | { P0, P1, P2, P3 }, /* 00b */ | 304 | { P0, P2, P1, P3 }, /* 00b */ |
305 | { IDE, IDE, P1, P3 }, /* 01b */ | 305 | { IDE, IDE, P1, P3 }, /* 01b */ |
306 | { P0, P2, IDE, IDE }, /* 10b */ | 306 | { P0, P2, IDE, IDE }, /* 10b */ |
307 | { RV, RV, RV, RV }, | 307 | { RV, RV, RV, RV }, |
@@ -312,7 +312,7 @@ static struct piix_map_db ich6m_map_db = { | |||
312 | .mask = 0x3, | 312 | .mask = 0x3, |
313 | .map = { | 313 | .map = { |
314 | /* PM PS SM SS MAP */ | 314 | /* PM PS SM SS MAP */ |
315 | { P0, P1, P2, P3 }, /* 00b */ | 315 | { P0, P2, RV, RV }, /* 00b */ |
316 | { RV, RV, RV, RV }, | 316 | { RV, RV, RV, RV }, |
317 | { P0, P2, IDE, IDE }, /* 10b */ | 317 | { P0, P2, IDE, IDE }, /* 10b */ |
318 | { RV, RV, RV, RV }, | 318 | { RV, RV, RV, RV }, |
diff --git a/drivers/scsi/ibmmca.c b/drivers/scsi/ibmmca.c index 3a8462e8d063..24eb59e143a9 100644 --- a/drivers/scsi/ibmmca.c +++ b/drivers/scsi/ibmmca.c | |||
@@ -2488,7 +2488,7 @@ static int option_setup(char *str) | |||
2488 | } | 2488 | } |
2489 | ints[0] = i - 1; | 2489 | ints[0] = i - 1; |
2490 | internal_ibmmca_scsi_setup(cur, ints); | 2490 | internal_ibmmca_scsi_setup(cur, ints); |
2491 | return 0; | 2491 | return 1; |
2492 | } | 2492 | } |
2493 | 2493 | ||
2494 | __setup("ibmmcascsi=", option_setup); | 2494 | __setup("ibmmcascsi=", option_setup); |
diff --git a/drivers/scsi/ibmvscsi/rpa_vscsi.c b/drivers/scsi/ibmvscsi/rpa_vscsi.c index f47dd87c05e7..892e8ed63091 100644 --- a/drivers/scsi/ibmvscsi/rpa_vscsi.c +++ b/drivers/scsi/ibmvscsi/rpa_vscsi.c | |||
@@ -80,7 +80,7 @@ void ibmvscsi_release_crq_queue(struct crq_queue *queue, | |||
80 | tasklet_kill(&hostdata->srp_task); | 80 | tasklet_kill(&hostdata->srp_task); |
81 | do { | 81 | do { |
82 | rc = plpar_hcall_norets(H_FREE_CRQ, vdev->unit_address); | 82 | rc = plpar_hcall_norets(H_FREE_CRQ, vdev->unit_address); |
83 | } while ((rc == H_Busy) || (H_isLongBusy(rc))); | 83 | } while ((rc == H_BUSY) || (H_IS_LONG_BUSY(rc))); |
84 | dma_unmap_single(hostdata->dev, | 84 | dma_unmap_single(hostdata->dev, |
85 | queue->msg_token, | 85 | queue->msg_token, |
86 | queue->size * sizeof(*queue->msgs), DMA_BIDIRECTIONAL); | 86 | queue->size * sizeof(*queue->msgs), DMA_BIDIRECTIONAL); |
@@ -230,7 +230,7 @@ int ibmvscsi_init_crq_queue(struct crq_queue *queue, | |||
230 | rc = plpar_hcall_norets(H_REG_CRQ, | 230 | rc = plpar_hcall_norets(H_REG_CRQ, |
231 | vdev->unit_address, | 231 | vdev->unit_address, |
232 | queue->msg_token, PAGE_SIZE); | 232 | queue->msg_token, PAGE_SIZE); |
233 | if (rc == H_Resource) | 233 | if (rc == H_RESOURCE) |
234 | /* maybe kexecing and resource is busy. try a reset */ | 234 | /* maybe kexecing and resource is busy. try a reset */ |
235 | rc = ibmvscsi_reset_crq_queue(queue, | 235 | rc = ibmvscsi_reset_crq_queue(queue, |
236 | hostdata); | 236 | hostdata); |
@@ -269,7 +269,7 @@ int ibmvscsi_init_crq_queue(struct crq_queue *queue, | |||
269 | req_irq_failed: | 269 | req_irq_failed: |
270 | do { | 270 | do { |
271 | rc = plpar_hcall_norets(H_FREE_CRQ, vdev->unit_address); | 271 | rc = plpar_hcall_norets(H_FREE_CRQ, vdev->unit_address); |
272 | } while ((rc == H_Busy) || (H_isLongBusy(rc))); | 272 | } while ((rc == H_BUSY) || (H_IS_LONG_BUSY(rc))); |
273 | reg_crq_failed: | 273 | reg_crq_failed: |
274 | dma_unmap_single(hostdata->dev, | 274 | dma_unmap_single(hostdata->dev, |
275 | queue->msg_token, | 275 | queue->msg_token, |
@@ -295,7 +295,7 @@ int ibmvscsi_reenable_crq_queue(struct crq_queue *queue, | |||
295 | /* Re-enable the CRQ */ | 295 | /* Re-enable the CRQ */ |
296 | do { | 296 | do { |
297 | rc = plpar_hcall_norets(H_ENABLE_CRQ, vdev->unit_address); | 297 | rc = plpar_hcall_norets(H_ENABLE_CRQ, vdev->unit_address); |
298 | } while ((rc == H_InProgress) || (rc == H_Busy) || (H_isLongBusy(rc))); | 298 | } while ((rc == H_IN_PROGRESS) || (rc == H_BUSY) || (H_IS_LONG_BUSY(rc))); |
299 | 299 | ||
300 | if (rc) | 300 | if (rc) |
301 | printk(KERN_ERR "ibmvscsi: Error %d enabling adapter\n", rc); | 301 | printk(KERN_ERR "ibmvscsi: Error %d enabling adapter\n", rc); |
@@ -317,7 +317,7 @@ int ibmvscsi_reset_crq_queue(struct crq_queue *queue, | |||
317 | /* Close the CRQ */ | 317 | /* Close the CRQ */ |
318 | do { | 318 | do { |
319 | rc = plpar_hcall_norets(H_FREE_CRQ, vdev->unit_address); | 319 | rc = plpar_hcall_norets(H_FREE_CRQ, vdev->unit_address); |
320 | } while ((rc == H_Busy) || (H_isLongBusy(rc))); | 320 | } while ((rc == H_BUSY) || (H_IS_LONG_BUSY(rc))); |
321 | 321 | ||
322 | /* Clean out the queue */ | 322 | /* Clean out the queue */ |
323 | memset(queue->msgs, 0x00, PAGE_SIZE); | 323 | memset(queue->msgs, 0x00, PAGE_SIZE); |
diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c index 21b0ed583b8a..e63c1ff1e102 100644 --- a/drivers/scsi/libata-core.c +++ b/drivers/scsi/libata-core.c | |||
@@ -278,7 +278,7 @@ static void ata_unpack_xfermask(unsigned int xfer_mask, | |||
278 | } | 278 | } |
279 | 279 | ||
280 | static const struct ata_xfer_ent { | 280 | static const struct ata_xfer_ent { |
281 | unsigned int shift, bits; | 281 | int shift, bits; |
282 | u8 base; | 282 | u8 base; |
283 | } ata_xfer_tbl[] = { | 283 | } ata_xfer_tbl[] = { |
284 | { ATA_SHIFT_PIO, ATA_BITS_PIO, XFER_PIO_0 }, | 284 | { ATA_SHIFT_PIO, ATA_BITS_PIO, XFER_PIO_0 }, |
@@ -989,9 +989,7 @@ ata_exec_internal(struct ata_port *ap, struct ata_device *dev, | |||
989 | qc->private_data = &wait; | 989 | qc->private_data = &wait; |
990 | qc->complete_fn = ata_qc_complete_internal; | 990 | qc->complete_fn = ata_qc_complete_internal; |
991 | 991 | ||
992 | qc->err_mask = ata_qc_issue(qc); | 992 | ata_qc_issue(qc); |
993 | if (qc->err_mask) | ||
994 | ata_qc_complete(qc); | ||
995 | 993 | ||
996 | spin_unlock_irqrestore(&ap->host_set->lock, flags); | 994 | spin_unlock_irqrestore(&ap->host_set->lock, flags); |
997 | 995 | ||
@@ -3997,15 +3995,14 @@ static inline int ata_should_dma_map(struct ata_queued_cmd *qc) | |||
3997 | * | 3995 | * |
3998 | * LOCKING: | 3996 | * LOCKING: |
3999 | * spin_lock_irqsave(host_set lock) | 3997 | * spin_lock_irqsave(host_set lock) |
4000 | * | ||
4001 | * RETURNS: | ||
4002 | * Zero on success, AC_ERR_* mask on failure | ||
4003 | */ | 3998 | */ |
4004 | 3999 | void ata_qc_issue(struct ata_queued_cmd *qc) | |
4005 | unsigned int ata_qc_issue(struct ata_queued_cmd *qc) | ||
4006 | { | 4000 | { |
4007 | struct ata_port *ap = qc->ap; | 4001 | struct ata_port *ap = qc->ap; |
4008 | 4002 | ||
4003 | qc->ap->active_tag = qc->tag; | ||
4004 | qc->flags |= ATA_QCFLAG_ACTIVE; | ||
4005 | |||
4009 | if (ata_should_dma_map(qc)) { | 4006 | if (ata_should_dma_map(qc)) { |
4010 | if (qc->flags & ATA_QCFLAG_SG) { | 4007 | if (qc->flags & ATA_QCFLAG_SG) { |
4011 | if (ata_sg_setup(qc)) | 4008 | if (ata_sg_setup(qc)) |
@@ -4020,17 +4017,18 @@ unsigned int ata_qc_issue(struct ata_queued_cmd *qc) | |||
4020 | 4017 | ||
4021 | ap->ops->qc_prep(qc); | 4018 | ap->ops->qc_prep(qc); |
4022 | 4019 | ||
4023 | qc->ap->active_tag = qc->tag; | 4020 | qc->err_mask |= ap->ops->qc_issue(qc); |
4024 | qc->flags |= ATA_QCFLAG_ACTIVE; | 4021 | if (unlikely(qc->err_mask)) |
4025 | 4022 | goto err; | |
4026 | return ap->ops->qc_issue(qc); | 4023 | return; |
4027 | 4024 | ||
4028 | sg_err: | 4025 | sg_err: |
4029 | qc->flags &= ~ATA_QCFLAG_DMAMAP; | 4026 | qc->flags &= ~ATA_QCFLAG_DMAMAP; |
4030 | return AC_ERR_SYSTEM; | 4027 | qc->err_mask |= AC_ERR_SYSTEM; |
4028 | err: | ||
4029 | ata_qc_complete(qc); | ||
4031 | } | 4030 | } |
4032 | 4031 | ||
4033 | |||
4034 | /** | 4032 | /** |
4035 | * ata_qc_issue_prot - issue taskfile to device in proto-dependent manner | 4033 | * ata_qc_issue_prot - issue taskfile to device in proto-dependent manner |
4036 | * @qc: command to issue to device | 4034 | * @qc: command to issue to device |
diff --git a/drivers/scsi/libata-scsi.c b/drivers/scsi/libata-scsi.c index 628191bfd990..53f5b0d9161c 100644 --- a/drivers/scsi/libata-scsi.c +++ b/drivers/scsi/libata-scsi.c | |||
@@ -1431,9 +1431,7 @@ static void ata_scsi_translate(struct ata_port *ap, struct ata_device *dev, | |||
1431 | goto early_finish; | 1431 | goto early_finish; |
1432 | 1432 | ||
1433 | /* select device, send command to hardware */ | 1433 | /* select device, send command to hardware */ |
1434 | qc->err_mask = ata_qc_issue(qc); | 1434 | ata_qc_issue(qc); |
1435 | if (qc->err_mask) | ||
1436 | ata_qc_complete(qc); | ||
1437 | 1435 | ||
1438 | VPRINTK("EXIT\n"); | 1436 | VPRINTK("EXIT\n"); |
1439 | return; | 1437 | return; |
@@ -2199,9 +2197,7 @@ static void atapi_request_sense(struct ata_queued_cmd *qc) | |||
2199 | 2197 | ||
2200 | qc->complete_fn = atapi_sense_complete; | 2198 | qc->complete_fn = atapi_sense_complete; |
2201 | 2199 | ||
2202 | qc->err_mask = ata_qc_issue(qc); | 2200 | ata_qc_issue(qc); |
2203 | if (qc->err_mask) | ||
2204 | ata_qc_complete(qc); | ||
2205 | 2201 | ||
2206 | DPRINTK("EXIT\n"); | 2202 | DPRINTK("EXIT\n"); |
2207 | } | 2203 | } |
diff --git a/drivers/scsi/libata.h b/drivers/scsi/libata.h index 65f52beea884..1c755b14521a 100644 --- a/drivers/scsi/libata.h +++ b/drivers/scsi/libata.h | |||
@@ -47,7 +47,7 @@ extern struct ata_queued_cmd *ata_qc_new_init(struct ata_port *ap, | |||
47 | extern int ata_rwcmd_protocol(struct ata_queued_cmd *qc); | 47 | extern int ata_rwcmd_protocol(struct ata_queued_cmd *qc); |
48 | extern void ata_port_flush_task(struct ata_port *ap); | 48 | extern void ata_port_flush_task(struct ata_port *ap); |
49 | extern void ata_qc_free(struct ata_queued_cmd *qc); | 49 | extern void ata_qc_free(struct ata_queued_cmd *qc); |
50 | extern unsigned int ata_qc_issue(struct ata_queued_cmd *qc); | 50 | extern void ata_qc_issue(struct ata_queued_cmd *qc); |
51 | extern int ata_check_atapi_dma(struct ata_queued_cmd *qc); | 51 | extern int ata_check_atapi_dma(struct ata_queued_cmd *qc); |
52 | extern void ata_dev_select(struct ata_port *ap, unsigned int device, | 52 | extern void ata_dev_select(struct ata_port *ap, unsigned int device, |
53 | unsigned int wait, unsigned int can_sleep); | 53 | unsigned int wait, unsigned int can_sleep); |