unsigned long base = (unsigned long)hwif->hwif_data;
 
        base += 0xA0 + r;
-       if (hwif->mmio)
+       if (hwif->host_flags & IDE_HFLAG_MMIO)
                base += hwif->channel << 6;
        else
                base += hwif->channel << 4;
        unsigned long base      = (unsigned long)hwif->hwif_data;
 
        base += 0xA0 + r;
-       if (hwif->mmio)
+       if (hwif->host_flags & IDE_HFLAG_MMIO)
                base += hwif->channel << 6;
        else
                base += hwif->channel << 4;
        unsigned long base      = (unsigned long)hwif->hwif_data;
        u8 scsc, mask           = 0;
 
-       scsc = sil_ioread8(dev, base + (hwif->mmio ? 0x4A : 0x8A));
+       base += (hwif->host_flags & IDE_HFLAG_MMIO) ? 0x4A : 0x8A;
+
+       scsc = sil_ioread8(dev, base);
 
        switch (scsc & 0x30) {
        case 0x10:      /* 133 */
        unsigned long tfaddr    = siimage_selreg(hwif,  0x02);
        unsigned long base      = (unsigned long)hwif->hwif_data;
        u8 tf_pio               = pio;
-       u8 addr_mask            = hwif->channel ? (hwif->mmio ? 0xF4 : 0x84)
-                                               : (hwif->mmio ? 0xB4 : 0x80);
+       u8 mmio                 = (hwif->host_flags & IDE_HFLAG_MMIO) ? 1 : 0;
+       u8 addr_mask            = hwif->channel ? (mmio ? 0xF4 : 0x84)
+                                               : (mmio ? 0xB4 : 0x80);
        u8 mode                 = 0;
        u8 unit                 = drive->select.b.unit;
 
        u16 ultra = 0, multi    = 0;
        u8 mode = 0, unit       = drive->select.b.unit;
        unsigned long base      = (unsigned long)hwif->hwif_data;
-       u8 scsc = 0, addr_mask  = hwif->channel ?
-                                       (hwif->mmio ? 0xF4 : 0x84) :
-                                       (hwif->mmio ? 0xB4 : 0x80);
+       u8 mmio                 = (hwif->host_flags & IDE_HFLAG_MMIO) ? 1 : 0;
+       u8 scsc = 0, addr_mask  = hwif->channel ? (mmio ? 0xF4 : 0x84)
+                                               : (mmio ? 0xB4 : 0x80);
        unsigned long ma        = siimage_seldev(drive, 0x08);
        unsigned long ua        = siimage_seldev(drive, 0x0C);
 
-       scsc  = sil_ioread8 (dev, base + (hwif->mmio ? 0x4A : 0x8A));
+       scsc  = sil_ioread8 (dev, base + (mmio ? 0x4A : 0x8A));
        mode  = sil_ioread8 (dev, base + addr_mask);
        multi = sil_ioread16(dev, ma);
        ultra = sil_ioread16(dev, ua);
 
 static int siimage_dma_test_irq(ide_drive_t *drive)
 {
-       if (drive->hwif->mmio)
+       if (drive->hwif->host_flags & IDE_HFLAG_MMIO)
                return siimage_mmio_dma_test_irq(drive);
        else
                return siimage_io_dma_test_irq(drive);
        hwif->irq = dev->irq;
 
        hwif->dma_base = (unsigned long)addr + (ch ? 0x08 : 0x00);
-
-       hwif->mmio = 1;
 }
 
 static int is_dev_seagate_sata(ide_drive_t *drive)