aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ata
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/ata')
-rw-r--r--drivers/ata/libata-acpi.c51
1 files changed, 22 insertions, 29 deletions
diff --git a/drivers/ata/libata-acpi.c b/drivers/ata/libata-acpi.c
index 1bdf7a2c2743..d14a48e75f1b 100644
--- a/drivers/ata/libata-acpi.c
+++ b/drivers/ata/libata-acpi.c
@@ -455,6 +455,9 @@ static void taskfile_load_raw(struct ata_port *ap,
455 struct ata_device *atadev, 455 struct ata_device *atadev,
456 const struct taskfile_array *gtf) 456 const struct taskfile_array *gtf)
457{ 457{
458 struct ata_taskfile tf;
459 unsigned int err;
460
458 if (ata_msg_probe(ap)) 461 if (ata_msg_probe(ap))
459 ata_dev_printk(atadev, KERN_DEBUG, "%s: (0x1f1-1f7): hex: " 462 ata_dev_printk(atadev, KERN_DEBUG, "%s: (0x1f1-1f7): hex: "
460 "%02x %02x %02x %02x %02x %02x %02x\n", 463 "%02x %02x %02x %02x %02x %02x %02x\n",
@@ -467,35 +470,25 @@ static void taskfile_load_raw(struct ata_port *ap,
467 && (gtf->tfa[6] == 0)) 470 && (gtf->tfa[6] == 0))
468 return; 471 return;
469 472
470 if (ap->ops->qc_issue) { 473 ata_tf_init(atadev, &tf);
471 struct ata_taskfile tf; 474
472 unsigned int err; 475 /* convert gtf to tf */
473 476 tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE; /* TBD */
474 ata_tf_init(atadev, &tf); 477 tf.protocol = atadev->class == ATA_DEV_ATAPI ?
475 478 ATA_PROT_ATAPI_NODATA : ATA_PROT_NODATA;
476 /* convert gtf to tf */ 479 tf.feature = gtf->tfa[0]; /* 0x1f1 */
477 tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE; /* TBD */ 480 tf.nsect = gtf->tfa[1]; /* 0x1f2 */
478 tf.protocol = atadev->class == ATA_DEV_ATAPI ? 481 tf.lbal = gtf->tfa[2]; /* 0x1f3 */
479 ATA_PROT_ATAPI_NODATA : ATA_PROT_NODATA; 482 tf.lbam = gtf->tfa[3]; /* 0x1f4 */
480 tf.feature = gtf->tfa[0]; /* 0x1f1 */ 483 tf.lbah = gtf->tfa[4]; /* 0x1f5 */
481 tf.nsect = gtf->tfa[1]; /* 0x1f2 */ 484 tf.device = gtf->tfa[5]; /* 0x1f6 */
482 tf.lbal = gtf->tfa[2]; /* 0x1f3 */ 485 tf.command = gtf->tfa[6]; /* 0x1f7 */
483 tf.lbam = gtf->tfa[3]; /* 0x1f4 */ 486
484 tf.lbah = gtf->tfa[4]; /* 0x1f5 */ 487 err = ata_exec_internal(atadev, &tf, NULL, DMA_NONE, NULL, 0);
485 tf.device = gtf->tfa[5]; /* 0x1f6 */ 488 if (err && ata_msg_probe(ap))
486 tf.command = gtf->tfa[6]; /* 0x1f7 */ 489 ata_dev_printk(atadev, KERN_ERR,
487 490 "%s: ata_exec_internal failed: %u\n",
488 err = ata_exec_internal(atadev, &tf, NULL, DMA_NONE, NULL, 0); 491 __FUNCTION__, err);
489 if (err && ata_msg_probe(ap))
490 ata_dev_printk(atadev, KERN_ERR,
491 "%s: ata_exec_internal failed: %u\n",
492 __FUNCTION__, err);
493 } else
494 if (ata_msg_warn(ap))
495 ata_dev_printk(atadev, KERN_WARNING,
496 "%s: SATA driver is missing qc_issue function"
497 " entry points\n",
498 __FUNCTION__);
499} 492}
500 493
501/** 494/**