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

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
...@@ -20,6 +20,7 @@ ...@@ -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, ...@@ -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, ...@@ -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);
} }
......
...@@ -16,6 +16,8 @@ ...@@ -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, ...@@ -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, ...@@ -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);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment