mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-16 00:34:20 +08:00
ide: set IDE_TFLAG_IN_* flags before queuing/executing command
* Add IDE_TFLAG_{HOB,TF,DEVICE} defines. * Set IDE_TFLAG_IN_* flags in {do_rw,ide_no_data,ide_raw}_taskfile() users. * Remove no longer needed ->tf_flags setup from ide_end_drive_cmd(). There should be no functionality changes caused by this patch. Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
This commit is contained in:
parent
3687221f28
commit
657cc1a8f6
@ -386,7 +386,7 @@ static int taskfile_load_raw(ide_drive_t *drive,
|
||||
|
||||
/* convert gtf to IDE Taskfile */
|
||||
memcpy(&args.tf_array[7], >f->tfa, 7);
|
||||
args.tf_flags = IDE_TFLAG_OUT_TF | IDE_TFLAG_OUT_DEVICE;
|
||||
args.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
|
||||
|
||||
if (ide_noacpitfs) {
|
||||
DEBPRINT("_GTF execution disabled\n");
|
||||
|
@ -201,7 +201,7 @@ static ide_startstop_t __ide_do_rw_disk(ide_drive_t *drive, struct request *rq,
|
||||
|
||||
memset(&task, 0, sizeof(task));
|
||||
task.tf_flags = IDE_TFLAG_NO_SELECT_MASK; /* FIXME? */
|
||||
task.tf_flags |= (IDE_TFLAG_OUT_TF | IDE_TFLAG_OUT_DEVICE);
|
||||
task.tf_flags |= (IDE_TFLAG_TF | IDE_TFLAG_DEVICE);
|
||||
|
||||
if (drive->select.b.lba) {
|
||||
if (lba48) {
|
||||
@ -220,7 +220,7 @@ static ide_startstop_t __ide_do_rw_disk(ide_drive_t *drive, struct request *rq,
|
||||
tf->lbam = (u8)(block >> 8);
|
||||
tf->lbah = (u8)(block >> 16);
|
||||
|
||||
task.tf_flags |= (IDE_TFLAG_LBA48 | IDE_TFLAG_OUT_HOB);
|
||||
task.tf_flags |= (IDE_TFLAG_LBA48 | IDE_TFLAG_HOB);
|
||||
} else {
|
||||
tf->nsect = nsectors & 0xff;
|
||||
tf->lbal = block;
|
||||
@ -314,9 +314,9 @@ static u64 idedisk_read_native_max_address(ide_drive_t *drive, int lba48)
|
||||
else
|
||||
tf->command = WIN_READ_NATIVE_MAX;
|
||||
tf->device = ATA_LBA;
|
||||
args.tf_flags = IDE_TFLAG_OUT_TF | IDE_TFLAG_OUT_DEVICE;
|
||||
args.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
|
||||
if (lba48)
|
||||
args.tf_flags |= (IDE_TFLAG_LBA48 | IDE_TFLAG_OUT_HOB);
|
||||
args.tf_flags |= (IDE_TFLAG_LBA48 | IDE_TFLAG_HOB);
|
||||
/* submit command request */
|
||||
ide_no_data_taskfile(drive, &args);
|
||||
|
||||
@ -353,9 +353,9 @@ static u64 idedisk_set_max_address(ide_drive_t *drive, u64 addr_req, int lba48)
|
||||
tf->command = WIN_SET_MAX;
|
||||
}
|
||||
tf->device |= ATA_LBA;
|
||||
args.tf_flags = IDE_TFLAG_OUT_TF | IDE_TFLAG_OUT_DEVICE;
|
||||
args.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
|
||||
if (lba48)
|
||||
args.tf_flags |= (IDE_TFLAG_LBA48 | IDE_TFLAG_OUT_HOB);
|
||||
args.tf_flags |= (IDE_TFLAG_LBA48 | IDE_TFLAG_HOB);
|
||||
/* submit command request */
|
||||
ide_no_data_taskfile(drive, &args);
|
||||
/* if OK, compute maximum address value */
|
||||
@ -495,7 +495,7 @@ static int smart_enable(ide_drive_t *drive)
|
||||
tf->lbam = SMART_LCYL_PASS;
|
||||
tf->lbah = SMART_HCYL_PASS;
|
||||
tf->command = WIN_SMART;
|
||||
args.tf_flags = IDE_TFLAG_OUT_TF | IDE_TFLAG_OUT_DEVICE;
|
||||
args.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
|
||||
return ide_no_data_taskfile(drive, &args);
|
||||
}
|
||||
|
||||
@ -510,7 +510,7 @@ static int get_smart_data(ide_drive_t *drive, u8 *buf, u8 sub_cmd)
|
||||
tf->lbam = SMART_LCYL_PASS;
|
||||
tf->lbah = SMART_HCYL_PASS;
|
||||
tf->command = WIN_SMART;
|
||||
args.tf_flags = IDE_TFLAG_OUT_TF | IDE_TFLAG_OUT_DEVICE;
|
||||
args.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
|
||||
args.data_phase = TASKFILE_IN;
|
||||
(void) smart_enable(drive);
|
||||
return ide_raw_taskfile(drive, &args, buf, 1);
|
||||
@ -689,7 +689,7 @@ static int write_cache(ide_drive_t *drive, int arg)
|
||||
args.tf.feature = arg ?
|
||||
SETFEATURES_EN_WCACHE : SETFEATURES_DIS_WCACHE;
|
||||
args.tf.command = WIN_SETFEATURES;
|
||||
args.tf_flags = IDE_TFLAG_OUT_TF | IDE_TFLAG_OUT_DEVICE;
|
||||
args.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
|
||||
err = ide_no_data_taskfile(drive, &args);
|
||||
if (err == 0)
|
||||
drive->wcache = arg;
|
||||
@ -709,7 +709,7 @@ static int do_idedisk_flushcache (ide_drive_t *drive)
|
||||
args.tf.command = WIN_FLUSH_CACHE_EXT;
|
||||
else
|
||||
args.tf.command = WIN_FLUSH_CACHE;
|
||||
args.tf_flags = IDE_TFLAG_OUT_TF | IDE_TFLAG_OUT_DEVICE;
|
||||
args.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
|
||||
return ide_no_data_taskfile(drive, &args);
|
||||
}
|
||||
|
||||
@ -724,7 +724,7 @@ static int set_acoustic (ide_drive_t *drive, int arg)
|
||||
args.tf.feature = arg ? SETFEATURES_EN_AAM : SETFEATURES_DIS_AAM;
|
||||
args.tf.nsect = arg;
|
||||
args.tf.command = WIN_SETFEATURES;
|
||||
args.tf_flags = IDE_TFLAG_OUT_TF | IDE_TFLAG_OUT_DEVICE;
|
||||
args.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
|
||||
ide_no_data_taskfile(drive, &args);
|
||||
drive->acoustic = arg;
|
||||
return 0;
|
||||
@ -975,7 +975,7 @@ static int idedisk_set_doorlock(ide_drive_t *drive, int on)
|
||||
|
||||
memset(&task, 0, sizeof(task));
|
||||
task.tf.command = on ? WIN_DOORLOCK : WIN_DOORUNLOCK;
|
||||
task.tf_flags = IDE_TFLAG_OUT_TF | IDE_TFLAG_OUT_DEVICE;
|
||||
task.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
|
||||
|
||||
return ide_no_data_taskfile(drive, &task);
|
||||
}
|
||||
|
@ -231,7 +231,7 @@ static ide_startstop_t ide_start_power_step(ide_drive_t *drive, struct request *
|
||||
return ide_stopped;
|
||||
|
||||
out_do_tf:
|
||||
args->tf_flags = IDE_TFLAG_OUT_TF | IDE_TFLAG_OUT_DEVICE;
|
||||
args->tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
|
||||
args->data_phase = TASKFILE_NO_DATA;
|
||||
return do_rw_taskfile(drive, args);
|
||||
}
|
||||
@ -385,10 +385,6 @@ void ide_end_drive_cmd (ide_drive_t *drive, u8 stat, u8 err)
|
||||
tf->error = err;
|
||||
tf->status = stat;
|
||||
|
||||
args->tf_flags |= (IDE_TFLAG_IN_TF|IDE_TFLAG_IN_DEVICE);
|
||||
if (args->tf_flags & IDE_TFLAG_LBA48)
|
||||
args->tf_flags |= IDE_TFLAG_IN_HOB;
|
||||
|
||||
ide_tf_read(drive, args);
|
||||
}
|
||||
} else if (blk_pm_request(rq)) {
|
||||
@ -712,7 +708,7 @@ static ide_startstop_t ide_disk_special(ide_drive_t *drive)
|
||||
return ide_stopped;
|
||||
}
|
||||
|
||||
args.tf_flags = IDE_TFLAG_OUT_TF | IDE_TFLAG_OUT_DEVICE |
|
||||
args.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE |
|
||||
IDE_TFLAG_CUSTOM_HANDLER;
|
||||
|
||||
do_rw_taskfile(drive, &args);
|
||||
|
@ -99,7 +99,7 @@ int taskfile_lib_get_identify (ide_drive_t *drive, u8 *buf)
|
||||
args.tf.command = WIN_IDENTIFY;
|
||||
else
|
||||
args.tf.command = WIN_PIDENTIFY;
|
||||
args.tf_flags = IDE_TFLAG_OUT_TF | IDE_TFLAG_OUT_DEVICE;
|
||||
args.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
|
||||
args.data_phase = TASKFILE_IN;
|
||||
return ide_raw_taskfile(drive, &args, buf, 1);
|
||||
}
|
||||
@ -618,9 +618,10 @@ int ide_taskfile_ioctl (ide_drive_t *drive, unsigned int cmd, unsigned long arg)
|
||||
|
||||
args.data_phase = req_task->data_phase;
|
||||
|
||||
args.tf_flags = IDE_TFLAG_IO_16BIT | IDE_TFLAG_OUT_DEVICE;
|
||||
args.tf_flags = IDE_TFLAG_IO_16BIT | IDE_TFLAG_DEVICE |
|
||||
IDE_TFLAG_IN_TF;
|
||||
if (drive->addressing == 1)
|
||||
args.tf_flags |= IDE_TFLAG_LBA48;
|
||||
args.tf_flags |= (IDE_TFLAG_LBA48 | IDE_TFLAG_IN_HOB);
|
||||
|
||||
if (req_task->out_flags.all) {
|
||||
args.tf_flags |= IDE_TFLAG_FLAGGED;
|
||||
@ -836,7 +837,7 @@ int ide_task_ioctl (ide_drive_t *drive, unsigned int cmd, unsigned long arg)
|
||||
memset(&task, 0, sizeof(task));
|
||||
memcpy(&task.tf_array[7], &args[1], 6);
|
||||
task.tf.command = args[0];
|
||||
task.tf_flags = IDE_TFLAG_OUT_TF | IDE_TFLAG_OUT_DEVICE;
|
||||
task.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
|
||||
|
||||
err = ide_no_data_taskfile(drive, &task);
|
||||
|
||||
|
@ -931,6 +931,12 @@ enum {
|
||||
IDE_TFLAG_IN_TF = IDE_TFLAG_IN_NSECT |
|
||||
IDE_TFLAG_IN_LBA,
|
||||
IDE_TFLAG_IN_DEVICE = (1 << 29),
|
||||
IDE_TFLAG_HOB = IDE_TFLAG_OUT_HOB |
|
||||
IDE_TFLAG_IN_HOB,
|
||||
IDE_TFLAG_TF = IDE_TFLAG_OUT_TF |
|
||||
IDE_TFLAG_IN_TF,
|
||||
IDE_TFLAG_DEVICE = IDE_TFLAG_OUT_DEVICE |
|
||||
IDE_TFLAG_IN_DEVICE,
|
||||
/* force 16-bit I/O operations */
|
||||
IDE_TFLAG_IO_16BIT = (1 << 30),
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user