|
@@ -23,17 +23,16 @@
|
|
|
#include <asm/uaccess.h>
|
|
|
#include <asm/io.h>
|
|
|
|
|
|
-void ide_tf_dump(const char *s, struct ide_taskfile *tf)
|
|
|
+void ide_tf_dump(const char *s, struct ide_cmd *cmd)
|
|
|
{
|
|
|
#ifdef DEBUG
|
|
|
printk("%s: tf: feat 0x%02x nsect 0x%02x lbal 0x%02x "
|
|
|
"lbam 0x%02x lbah 0x%02x dev 0x%02x cmd 0x%02x\n",
|
|
|
- s, tf->feature, tf->nsect, tf->lbal,
|
|
|
- tf->lbam, tf->lbah, tf->device, tf->command);
|
|
|
- printk("%s: hob: nsect 0x%02x lbal 0x%02x "
|
|
|
- "lbam 0x%02x lbah 0x%02x\n",
|
|
|
- s, tf->hob_nsect, tf->hob_lbal,
|
|
|
- tf->hob_lbam, tf->hob_lbah);
|
|
|
+ s, cmd->tf.feature, cmd->tf.nsect,
|
|
|
+ cmd->tf.lbal, cmd->tf.lbam, cmd->tf.lbah,
|
|
|
+ cmd->tf.device, cmd->tf.command);
|
|
|
+ printk("%s: hob: nsect 0x%02x lbal 0x%02x lbam 0x%02x lbah 0x%02x\n",
|
|
|
+ s, cmd->hob.nsect, cmd->hob.lbal, cmd->hob.lbam, cmd->hob.lbah);
|
|
|
#endif
|
|
|
}
|
|
|
|
|
@@ -80,12 +79,12 @@ ide_startstop_t do_rw_taskfile(ide_drive_t *drive, struct ide_cmd *orig_cmd)
|
|
|
memcpy(cmd, orig_cmd, sizeof(*cmd));
|
|
|
|
|
|
if ((cmd->tf_flags & IDE_TFLAG_DMA_PIO_FALLBACK) == 0) {
|
|
|
- ide_tf_dump(drive->name, tf);
|
|
|
+ ide_tf_dump(drive->name, cmd);
|
|
|
tp_ops->write_devctl(hwif, ATA_DEVCTL_OBS);
|
|
|
SELECT_MASK(drive, 0);
|
|
|
|
|
|
if (cmd->ftf_flags & IDE_FTFLAG_OUT_DATA) {
|
|
|
- u8 data[2] = { tf->data, tf->hob_data };
|
|
|
+ u8 data[2] = { cmd->tf.data, cmd->hob.data };
|
|
|
|
|
|
tp_ops->output_data(drive, cmd, data, 2);
|
|
|
}
|
|
@@ -490,10 +489,8 @@ int ide_taskfile_ioctl(ide_drive_t *drive, unsigned long arg)
|
|
|
|
|
|
memset(&cmd, 0, sizeof(cmd));
|
|
|
|
|
|
- memcpy(&cmd.tf_array[0], req_task->hob_ports,
|
|
|
- HDIO_DRIVE_HOB_HDR_SIZE - 2);
|
|
|
- memcpy(&cmd.tf_array[6], req_task->io_ports,
|
|
|
- HDIO_DRIVE_TASK_HDR_SIZE);
|
|
|
+ memcpy(&cmd.hob, req_task->hob_ports, HDIO_DRIVE_HOB_HDR_SIZE - 2);
|
|
|
+ memcpy(&cmd.tf, req_task->io_ports, HDIO_DRIVE_TASK_HDR_SIZE);
|
|
|
|
|
|
cmd.valid.out.tf = IDE_VALID_DEVICE;
|
|
|
cmd.valid.in.tf = IDE_VALID_DEVICE | IDE_VALID_IN_TF;
|
|
@@ -598,7 +595,7 @@ int ide_taskfile_ioctl(ide_drive_t *drive, unsigned long arg)
|
|
|
if (req_task->req_cmd == IDE_DRIVE_TASK_NO_DATA)
|
|
|
nsect = 0;
|
|
|
else if (!nsect) {
|
|
|
- nsect = (cmd.tf.hob_nsect << 8) | cmd.tf.nsect;
|
|
|
+ nsect = (cmd.hob.nsect << 8) | cmd.tf.nsect;
|
|
|
|
|
|
if (!nsect) {
|
|
|
printk(KERN_ERR "%s: in/out command without data\n",
|
|
@@ -610,10 +607,8 @@ int ide_taskfile_ioctl(ide_drive_t *drive, unsigned long arg)
|
|
|
|
|
|
err = ide_raw_taskfile(drive, &cmd, data_buf, nsect);
|
|
|
|
|
|
- memcpy(req_task->hob_ports, &cmd.tf_array[0],
|
|
|
- HDIO_DRIVE_HOB_HDR_SIZE - 2);
|
|
|
- memcpy(req_task->io_ports, &cmd.tf_array[6],
|
|
|
- HDIO_DRIVE_TASK_HDR_SIZE);
|
|
|
+ memcpy(req_task->hob_ports, &cmd.hob, HDIO_DRIVE_HOB_HDR_SIZE - 2);
|
|
|
+ memcpy(req_task->io_ports, &cmd.tf, HDIO_DRIVE_TASK_HDR_SIZE);
|
|
|
|
|
|
if ((cmd.ftf_flags & IDE_FTFLAG_SET_IN_FLAGS) &&
|
|
|
req_task->in_flags.all == 0) {
|