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

Commit d1881207 authored by Geert Uytterhoeven's avatar Geert Uytterhoeven Committed by Bartlomiej Zolnierkiewicz
Browse files

ide: falconide/q40ide - Use __ide_mm_{in,out}sw() for data



Both of commits f94116ae ("ide: cleanup
<asm-m68k/ide.h>") and 15a453a9 ("ide: include
<asm/ide.h> only when needed") break falconide:

| Uniform Multi-Platform E-IDE driver
| ide: Falcon IDE controller
| Probing IDE interface ide0...
| hda: Sarge m68k, ATA DISK drive
| ide0 at 0xfff00000 on irq 15 (serialized)
| ide-gd driver 1.18
| hda: max request size: 128KiB
| hda: 2118816 sectors (1084 MB) w/256KiB Cache, CHS=2102/16/63
|  hda:<4>hda: lost interrupt

This happens because falconide relies on {in,out}sw() being redefined in
<asm/ide.h>, as included by <linux/ide.h>, which is no longer the case.
Use __ide_mm_{in,out}sw() from <asm/ide.h> instead, just like
ide_{in,out}put_data() do.

The same problem seems to exist in q40ide.

Signed-off-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
parent aa07573b
Loading
Loading
Loading
Loading
+9 −4
Original line number Original line Diff line number Diff line
@@ -20,6 +20,7 @@
#include <asm/atarihw.h>
#include <asm/atarihw.h>
#include <asm/atariints.h>
#include <asm/atariints.h>
#include <asm/atari_stdma.h>
#include <asm/atari_stdma.h>
#include <asm/ide.h>


#define DRV_NAME "falconide"
#define DRV_NAME "falconide"


@@ -67,8 +68,10 @@ static void falconide_input_data(ide_drive_t *drive, struct ide_cmd *cmd,
{
{
	unsigned long data_addr = drive->hwif->io_ports.data_addr;
	unsigned long data_addr = drive->hwif->io_ports.data_addr;


	if (drive->media == ide_disk && cmd && (cmd->tf_flags & IDE_TFLAG_FS))
	if (drive->media == ide_disk && cmd && (cmd->tf_flags & IDE_TFLAG_FS)) {
		return insw(data_addr, buf, (len + 1) / 2);
		__ide_mm_insw(data_addr, buf, (len + 1) / 2);
		return;
	}


	raw_insw_swapw((u16 *)data_addr, buf, (len + 1) / 2);
	raw_insw_swapw((u16 *)data_addr, buf, (len + 1) / 2);
}
}
@@ -78,8 +81,10 @@ static void falconide_output_data(ide_drive_t *drive, struct ide_cmd *cmd,
{
{
	unsigned long data_addr = drive->hwif->io_ports.data_addr;
	unsigned long data_addr = drive->hwif->io_ports.data_addr;


	if (drive->media == ide_disk && cmd && (cmd->tf_flags & IDE_TFLAG_FS))
	if (drive->media == ide_disk && cmd && (cmd->tf_flags & IDE_TFLAG_FS)) {
		return outsw(data_addr, buf, (len + 1) / 2);
		__ide_mm_outsw(data_addr, buf, (len + 1) / 2);
		return;
	}


	raw_outsw_swapw((u16 *)data_addr, buf, (len + 1) / 2);
	raw_outsw_swapw((u16 *)data_addr, buf, (len + 1) / 2);
}
}
+10 −4
Original line number Original line Diff line number Diff line
@@ -16,6 +16,8 @@
#include <linux/blkdev.h>
#include <linux/blkdev.h>
#include <linux/ide.h>
#include <linux/ide.h>


#include <asm/ide.h>

    /*
    /*
     *  Bases of the IDE interfaces
     *  Bases of the IDE interfaces
     */
     */
@@ -77,8 +79,10 @@ static void q40ide_input_data(ide_drive_t *drive, struct ide_cmd *cmd,
{
{
	unsigned long data_addr = drive->hwif->io_ports.data_addr;
	unsigned long data_addr = drive->hwif->io_ports.data_addr;


	if (drive->media == ide_disk && cmd && (cmd->tf_flags & IDE_TFLAG_FS))
	if (drive->media == ide_disk && cmd && (cmd->tf_flags & IDE_TFLAG_FS)) {
		return insw(data_addr, buf, (len + 1) / 2);
		__ide_mm_insw(data_addr, buf, (len + 1) / 2);
		return;
	}


	raw_insw_swapw((u16 *)data_addr, buf, (len + 1) / 2);
	raw_insw_swapw((u16 *)data_addr, buf, (len + 1) / 2);
}
}
@@ -88,8 +92,10 @@ static void q40ide_output_data(ide_drive_t *drive, struct ide_cmd *cmd,
{
{
	unsigned long data_addr = drive->hwif->io_ports.data_addr;
	unsigned long data_addr = drive->hwif->io_ports.data_addr;


	if (drive->media == ide_disk && cmd && (cmd->tf_flags & IDE_TFLAG_FS))
	if (drive->media == ide_disk && cmd && (cmd->tf_flags & IDE_TFLAG_FS)) {
		return outsw(data_addr, buf, (len + 1) / 2);
		__ide_mm_outsw(data_addr, buf, (len + 1) / 2);
		return;
	}


	raw_outsw_swapw((u16 *)data_addr, buf, (len + 1) / 2);
	raw_outsw_swapw((u16 *)data_addr, buf, (len + 1) / 2);
}
}