Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 35218d1c authored by Sergei Shtylyov's avatar Sergei Shtylyov Committed by Bartlomiej Zolnierkiewicz
Browse files

ide: move data register access out of tf_{read|load}() methods (take 2)



Move IDE_FTFLAG_{IN|OUT}_DATA flag handling out of tf_{read|load}() methods
into the only two functions where these flags actually need to be handled:
do_rw_taskfile() and ide_complete_cmd()...

Signed-off-by: default avatarSergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
parent bac08cee
Loading
Loading
Loading
Loading
+0 −15
Original line number Diff line number Diff line
@@ -195,12 +195,6 @@ static void at91_ide_tf_load(ide_drive_t *drive, struct ide_cmd *cmd)
	if (cmd->ftf_flags & IDE_FTFLAG_FLAGGED)
		HIHI = 0xFF;

	if (cmd->ftf_flags & IDE_FTFLAG_OUT_DATA) {
		u8 data[2] = { tf->data, tf->hob_data };

		at91_ide_output_data(drive, cmd, data, 2);
	}

	if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_FEATURE)
		ide_mm_outb(tf->hob_feature, io_ports->feature_addr);
	if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_NSECT)
@@ -233,15 +227,6 @@ static void at91_ide_tf_read(ide_drive_t *drive, struct ide_cmd *cmd)
	struct ide_io_ports *io_ports = &hwif->io_ports;
	struct ide_taskfile *tf = &cmd->tf;

	if (cmd->ftf_flags & IDE_FTFLAG_IN_DATA) {
		u8 data[2];

		at91_ide_input_data(drive, cmd, data, 2);

		tf->data = data[0];
		tf->hob_data = data[1];
	}

	/* be sure we're looking at the low order bits */
	ide_mm_outb(ATA_DEVCTL_OBS, io_ports->ctl_addr);

+0 −15
Original line number Diff line number Diff line
@@ -54,12 +54,6 @@ static void h8300_tf_load(ide_drive_t *drive, struct ide_cmd *cmd)
	if (cmd->ftf_flags & IDE_FTFLAG_FLAGGED)
		HIHI = 0xFF;

	if (cmd->ftf_flags & IDE_FTFLAG_OUT_DATA) {
		u8 data[2] = { tf->data, tf->hob_data };

		h8300_output_data(drive, cmd, data, 2);
	}

	if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_FEATURE)
		outb(tf->hob_feature, io_ports->feature_addr);
	if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_NSECT)
@@ -93,15 +87,6 @@ static void h8300_tf_read(ide_drive_t *drive, struct ide_cmd *cmd)
	struct ide_io_ports *io_ports = &hwif->io_ports;
	struct ide_taskfile *tf = &cmd->tf;

	if (cmd->ftf_flags & IDE_FTFLAG_IN_DATA) {
		u8 data[2];

		h8300_input_data(drive, cmd, data, 2);

		tf->data = data[0];
		tf->hob_data = data[1];
	}

	/* be sure we're looking at the low order bits */
	outb(ATA_DEVCTL_OBS, io_ports->ctl_addr);

+0 −15
Original line number Diff line number Diff line
@@ -90,12 +90,6 @@ void ide_tf_load(ide_drive_t *drive, struct ide_cmd *cmd)
	if (cmd->ftf_flags & IDE_FTFLAG_FLAGGED)
		HIHI = 0xFF;

	if (cmd->ftf_flags & IDE_FTFLAG_OUT_DATA) {
		u8 data[2] = { tf->data, tf->hob_data };

		ide_output_data(drive, cmd, data, 2);
	}

	if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_FEATURE)
		tf_outb(tf->hob_feature, io_ports->feature_addr);
	if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_NSECT)
@@ -141,15 +135,6 @@ void ide_tf_read(ide_drive_t *drive, struct ide_cmd *cmd)
		tf_inb  = ide_inb;
	}

	if (cmd->ftf_flags & IDE_FTFLAG_IN_DATA) {
		u8 data[2];

		ide_input_data(drive, cmd, data, 2);

		tf->data = data[0];
		tf->hob_data = data[1];
	}

	/* be sure we're looking at the low order bits */
	tf_outb(ATA_DEVCTL_OBS, io_ports->ctl_addr);

+11 −1
Original line number Diff line number Diff line
@@ -73,6 +73,7 @@ EXPORT_SYMBOL_GPL(ide_end_rq);

void ide_complete_cmd(ide_drive_t *drive, struct ide_cmd *cmd, u8 stat, u8 err)
{
	const struct ide_tp_ops *tp_ops = drive->hwif->tp_ops;
	struct ide_taskfile *tf = &cmd->tf;
	struct request *rq = cmd->rq;
	u8 tf_cmd = tf->command;
@@ -80,7 +81,16 @@ void ide_complete_cmd(ide_drive_t *drive, struct ide_cmd *cmd, u8 stat, u8 err)
	tf->error = err;
	tf->status = stat;

	drive->hwif->tp_ops->tf_read(drive, cmd);
	if (cmd->ftf_flags & IDE_FTFLAG_IN_DATA) {
		u8 data[2];

		tp_ops->input_data(drive, cmd, data, 2);

		tf->data = data[0];
		tf->hob_data = data[1];
	}

	tp_ops->tf_read(drive, cmd);

	if ((cmd->tf_flags & IDE_TFLAG_CUSTOM_HANDLER) &&
	    tf_cmd == ATA_CMD_IDLEIMMEDIATE) {
+6 −0
Original line number Diff line number Diff line
@@ -82,6 +82,12 @@ ide_startstop_t do_rw_taskfile(ide_drive_t *drive, struct ide_cmd *orig_cmd)
		ide_tf_dump(drive->name, tf);
		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 };

			tp_ops->output_data(drive, cmd, data, 2);
		}
		tp_ops->tf_load(drive, cmd);
	}

Loading