diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-09-09 23:28:19 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-09-09 23:28:19 -0400 |
| commit | df423dc7f2a801b9a45d7c501a8eb5c529455ea1 (patch) | |
| tree | bdb67fe58d91b88d1f71b556389857287d4e9a93 | |
| parent | eee743fd7eac9f2ea69ad06d093dfb5a12538fe5 (diff) | |
| parent | ea3c64506ea7965f86f030155e6fdef381de10e2 (diff) | |
Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev
* 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev:
libata-sff: Reenable Port Multiplier after libata-sff remodeling.
libata: skip EH autopsy and recovery during suspend
ahci: AHCI and RAID mode SATA patch for Intel Patsburg DeviceIDs
ata_piix: IDE Mode SATA patch for Intel Patsburg DeviceIDs
libata,pata_via: revert ata_wait_idle() removal from ata_sff/via_tf_load()
ahci: fix hang on failed softreset
pata_artop: Fix device ID parity check
| -rw-r--r-- | drivers/ata/ahci.c | 3 | ||||
| -rw-r--r-- | drivers/ata/ata_piix.c | 4 | ||||
| -rw-r--r-- | drivers/ata/libahci.c | 2 | ||||
| -rw-r--r-- | drivers/ata/libata-core.c | 14 | ||||
| -rw-r--r-- | drivers/ata/libata-eh.c | 4 | ||||
| -rw-r--r-- | drivers/ata/libata-sff.c | 41 | ||||
| -rw-r--r-- | drivers/ata/pata_artop.c | 3 | ||||
| -rw-r--r-- | drivers/ata/pata_via.c | 2 | ||||
| -rw-r--r-- | drivers/ata/sata_mv.c | 2 | ||||
| -rw-r--r-- | include/linux/libata.h | 4 |
10 files changed, 64 insertions, 15 deletions
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c index 013727b20417..ff1c945fba98 100644 --- a/drivers/ata/ahci.c +++ b/drivers/ata/ahci.c | |||
| @@ -253,6 +253,9 @@ static const struct pci_device_id ahci_pci_tbl[] = { | |||
| 253 | { PCI_VDEVICE(INTEL, 0x1c05), board_ahci }, /* CPT RAID */ | 253 | { PCI_VDEVICE(INTEL, 0x1c05), board_ahci }, /* CPT RAID */ |
| 254 | { PCI_VDEVICE(INTEL, 0x1c06), board_ahci }, /* CPT RAID */ | 254 | { PCI_VDEVICE(INTEL, 0x1c06), board_ahci }, /* CPT RAID */ |
| 255 | { PCI_VDEVICE(INTEL, 0x1c07), board_ahci }, /* CPT RAID */ | 255 | { PCI_VDEVICE(INTEL, 0x1c07), board_ahci }, /* CPT RAID */ |
| 256 | { PCI_VDEVICE(INTEL, 0x1d02), board_ahci }, /* PBG AHCI */ | ||
| 257 | { PCI_VDEVICE(INTEL, 0x1d04), board_ahci }, /* PBG RAID */ | ||
| 258 | { PCI_VDEVICE(INTEL, 0x1d06), board_ahci }, /* PBG RAID */ | ||
| 256 | 259 | ||
| 257 | /* JMicron 360/1/3/5/6, match class to avoid IDE function */ | 260 | /* JMicron 360/1/3/5/6, match class to avoid IDE function */ |
| 258 | { PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, | 261 | { PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, |
diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c index 3971bc0a4838..d712675d0a96 100644 --- a/drivers/ata/ata_piix.c +++ b/drivers/ata/ata_piix.c | |||
| @@ -302,6 +302,10 @@ static const struct pci_device_id piix_pci_tbl[] = { | |||
| 302 | { 0x8086, 0x1c08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata }, | 302 | { 0x8086, 0x1c08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata }, |
| 303 | /* SATA Controller IDE (CPT) */ | 303 | /* SATA Controller IDE (CPT) */ |
| 304 | { 0x8086, 0x1c09, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata }, | 304 | { 0x8086, 0x1c09, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata }, |
| 305 | /* SATA Controller IDE (PBG) */ | ||
| 306 | { 0x8086, 0x1d00, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata }, | ||
| 307 | /* SATA Controller IDE (PBG) */ | ||
| 308 | { 0x8086, 0x1d08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata }, | ||
| 305 | { } /* terminate list */ | 309 | { } /* terminate list */ |
| 306 | }; | 310 | }; |
| 307 | 311 | ||
diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c index 666850d31df2..68dc6785472f 100644 --- a/drivers/ata/libahci.c +++ b/drivers/ata/libahci.c | |||
| @@ -1326,7 +1326,7 @@ int ahci_do_softreset(struct ata_link *link, unsigned int *class, | |||
| 1326 | /* issue the first D2H Register FIS */ | 1326 | /* issue the first D2H Register FIS */ |
| 1327 | msecs = 0; | 1327 | msecs = 0; |
| 1328 | now = jiffies; | 1328 | now = jiffies; |
| 1329 | if (time_after(now, deadline)) | 1329 | if (time_after(deadline, now)) |
| 1330 | msecs = jiffies_to_msecs(deadline - now); | 1330 | msecs = jiffies_to_msecs(deadline - now); |
| 1331 | 1331 | ||
| 1332 | tf.ctl |= ATA_SRST; | 1332 | tf.ctl |= ATA_SRST; |
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index c035b3d041ee..932eaee50245 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c | |||
| @@ -5418,6 +5418,7 @@ static int ata_host_request_pm(struct ata_host *host, pm_message_t mesg, | |||
| 5418 | */ | 5418 | */ |
| 5419 | int ata_host_suspend(struct ata_host *host, pm_message_t mesg) | 5419 | int ata_host_suspend(struct ata_host *host, pm_message_t mesg) |
| 5420 | { | 5420 | { |
| 5421 | unsigned int ehi_flags = ATA_EHI_QUIET; | ||
| 5421 | int rc; | 5422 | int rc; |
| 5422 | 5423 | ||
| 5423 | /* | 5424 | /* |
| @@ -5426,7 +5427,18 @@ int ata_host_suspend(struct ata_host *host, pm_message_t mesg) | |||
| 5426 | */ | 5427 | */ |
| 5427 | ata_lpm_enable(host); | 5428 | ata_lpm_enable(host); |
| 5428 | 5429 | ||
| 5429 | rc = ata_host_request_pm(host, mesg, 0, ATA_EHI_QUIET, 1); | 5430 | /* |
| 5431 | * On some hardware, device fails to respond after spun down | ||
| 5432 | * for suspend. As the device won't be used before being | ||
| 5433 | * resumed, we don't need to touch the device. Ask EH to skip | ||
| 5434 | * the usual stuff and proceed directly to suspend. | ||
| 5435 | * | ||
| 5436 | * http://thread.gmane.org/gmane.linux.ide/46764 | ||
| 5437 | */ | ||
| 5438 | if (mesg.event == PM_EVENT_SUSPEND) | ||
| 5439 | ehi_flags |= ATA_EHI_NO_AUTOPSY | ATA_EHI_NO_RECOVERY; | ||
| 5440 | |||
| 5441 | rc = ata_host_request_pm(host, mesg, 0, ehi_flags, 1); | ||
| 5430 | if (rc == 0) | 5442 | if (rc == 0) |
| 5431 | host->dev->power.power_state = mesg; | 5443 | host->dev->power.power_state = mesg; |
| 5432 | return rc; | 5444 | return rc; |
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c index c9ae299b8342..e48302eae55f 100644 --- a/drivers/ata/libata-eh.c +++ b/drivers/ata/libata-eh.c | |||
| @@ -3235,6 +3235,10 @@ static int ata_eh_skip_recovery(struct ata_link *link) | |||
| 3235 | if (link->flags & ATA_LFLAG_DISABLED) | 3235 | if (link->flags & ATA_LFLAG_DISABLED) |
| 3236 | return 1; | 3236 | return 1; |
| 3237 | 3237 | ||
| 3238 | /* skip if explicitly requested */ | ||
| 3239 | if (ehc->i.flags & ATA_EHI_NO_RECOVERY) | ||
| 3240 | return 1; | ||
| 3241 | |||
| 3238 | /* thaw frozen port and recover failed devices */ | 3242 | /* thaw frozen port and recover failed devices */ |
| 3239 | if ((ap->pflags & ATA_PFLAG_FROZEN) || ata_link_nr_enabled(link)) | 3243 | if ((ap->pflags & ATA_PFLAG_FROZEN) || ata_link_nr_enabled(link)) |
| 3240 | return 0; | 3244 | return 0; |
diff --git a/drivers/ata/libata-sff.c b/drivers/ata/libata-sff.c index 3b82d8ef76f0..e30c537cce32 100644 --- a/drivers/ata/libata-sff.c +++ b/drivers/ata/libata-sff.c | |||
| @@ -418,6 +418,7 @@ void ata_sff_tf_load(struct ata_port *ap, const struct ata_taskfile *tf) | |||
| 418 | if (ioaddr->ctl_addr) | 418 | if (ioaddr->ctl_addr) |
| 419 | iowrite8(tf->ctl, ioaddr->ctl_addr); | 419 | iowrite8(tf->ctl, ioaddr->ctl_addr); |
| 420 | ap->last_ctl = tf->ctl; | 420 | ap->last_ctl = tf->ctl; |
| 421 | ata_wait_idle(ap); | ||
| 421 | } | 422 | } |
| 422 | 423 | ||
| 423 | if (is_addr && (tf->flags & ATA_TFLAG_LBA48)) { | 424 | if (is_addr && (tf->flags & ATA_TFLAG_LBA48)) { |
| @@ -453,6 +454,8 @@ void ata_sff_tf_load(struct ata_port *ap, const struct ata_taskfile *tf) | |||
| 453 | iowrite8(tf->device, ioaddr->device_addr); | 454 | iowrite8(tf->device, ioaddr->device_addr); |
| 454 | VPRINTK("device 0x%X\n", tf->device); | 455 | VPRINTK("device 0x%X\n", tf->device); |
| 455 | } | 456 | } |
| 457 | |||
| 458 | ata_wait_idle(ap); | ||
| 456 | } | 459 | } |
| 457 | EXPORT_SYMBOL_GPL(ata_sff_tf_load); | 460 | EXPORT_SYMBOL_GPL(ata_sff_tf_load); |
| 458 | 461 | ||
| @@ -1042,7 +1045,8 @@ static void ata_hsm_qc_complete(struct ata_queued_cmd *qc, int in_wq) | |||
| 1042 | int ata_sff_hsm_move(struct ata_port *ap, struct ata_queued_cmd *qc, | 1045 | int ata_sff_hsm_move(struct ata_port *ap, struct ata_queued_cmd *qc, |
| 1043 | u8 status, int in_wq) | 1046 | u8 status, int in_wq) |
| 1044 | { | 1047 | { |
| 1045 | struct ata_eh_info *ehi = &ap->link.eh_info; | 1048 | struct ata_link *link = qc->dev->link; |
| 1049 | struct ata_eh_info *ehi = &link->eh_info; | ||
| 1046 | unsigned long flags = 0; | 1050 | unsigned long flags = 0; |
| 1047 | int poll_next; | 1051 | int poll_next; |
| 1048 | 1052 | ||
| @@ -1298,8 +1302,14 @@ fsm_start: | |||
| 1298 | } | 1302 | } |
| 1299 | EXPORT_SYMBOL_GPL(ata_sff_hsm_move); | 1303 | EXPORT_SYMBOL_GPL(ata_sff_hsm_move); |
| 1300 | 1304 | ||
| 1301 | void ata_sff_queue_pio_task(struct ata_port *ap, unsigned long delay) | 1305 | void ata_sff_queue_pio_task(struct ata_link *link, unsigned long delay) |
| 1302 | { | 1306 | { |
| 1307 | struct ata_port *ap = link->ap; | ||
| 1308 | |||
| 1309 | WARN_ON((ap->sff_pio_task_link != NULL) && | ||
| 1310 | (ap->sff_pio_task_link != link)); | ||
| 1311 | ap->sff_pio_task_link = link; | ||
| 1312 | |||
| 1303 | /* may fail if ata_sff_flush_pio_task() in progress */ | 1313 | /* may fail if ata_sff_flush_pio_task() in progress */ |
| 1304 | queue_delayed_work(ata_sff_wq, &ap->sff_pio_task, | 1314 | queue_delayed_work(ata_sff_wq, &ap->sff_pio_task, |
| 1305 | msecs_to_jiffies(delay)); | 1315 | msecs_to_jiffies(delay)); |
| @@ -1321,14 +1331,18 @@ static void ata_sff_pio_task(struct work_struct *work) | |||
| 1321 | { | 1331 | { |
| 1322 | struct ata_port *ap = | 1332 | struct ata_port *ap = |
| 1323 | container_of(work, struct ata_port, sff_pio_task.work); | 1333 | container_of(work, struct ata_port, sff_pio_task.work); |
| 1334 | struct ata_link *link = ap->sff_pio_task_link; | ||
| 1324 | struct ata_queued_cmd *qc; | 1335 | struct ata_queued_cmd *qc; |
| 1325 | u8 status; | 1336 | u8 status; |
| 1326 | int poll_next; | 1337 | int poll_next; |
| 1327 | 1338 | ||
| 1339 | BUG_ON(ap->sff_pio_task_link == NULL); | ||
| 1328 | /* qc can be NULL if timeout occurred */ | 1340 | /* qc can be NULL if timeout occurred */ |
| 1329 | qc = ata_qc_from_tag(ap, ap->link.active_tag); | 1341 | qc = ata_qc_from_tag(ap, link->active_tag); |
| 1330 | if (!qc) | 1342 | if (!qc) { |
| 1343 | ap->sff_pio_task_link = NULL; | ||
| 1331 | return; | 1344 | return; |
| 1345 | } | ||
| 1332 | 1346 | ||
| 1333 | fsm_start: | 1347 | fsm_start: |
| 1334 | WARN_ON_ONCE(ap->hsm_task_state == HSM_ST_IDLE); | 1348 | WARN_ON_ONCE(ap->hsm_task_state == HSM_ST_IDLE); |
| @@ -1345,11 +1359,16 @@ fsm_start: | |||
| 1345 | msleep(2); | 1359 | msleep(2); |
| 1346 | status = ata_sff_busy_wait(ap, ATA_BUSY, 10); | 1360 | status = ata_sff_busy_wait(ap, ATA_BUSY, 10); |
| 1347 | if (status & ATA_BUSY) { | 1361 | if (status & ATA_BUSY) { |
| 1348 | ata_sff_queue_pio_task(ap, ATA_SHORT_PAUSE); | 1362 | ata_sff_queue_pio_task(link, ATA_SHORT_PAUSE); |
| 1349 | return; | 1363 | return; |
| 1350 | } | 1364 | } |
| 1351 | } | 1365 | } |
| 1352 | 1366 | ||
| 1367 | /* | ||
| 1368 | * hsm_move() may trigger another command to be processed. | ||
| 1369 | * clean the link beforehand. | ||
| 1370 | */ | ||
| 1371 | ap->sff_pio_task_link = NULL; | ||
| 1353 | /* move the HSM */ | 1372 | /* move the HSM */ |
| 1354 | poll_next = ata_sff_hsm_move(ap, qc, status, 1); | 1373 | poll_next = ata_sff_hsm_move(ap, qc, status, 1); |
| 1355 | 1374 | ||
| @@ -1376,6 +1395,7 @@ fsm_start: | |||
| 1376 | unsigned int ata_sff_qc_issue(struct ata_queued_cmd *qc) | 1395 | unsigned int ata_sff_qc_issue(struct ata_queued_cmd *qc) |
| 1377 | { | 1396 | { |
| 1378 | struct ata_port *ap = qc->ap; | 1397 | struct ata_port *ap = qc->ap; |
| 1398 | struct ata_link *link = qc->dev->link; | ||
| 1379 | 1399 | ||
| 1380 | /* Use polling pio if the LLD doesn't handle | 1400 | /* Use polling pio if the LLD doesn't handle |
| 1381 | * interrupt driven pio and atapi CDB interrupt. | 1401 | * interrupt driven pio and atapi CDB interrupt. |
| @@ -1396,7 +1416,7 @@ unsigned int ata_sff_qc_issue(struct ata_queued_cmd *qc) | |||
| 1396 | ap->hsm_task_state = HSM_ST_LAST; | 1416 | ap->hsm_task_state = HSM_ST_LAST; |
| 1397 | 1417 | ||
| 1398 | if (qc->tf.flags & ATA_TFLAG_POLLING) | 1418 | if (qc->tf.flags & ATA_TFLAG_POLLING) |
| 1399 | ata_sff_queue_pio_task(ap, 0); | 1419 | ata_sff_queue_pio_task(link, 0); |
| 1400 | 1420 | ||
| 1401 | break; | 1421 | break; |
| 1402 | 1422 | ||
| @@ -1409,7 +1429,7 @@ unsigned int ata_sff_qc_issue(struct ata_queued_cmd *qc) | |||
| 1409 | if (qc->tf.flags & ATA_TFLAG_WRITE) { | 1429 | if (qc->tf.flags & ATA_TFLAG_WRITE) { |
| 1410 | /* PIO data out protocol */ | 1430 | /* PIO data out protocol */ |
| 1411 | ap->hsm_task_state = HSM_ST_FIRST; | 1431 | ap->hsm_task_state = HSM_ST_FIRST; |
| 1412 | ata_sff_queue_pio_task(ap, 0); | 1432 | ata_sff_queue_pio_task(link, 0); |
| 1413 | 1433 | ||
| 1414 | /* always send first data block using the | 1434 | /* always send first data block using the |
| 1415 | * ata_sff_pio_task() codepath. | 1435 | * ata_sff_pio_task() codepath. |
| @@ -1419,7 +1439,7 @@ unsigned int ata_sff_qc_issue(struct ata_queued_cmd *qc) | |||
| 1419 | ap->hsm_task_state = HSM_ST; | 1439 | ap->hsm_task_state = HSM_ST; |
| 1420 | 1440 | ||
| 1421 | if (qc->tf.flags & ATA_TFLAG_POLLING) | 1441 | if (qc->tf.flags & ATA_TFLAG_POLLING) |
| 1422 | ata_sff_queue_pio_task(ap, 0); | 1442 | ata_sff_queue_pio_task(link, 0); |
| 1423 | 1443 | ||
| 1424 | /* if polling, ata_sff_pio_task() handles the | 1444 | /* if polling, ata_sff_pio_task() handles the |
| 1425 | * rest. otherwise, interrupt handler takes | 1445 | * rest. otherwise, interrupt handler takes |
| @@ -1441,7 +1461,7 @@ unsigned int ata_sff_qc_issue(struct ata_queued_cmd *qc) | |||
| 1441 | /* send cdb by polling if no cdb interrupt */ | 1461 | /* send cdb by polling if no cdb interrupt */ |
| 1442 | if ((!(qc->dev->flags & ATA_DFLAG_CDB_INTR)) || | 1462 | if ((!(qc->dev->flags & ATA_DFLAG_CDB_INTR)) || |
| 1443 | (qc->tf.flags & ATA_TFLAG_POLLING)) | 1463 | (qc->tf.flags & ATA_TFLAG_POLLING)) |
| 1444 | ata_sff_queue_pio_task(ap, 0); | 1464 | ata_sff_queue_pio_task(link, 0); |
| 1445 | break; | 1465 | break; |
| 1446 | 1466 | ||
| 1447 | default: | 1467 | default: |
| @@ -2734,6 +2754,7 @@ EXPORT_SYMBOL_GPL(ata_bmdma_dumb_qc_prep); | |||
| 2734 | unsigned int ata_bmdma_qc_issue(struct ata_queued_cmd *qc) | 2754 | unsigned int ata_bmdma_qc_issue(struct ata_queued_cmd *qc) |
| 2735 | { | 2755 | { |
| 2736 | struct ata_port *ap = qc->ap; | 2756 | struct ata_port *ap = qc->ap; |
| 2757 | struct ata_link *link = qc->dev->link; | ||
| 2737 | 2758 | ||
| 2738 | /* defer PIO handling to sff_qc_issue */ | 2759 | /* defer PIO handling to sff_qc_issue */ |
| 2739 | if (!ata_is_dma(qc->tf.protocol)) | 2760 | if (!ata_is_dma(qc->tf.protocol)) |
| @@ -2762,7 +2783,7 @@ unsigned int ata_bmdma_qc_issue(struct ata_queued_cmd *qc) | |||
| 2762 | 2783 | ||
| 2763 | /* send cdb by polling if no cdb interrupt */ | 2784 | /* send cdb by polling if no cdb interrupt */ |
| 2764 | if (!(qc->dev->flags & ATA_DFLAG_CDB_INTR)) | 2785 | if (!(qc->dev->flags & ATA_DFLAG_CDB_INTR)) |
| 2765 | ata_sff_queue_pio_task(ap, 0); | 2786 | ata_sff_queue_pio_task(link, 0); |
| 2766 | break; | 2787 | break; |
| 2767 | 2788 | ||
| 2768 | default: | 2789 | default: |
diff --git a/drivers/ata/pata_artop.c b/drivers/ata/pata_artop.c index ba43f0f8c880..2215632e4b31 100644 --- a/drivers/ata/pata_artop.c +++ b/drivers/ata/pata_artop.c | |||
| @@ -74,7 +74,8 @@ static int artop6260_pre_reset(struct ata_link *link, unsigned long deadline) | |||
| 74 | struct pci_dev *pdev = to_pci_dev(ap->host->dev); | 74 | struct pci_dev *pdev = to_pci_dev(ap->host->dev); |
| 75 | 75 | ||
| 76 | /* Odd numbered device ids are the units with enable bits (the -R cards) */ | 76 | /* Odd numbered device ids are the units with enable bits (the -R cards) */ |
| 77 | if (pdev->device % 1 && !pci_test_config_bits(pdev, &artop_enable_bits[ap->port_no])) | 77 | if ((pdev->device & 1) && |
| 78 | !pci_test_config_bits(pdev, &artop_enable_bits[ap->port_no])) | ||
| 78 | return -ENOENT; | 79 | return -ENOENT; |
| 79 | 80 | ||
| 80 | return ata_sff_prereset(link, deadline); | 81 | return ata_sff_prereset(link, deadline); |
diff --git a/drivers/ata/pata_via.c b/drivers/ata/pata_via.c index 5e659885de16..ac8d7d97e408 100644 --- a/drivers/ata/pata_via.c +++ b/drivers/ata/pata_via.c | |||
| @@ -417,6 +417,8 @@ static void via_tf_load(struct ata_port *ap, const struct ata_taskfile *tf) | |||
| 417 | tf->lbam, | 417 | tf->lbam, |
| 418 | tf->lbah); | 418 | tf->lbah); |
| 419 | } | 419 | } |
| 420 | |||
| 421 | ata_wait_idle(ap); | ||
| 420 | } | 422 | } |
| 421 | 423 | ||
| 422 | static int via_port_start(struct ata_port *ap) | 424 | static int via_port_start(struct ata_port *ap) |
diff --git a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c index 81982594a014..a9fd9709c262 100644 --- a/drivers/ata/sata_mv.c +++ b/drivers/ata/sata_mv.c | |||
| @@ -2284,7 +2284,7 @@ static unsigned int mv_qc_issue_fis(struct ata_queued_cmd *qc) | |||
| 2284 | } | 2284 | } |
| 2285 | 2285 | ||
| 2286 | if (qc->tf.flags & ATA_TFLAG_POLLING) | 2286 | if (qc->tf.flags & ATA_TFLAG_POLLING) |
| 2287 | ata_sff_queue_pio_task(ap, 0); | 2287 | ata_sff_queue_pio_task(link, 0); |
| 2288 | return 0; | 2288 | return 0; |
| 2289 | } | 2289 | } |
| 2290 | 2290 | ||
diff --git a/include/linux/libata.h b/include/linux/libata.h index f010f18a0f86..45fb2967b66d 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h | |||
| @@ -335,6 +335,7 @@ enum { | |||
| 335 | ATA_EHI_HOTPLUGGED = (1 << 0), /* could have been hotplugged */ | 335 | ATA_EHI_HOTPLUGGED = (1 << 0), /* could have been hotplugged */ |
| 336 | ATA_EHI_NO_AUTOPSY = (1 << 2), /* no autopsy */ | 336 | ATA_EHI_NO_AUTOPSY = (1 << 2), /* no autopsy */ |
| 337 | ATA_EHI_QUIET = (1 << 3), /* be quiet */ | 337 | ATA_EHI_QUIET = (1 << 3), /* be quiet */ |
| 338 | ATA_EHI_NO_RECOVERY = (1 << 4), /* no recovery */ | ||
| 338 | 339 | ||
| 339 | ATA_EHI_DID_SOFTRESET = (1 << 16), /* already soft-reset this port */ | 340 | ATA_EHI_DID_SOFTRESET = (1 << 16), /* already soft-reset this port */ |
| 340 | ATA_EHI_DID_HARDRESET = (1 << 17), /* already soft-reset this port */ | 341 | ATA_EHI_DID_HARDRESET = (1 << 17), /* already soft-reset this port */ |
| @@ -723,6 +724,7 @@ struct ata_port { | |||
| 723 | struct ata_ioports ioaddr; /* ATA cmd/ctl/dma register blocks */ | 724 | struct ata_ioports ioaddr; /* ATA cmd/ctl/dma register blocks */ |
| 724 | u8 ctl; /* cache of ATA control register */ | 725 | u8 ctl; /* cache of ATA control register */ |
| 725 | u8 last_ctl; /* Cache last written value */ | 726 | u8 last_ctl; /* Cache last written value */ |
| 727 | struct ata_link* sff_pio_task_link; /* link currently used */ | ||
| 726 | struct delayed_work sff_pio_task; | 728 | struct delayed_work sff_pio_task; |
| 727 | #ifdef CONFIG_ATA_BMDMA | 729 | #ifdef CONFIG_ATA_BMDMA |
| 728 | struct ata_bmdma_prd *bmdma_prd; /* BMDMA SG list */ | 730 | struct ata_bmdma_prd *bmdma_prd; /* BMDMA SG list */ |
| @@ -1594,7 +1596,7 @@ extern void ata_sff_irq_on(struct ata_port *ap); | |||
| 1594 | extern void ata_sff_irq_clear(struct ata_port *ap); | 1596 | extern void ata_sff_irq_clear(struct ata_port *ap); |
| 1595 | extern int ata_sff_hsm_move(struct ata_port *ap, struct ata_queued_cmd *qc, | 1597 | extern int ata_sff_hsm_move(struct ata_port *ap, struct ata_queued_cmd *qc, |
| 1596 | u8 status, int in_wq); | 1598 | u8 status, int in_wq); |
| 1597 | extern void ata_sff_queue_pio_task(struct ata_port *ap, unsigned long delay); | 1599 | extern void ata_sff_queue_pio_task(struct ata_link *link, unsigned long delay); |
| 1598 | extern unsigned int ata_sff_qc_issue(struct ata_queued_cmd *qc); | 1600 | extern unsigned int ata_sff_qc_issue(struct ata_queued_cmd *qc); |
| 1599 | extern bool ata_sff_qc_fill_rtf(struct ata_queued_cmd *qc); | 1601 | extern bool ata_sff_qc_fill_rtf(struct ata_queued_cmd *qc); |
| 1600 | extern unsigned int ata_sff_port_intr(struct ata_port *ap, | 1602 | extern unsigned int ata_sff_port_intr(struct ata_port *ap, |
