aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ide/tx4939ide.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/ide/tx4939ide.c')
-rw-r--r--drivers/ide/tx4939ide.c75
1 files changed, 38 insertions, 37 deletions
diff --git a/drivers/ide/tx4939ide.c b/drivers/ide/tx4939ide.c
index ee86688d8461..bf11791476f0 100644
--- a/drivers/ide/tx4939ide.c
+++ b/drivers/ide/tx4939ide.c
@@ -435,7 +435,7 @@ static int tx4939ide_init_dma(ide_hwif_t *hwif, const struct ide_port_info *d)
435 return ide_allocate_dma_engine(hwif); 435 return ide_allocate_dma_engine(hwif);
436} 436}
437 437
438static void tx4939ide_tf_load_fixup(ide_drive_t *drive, ide_task_t *task) 438static void tx4939ide_tf_load_fixup(ide_drive_t *drive)
439{ 439{
440 ide_hwif_t *hwif = drive->hwif; 440 ide_hwif_t *hwif = drive->hwif;
441 void __iomem *base = TX4939IDE_BASE(hwif); 441 void __iomem *base = TX4939IDE_BASE(hwif);
@@ -463,59 +463,59 @@ static void tx4939ide_outb(u8 value, unsigned long port)
463 __raw_writeb(value, (void __iomem *)port); 463 __raw_writeb(value, (void __iomem *)port);
464} 464}
465 465
466static void tx4939ide_tf_load(ide_drive_t *drive, ide_task_t *task) 466static void tx4939ide_tf_load(ide_drive_t *drive, struct ide_cmd *cmd)
467{ 467{
468 ide_hwif_t *hwif = drive->hwif; 468 ide_hwif_t *hwif = drive->hwif;
469 struct ide_io_ports *io_ports = &hwif->io_ports; 469 struct ide_io_ports *io_ports = &hwif->io_ports;
470 struct ide_taskfile *tf = &task->tf; 470 struct ide_taskfile *tf = &cmd->tf;
471 u8 HIHI = task->tf_flags & IDE_TFLAG_LBA48 ? 0xE0 : 0xEF; 471 u8 HIHI = cmd->tf_flags & IDE_TFLAG_LBA48 ? 0xE0 : 0xEF;
472 472
473 if (task->ftf_flags & IDE_FTFLAG_FLAGGED) 473 if (cmd->ftf_flags & IDE_FTFLAG_FLAGGED)
474 HIHI = 0xFF; 474 HIHI = 0xFF;
475 475
476 if (task->ftf_flags & IDE_FTFLAG_OUT_DATA) { 476 if (cmd->ftf_flags & IDE_FTFLAG_OUT_DATA) {
477 u16 data = (tf->hob_data << 8) | tf->data; 477 u16 data = (tf->hob_data << 8) | tf->data;
478 478
479 /* no endian swap */ 479 /* no endian swap */
480 __raw_writew(data, (void __iomem *)io_ports->data_addr); 480 __raw_writew(data, (void __iomem *)io_ports->data_addr);
481 } 481 }
482 482
483 if (task->tf_flags & IDE_TFLAG_OUT_HOB_FEATURE) 483 if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_FEATURE)
484 tx4939ide_outb(tf->hob_feature, io_ports->feature_addr); 484 tx4939ide_outb(tf->hob_feature, io_ports->feature_addr);
485 if (task->tf_flags & IDE_TFLAG_OUT_HOB_NSECT) 485 if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_NSECT)
486 tx4939ide_outb(tf->hob_nsect, io_ports->nsect_addr); 486 tx4939ide_outb(tf->hob_nsect, io_ports->nsect_addr);
487 if (task->tf_flags & IDE_TFLAG_OUT_HOB_LBAL) 487 if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_LBAL)
488 tx4939ide_outb(tf->hob_lbal, io_ports->lbal_addr); 488 tx4939ide_outb(tf->hob_lbal, io_ports->lbal_addr);
489 if (task->tf_flags & IDE_TFLAG_OUT_HOB_LBAM) 489 if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_LBAM)
490 tx4939ide_outb(tf->hob_lbam, io_ports->lbam_addr); 490 tx4939ide_outb(tf->hob_lbam, io_ports->lbam_addr);
491 if (task->tf_flags & IDE_TFLAG_OUT_HOB_LBAH) 491 if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_LBAH)
492 tx4939ide_outb(tf->hob_lbah, io_ports->lbah_addr); 492 tx4939ide_outb(tf->hob_lbah, io_ports->lbah_addr);
493 493
494 if (task->tf_flags & IDE_TFLAG_OUT_FEATURE) 494 if (cmd->tf_flags & IDE_TFLAG_OUT_FEATURE)
495 tx4939ide_outb(tf->feature, io_ports->feature_addr); 495 tx4939ide_outb(tf->feature, io_ports->feature_addr);
496 if (task->tf_flags & IDE_TFLAG_OUT_NSECT) 496 if (cmd->tf_flags & IDE_TFLAG_OUT_NSECT)
497 tx4939ide_outb(tf->nsect, io_ports->nsect_addr); 497 tx4939ide_outb(tf->nsect, io_ports->nsect_addr);
498 if (task->tf_flags & IDE_TFLAG_OUT_LBAL) 498 if (cmd->tf_flags & IDE_TFLAG_OUT_LBAL)
499 tx4939ide_outb(tf->lbal, io_ports->lbal_addr); 499 tx4939ide_outb(tf->lbal, io_ports->lbal_addr);
500 if (task->tf_flags & IDE_TFLAG_OUT_LBAM) 500 if (cmd->tf_flags & IDE_TFLAG_OUT_LBAM)
501 tx4939ide_outb(tf->lbam, io_ports->lbam_addr); 501 tx4939ide_outb(tf->lbam, io_ports->lbam_addr);
502 if (task->tf_flags & IDE_TFLAG_OUT_LBAH) 502 if (cmd->tf_flags & IDE_TFLAG_OUT_LBAH)
503 tx4939ide_outb(tf->lbah, io_ports->lbah_addr); 503 tx4939ide_outb(tf->lbah, io_ports->lbah_addr);
504 504
505 if (task->tf_flags & IDE_TFLAG_OUT_DEVICE) { 505 if (cmd->tf_flags & IDE_TFLAG_OUT_DEVICE) {
506 tx4939ide_outb((tf->device & HIHI) | drive->select, 506 tx4939ide_outb((tf->device & HIHI) | drive->select,
507 io_ports->device_addr); 507 io_ports->device_addr);
508 tx4939ide_tf_load_fixup(drive, task); 508 tx4939ide_tf_load_fixup(drive);
509 } 509 }
510} 510}
511 511
512static void tx4939ide_tf_read(ide_drive_t *drive, ide_task_t *task) 512static void tx4939ide_tf_read(ide_drive_t *drive, struct ide_cmd *cmd)
513{ 513{
514 ide_hwif_t *hwif = drive->hwif; 514 ide_hwif_t *hwif = drive->hwif;
515 struct ide_io_ports *io_ports = &hwif->io_ports; 515 struct ide_io_ports *io_ports = &hwif->io_ports;
516 struct ide_taskfile *tf = &task->tf; 516 struct ide_taskfile *tf = &cmd->tf;
517 517
518 if (task->ftf_flags & IDE_FTFLAG_IN_DATA) { 518 if (cmd->ftf_flags & IDE_FTFLAG_IN_DATA) {
519 u16 data; 519 u16 data;
520 520
521 /* no endian swap */ 521 /* no endian swap */
@@ -527,32 +527,32 @@ static void tx4939ide_tf_read(ide_drive_t *drive, ide_task_t *task)
527 /* be sure we're looking at the low order bits */ 527 /* be sure we're looking at the low order bits */
528 tx4939ide_outb(ATA_DEVCTL_OBS & ~0x80, io_ports->ctl_addr); 528 tx4939ide_outb(ATA_DEVCTL_OBS & ~0x80, io_ports->ctl_addr);
529 529
530 if (task->tf_flags & IDE_TFLAG_IN_FEATURE) 530 if (cmd->tf_flags & IDE_TFLAG_IN_FEATURE)
531 tf->feature = tx4939ide_inb(io_ports->feature_addr); 531 tf->feature = tx4939ide_inb(io_ports->feature_addr);
532 if (task->tf_flags & IDE_TFLAG_IN_NSECT) 532 if (cmd->tf_flags & IDE_TFLAG_IN_NSECT)
533 tf->nsect = tx4939ide_inb(io_ports->nsect_addr); 533 tf->nsect = tx4939ide_inb(io_ports->nsect_addr);
534 if (task->tf_flags & IDE_TFLAG_IN_LBAL) 534 if (cmd->tf_flags & IDE_TFLAG_IN_LBAL)
535 tf->lbal = tx4939ide_inb(io_ports->lbal_addr); 535 tf->lbal = tx4939ide_inb(io_ports->lbal_addr);
536 if (task->tf_flags & IDE_TFLAG_IN_LBAM) 536 if (cmd->tf_flags & IDE_TFLAG_IN_LBAM)
537 tf->lbam = tx4939ide_inb(io_ports->lbam_addr); 537 tf->lbam = tx4939ide_inb(io_ports->lbam_addr);
538 if (task->tf_flags & IDE_TFLAG_IN_LBAH) 538 if (cmd->tf_flags & IDE_TFLAG_IN_LBAH)
539 tf->lbah = tx4939ide_inb(io_ports->lbah_addr); 539 tf->lbah = tx4939ide_inb(io_ports->lbah_addr);
540 if (task->tf_flags & IDE_TFLAG_IN_DEVICE) 540 if (cmd->tf_flags & IDE_TFLAG_IN_DEVICE)
541 tf->device = tx4939ide_inb(io_ports->device_addr); 541 tf->device = tx4939ide_inb(io_ports->device_addr);
542 542
543 if (task->tf_flags & IDE_TFLAG_LBA48) { 543 if (cmd->tf_flags & IDE_TFLAG_LBA48) {
544 tx4939ide_outb(ATA_DEVCTL_OBS | 0x80, io_ports->ctl_addr); 544 tx4939ide_outb(ATA_DEVCTL_OBS | 0x80, io_ports->ctl_addr);
545 545
546 if (task->tf_flags & IDE_TFLAG_IN_HOB_FEATURE) 546 if (cmd->tf_flags & IDE_TFLAG_IN_HOB_FEATURE)
547 tf->hob_feature = 547 tf->hob_feature =
548 tx4939ide_inb(io_ports->feature_addr); 548 tx4939ide_inb(io_ports->feature_addr);
549 if (task->tf_flags & IDE_TFLAG_IN_HOB_NSECT) 549 if (cmd->tf_flags & IDE_TFLAG_IN_HOB_NSECT)
550 tf->hob_nsect = tx4939ide_inb(io_ports->nsect_addr); 550 tf->hob_nsect = tx4939ide_inb(io_ports->nsect_addr);
551 if (task->tf_flags & IDE_TFLAG_IN_HOB_LBAL) 551 if (cmd->tf_flags & IDE_TFLAG_IN_HOB_LBAL)
552 tf->hob_lbal = tx4939ide_inb(io_ports->lbal_addr); 552 tf->hob_lbal = tx4939ide_inb(io_ports->lbal_addr);
553 if (task->tf_flags & IDE_TFLAG_IN_HOB_LBAM) 553 if (cmd->tf_flags & IDE_TFLAG_IN_HOB_LBAM)
554 tf->hob_lbam = tx4939ide_inb(io_ports->lbam_addr); 554 tf->hob_lbam = tx4939ide_inb(io_ports->lbam_addr);
555 if (task->tf_flags & IDE_TFLAG_IN_HOB_LBAH) 555 if (cmd->tf_flags & IDE_TFLAG_IN_HOB_LBAH)
556 tf->hob_lbah = tx4939ide_inb(io_ports->lbah_addr); 556 tf->hob_lbah = tx4939ide_inb(io_ports->lbah_addr);
557 } 557 }
558} 558}
@@ -599,11 +599,12 @@ static const struct ide_tp_ops tx4939ide_tp_ops = {
599 599
600#else /* __LITTLE_ENDIAN */ 600#else /* __LITTLE_ENDIAN */
601 601
602static void tx4939ide_tf_load(ide_drive_t *drive, ide_task_t *task) 602static void tx4939ide_tf_load(ide_drive_t *drive, struct ide_cmd *cmd)
603{ 603{
604 ide_tf_load(drive, task); 604 ide_tf_load(drive, cmd);
605 if (task->tf_flags & IDE_TFLAG_OUT_DEVICE) 605
606 tx4939ide_tf_load_fixup(drive, task); 606 if (cmd->tf_flags & IDE_TFLAG_OUT_DEVICE)
607 tx4939ide_tf_load_fixup(drive);
607} 608}
608 609
609static const struct ide_tp_ops tx4939ide_tp_ops = { 610static const struct ide_tp_ops tx4939ide_tp_ops = {