#include <linux/kernel.h>
#include <linux/export.h>
#if defined(CONFIG_ARM) || defined(CONFIG_M68K) || defined(CONFIG_MIPS) || \
defined(CONFIG_PARISC) || defined(CONFIG_PPC) || defined(CONFIG_SPARC)
#include <asm-generic/ide_iops.h>
static u8 ide_inb(unsigned long port)
static void ide_outb(u8 val, unsigned long port)
static u8 ide_mm_inb(unsigned long port)
return (u8) readb((void __iomem *) port);
static void ide_mm_outb(u8 value, unsigned long port)
writeb(value, (void __iomem *) port);
void ide_exec_command(ide_hwif_t *hwif, u8 cmd)
if (hwif->host_flags & IDE_HFLAG_MMIO)
writeb(cmd, (void __iomem *)hwif->io_ports.command_addr);
outb(cmd, hwif->io_ports.command_addr);
EXPORT_SYMBOL_GPL(ide_exec_command);
u8 ide_read_status(ide_hwif_t *hwif)
if (hwif->host_flags & IDE_HFLAG_MMIO)
return readb((void __iomem *)hwif->io_ports.status_addr);
return inb(hwif->io_ports.status_addr);
EXPORT_SYMBOL_GPL(ide_read_status);
u8 ide_read_altstatus(ide_hwif_t *hwif)
if (hwif->host_flags & IDE_HFLAG_MMIO)
return readb((void __iomem *)hwif->io_ports.ctl_addr);
return inb(hwif->io_ports.ctl_addr);
EXPORT_SYMBOL_GPL(ide_read_altstatus);
void ide_write_devctl(ide_hwif_t *hwif, u8 ctl)
if (hwif->host_flags & IDE_HFLAG_MMIO)
writeb(ctl, (void __iomem *)hwif->io_ports.ctl_addr);
outb(ctl, hwif->io_ports.ctl_addr);
EXPORT_SYMBOL_GPL(ide_write_devctl);
void ide_dev_select(ide_drive_t *drive)
ide_hwif_t *hwif = drive->hwif;
u8 select = drive->select | ATA_DEVICE_OBS;
if (hwif->host_flags & IDE_HFLAG_MMIO)
writeb(select, (void __iomem *)hwif->io_ports.device_addr);
outb(select, hwif->io_ports.device_addr);
EXPORT_SYMBOL_GPL(ide_dev_select);
void ide_tf_load(ide_drive_t *drive, struct ide_taskfile *tf, u8 valid)
ide_hwif_t *hwif = drive->hwif;
struct ide_io_ports *io_ports = &hwif->io_ports;