diff options
Diffstat (limited to 'drivers/ide/tx4939ide.c')
| -rw-r--r-- | drivers/ide/tx4939ide.c | 75 |
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 | ||
| 438 | static void tx4939ide_tf_load_fixup(ide_drive_t *drive, ide_task_t *task) | 438 | static 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 | ||
| 466 | static void tx4939ide_tf_load(ide_drive_t *drive, ide_task_t *task) | 466 | static 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 | ||
| 512 | static void tx4939ide_tf_read(ide_drive_t *drive, ide_task_t *task) | 512 | static 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 | ||
| 602 | static void tx4939ide_tf_load(ide_drive_t *drive, ide_task_t *task) | 602 | static 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 | ||
| 609 | static const struct ide_tp_ops tx4939ide_tp_ops = { | 610 | static const struct ide_tp_ops tx4939ide_tp_ops = { |
