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

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

ide-io-std: shorten ide_{in|out}put_data()



ide_{in|out|put_data() can be somewhat shortened by merging the paths doing
16-bit I/O...

Signed-off-by: default avatarSergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
parent 67625119
Loading
Loading
Loading
Loading
+28 −32
Original line number Original line Diff line number Diff line
@@ -216,11 +216,10 @@ void ide_input_data(ide_drive_t *drive, struct ide_cmd *cmd, void *buf,
	ide_hwif_t *hwif = drive->hwif;
	ide_hwif_t *hwif = drive->hwif;
	struct ide_io_ports *io_ports = &hwif->io_ports;
	struct ide_io_ports *io_ports = &hwif->io_ports;
	unsigned long data_addr = io_ports->data_addr;
	unsigned long data_addr = io_ports->data_addr;
	unsigned int words = (len + 1) >> 1;
	u8 io_32bit = drive->io_32bit;
	u8 io_32bit = drive->io_32bit;
	u8 mmio = (hwif->host_flags & IDE_HFLAG_MMIO) ? 1 : 0;
	u8 mmio = (hwif->host_flags & IDE_HFLAG_MMIO) ? 1 : 0;


	len++;

	if (io_32bit) {
	if (io_32bit) {
		unsigned long uninitialized_var(flags);
		unsigned long uninitialized_var(flags);


@@ -229,27 +228,26 @@ void ide_input_data(ide_drive_t *drive, struct ide_cmd *cmd, void *buf,
			ata_vlb_sync(io_ports->nsect_addr);
			ata_vlb_sync(io_ports->nsect_addr);
		}
		}


		words >>= 1;
		if (mmio)
		if (mmio)
			__ide_mm_insl((void __iomem *)data_addr, buf, len / 4);
			__ide_mm_insl((void __iomem *)data_addr, buf, words);
		else
		else
			insl(data_addr, buf, len / 4);
			insl(data_addr, buf, words);


		if ((io_32bit & 2) && !mmio)
		if ((io_32bit & 2) && !mmio)
			local_irq_restore(flags);
			local_irq_restore(flags);


		if ((len & 3) >= 2) {
		if (((len + 1) & 3) < 2)
			if (mmio)
			return;
				__ide_mm_insw((void __iomem *)data_addr,

						(u8 *)buf + (len & ~3), 1);
		buf += len & ~3;
			else
		words = 1;
				insw(data_addr, (u8 *)buf + (len & ~3), 1);
	}
	}
	} else {

	if (mmio)
	if (mmio)
			__ide_mm_insw((void __iomem *)data_addr, buf, len / 2);
		__ide_mm_insw((void __iomem *)data_addr, buf, words);
	else
	else
			insw(data_addr, buf, len / 2);
		insw(data_addr, buf, words);
	}
}
}
EXPORT_SYMBOL_GPL(ide_input_data);
EXPORT_SYMBOL_GPL(ide_input_data);


@@ -262,11 +260,10 @@ void ide_output_data(ide_drive_t *drive, struct ide_cmd *cmd, void *buf,
	ide_hwif_t *hwif = drive->hwif;
	ide_hwif_t *hwif = drive->hwif;
	struct ide_io_ports *io_ports = &hwif->io_ports;
	struct ide_io_ports *io_ports = &hwif->io_ports;
	unsigned long data_addr = io_ports->data_addr;
	unsigned long data_addr = io_ports->data_addr;
	unsigned int words = (len + 1) >> 1;
	u8 io_32bit = drive->io_32bit;
	u8 io_32bit = drive->io_32bit;
	u8 mmio = (hwif->host_flags & IDE_HFLAG_MMIO) ? 1 : 0;
	u8 mmio = (hwif->host_flags & IDE_HFLAG_MMIO) ? 1 : 0;


	len++;

	if (io_32bit) {
	if (io_32bit) {
		unsigned long uninitialized_var(flags);
		unsigned long uninitialized_var(flags);


@@ -275,27 +272,26 @@ void ide_output_data(ide_drive_t *drive, struct ide_cmd *cmd, void *buf,
			ata_vlb_sync(io_ports->nsect_addr);
			ata_vlb_sync(io_ports->nsect_addr);
		}
		}


		words >>= 1;
		if (mmio)
		if (mmio)
			__ide_mm_outsl((void __iomem *)data_addr, buf, len / 4);
			__ide_mm_outsl((void __iomem *)data_addr, buf, words);
		else
		else
			outsl(data_addr, buf, len / 4);
			outsl(data_addr, buf, words);


		if ((io_32bit & 2) && !mmio)
		if ((io_32bit & 2) && !mmio)
			local_irq_restore(flags);
			local_irq_restore(flags);


		if ((len & 3) >= 2) {
		if (((len + 1) & 3) < 2)
			if (mmio)
			return;
				__ide_mm_outsw((void __iomem *)data_addr,

						 (u8 *)buf + (len & ~3), 1);
		buf += len & ~3;
			else
		words = 1;
				outsw(data_addr, (u8 *)buf + (len & ~3), 1);
	}
	}
	} else {

	if (mmio)
	if (mmio)
			__ide_mm_outsw((void __iomem *)data_addr, buf, len / 2);
		__ide_mm_outsw((void __iomem *)data_addr, buf, words);
	else
	else
			outsw(data_addr, buf, len / 2);
		outsw(data_addr, buf, words);
	}
}
}
EXPORT_SYMBOL_GPL(ide_output_data);
EXPORT_SYMBOL_GPL(ide_output_data);