aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2008-01-25 16:17:10 -0500
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2008-01-25 16:17:10 -0500
commit868e672ac8db650dde695a5707a6caf5a757e7d9 (patch)
tree90163ca8ef773fd4147e31da7de70e2e2b6acd37
parent807e35d695690011faa1ce3ad67dfc23c1e39bdc (diff)
ide: use IDE_TFLAG_LBA48 for REQ_TYPE_ATA_TASKFILE requests
* Use IDE_TFLAG_LBA48 for REQ_TYPE_ATA_TASKFILE requests in ide_end_drive_cmd() to decide whether we need to read HOB taskfile registers. * Update execute_drive_cmd() accordingly. This is a preparation for the next patch which removes unnecessary writes to HOB taskfile registers for some ATA commands. Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
-rw-r--r--drivers/ide/ide-io.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c
index 9ffab8c71e75..859cf7f4133f 100644
--- a/drivers/ide/ide-io.c
+++ b/drivers/ide/ide-io.c
@@ -374,7 +374,7 @@ void ide_end_drive_cmd (ide_drive_t *drive, u8 stat, u8 err)
374 tf->device = hwif->INB(IDE_SELECT_REG); 374 tf->device = hwif->INB(IDE_SELECT_REG);
375 tf->status = stat; 375 tf->status = stat;
376 376
377 if (drive->addressing == 1) { 377 if (args->tf_flags & IDE_TFLAG_LBA48) {
378 hwif->OUTB(drive->ctl|0x80, IDE_CONTROL_REG); 378 hwif->OUTB(drive->ctl|0x80, IDE_CONTROL_REG);
379 tf->hob_feature = hwif->INB(IDE_FEATURE_REG); 379 tf->hob_feature = hwif->INB(IDE_FEATURE_REG);
380 tf->hob_nsect = hwif->INB(IDE_NSECTOR_REG); 380 tf->hob_nsect = hwif->INB(IDE_NSECTOR_REG);
@@ -872,13 +872,15 @@ static ide_startstop_t execute_drive_cmd (ide_drive_t *drive,
872 } 872 }
873 873
874 task->tf_flags |= IDE_TFLAG_OUT_DEVICE; 874 task->tf_flags |= IDE_TFLAG_OUT_DEVICE;
875 if (drive->addressing == 1)
876 task->tf_flags |= IDE_TFLAG_LBA48;
875 877
876 if (task->tf_flags & IDE_TFLAG_FLAGGED) 878 if (task->tf_flags & IDE_TFLAG_FLAGGED)
877 return flagged_taskfile(drive, task); 879 return flagged_taskfile(drive, task);
878 880
879 task->tf_flags |= IDE_TFLAG_OUT_TF; 881 task->tf_flags |= IDE_TFLAG_OUT_TF;
880 if (drive->addressing == 1) 882 if (task->tf_flags & IDE_TFLAG_LBA48)
881 task->tf_flags |= (IDE_TFLAG_LBA48 | IDE_TFLAG_OUT_HOB); 883 task->tf_flags |= IDE_TFLAG_OUT_HOB;
882 884
883 return do_rw_taskfile(drive, task); 885 return do_rw_taskfile(drive, task);
884 } 886 }