Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ide: remove ->INS{W,L} and ->OUTS{W,L} methods

* Use ins{w,l}()/outs{w,l}() and __ide_mm_ins{w,l}()/__ide_mm_outs{w,l}()
directly in ata_{in,out}put_data() (by using IDE_HFLAG_MMIO host flag to
decide which I/O ops are required).

* Remove no longer needed ->INS{W,L} and ->OUTS{W,L} methods (ide-h8300,
au1xxx-ide and scc_pata implement their own ->{in,out}put_data methods).

There should be no functional changes caused by this patch.

Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>

+50 -83
-4
drivers/ide/h8300/ide-h8300.c
··· 90 90 hwif->output_data = h8300_output_data; 91 91 92 92 hwif->OUTW = mm_outw; 93 - hwif->OUTSW = mm_outsw; 94 93 hwif->INW = mm_inw; 95 - hwif->INSW = mm_insw; 96 - hwif->OUTSL = NULL; 97 - hwif->INSL = NULL; 98 94 } 99 95 100 96 static int __init h8300_ide_init(void)
+50 -68
drivers/ide/ide-iops.c
··· 42 42 return (u16) inw(port); 43 43 } 44 44 45 - static void ide_insw (unsigned long port, void *addr, u32 count) 46 - { 47 - insw(port, addr, count); 48 - } 49 - 50 - static void ide_insl (unsigned long port, void *addr, u32 count) 51 - { 52 - insl(port, addr, count); 53 - } 54 - 55 45 static void ide_outb (u8 val, unsigned long port) 56 46 { 57 47 outb(val, port); ··· 57 67 outw(val, port); 58 68 } 59 69 60 - static void ide_outsw (unsigned long port, void *addr, u32 count) 61 - { 62 - outsw(port, addr, count); 63 - } 64 - 65 - static void ide_outsl (unsigned long port, void *addr, u32 count) 66 - { 67 - outsl(port, addr, count); 68 - } 69 - 70 70 void default_hwif_iops (ide_hwif_t *hwif) 71 71 { 72 72 hwif->OUTB = ide_outb; 73 73 hwif->OUTBSYNC = ide_outbsync; 74 74 hwif->OUTW = ide_outw; 75 - hwif->OUTSW = ide_outsw; 76 - hwif->OUTSL = ide_outsl; 77 75 hwif->INB = ide_inb; 78 76 hwif->INW = ide_inw; 79 - hwif->INSW = ide_insw; 80 - hwif->INSL = ide_insl; 81 77 } 82 78 83 79 /* ··· 78 102 static u16 ide_mm_inw (unsigned long port) 79 103 { 80 104 return (u16) readw((void __iomem *) port); 81 - } 82 - 83 - static void ide_mm_insw (unsigned long port, void *addr, u32 count) 84 - { 85 - __ide_mm_insw((void __iomem *) port, addr, count); 86 - } 87 - 88 - static void ide_mm_insl (unsigned long port, void *addr, u32 count) 89 - { 90 - __ide_mm_insl((void __iomem *) port, addr, count); 91 105 } 92 106 93 107 static void ide_mm_outb (u8 value, unsigned long port) ··· 95 129 writew(value, (void __iomem *) port); 96 130 } 97 131 98 - static void ide_mm_outsw (unsigned long port, void *addr, u32 count) 99 - { 100 - __ide_mm_outsw((void __iomem *) port, addr, count); 101 - } 102 - 103 - static void ide_mm_outsl (unsigned long port, void *addr, u32 count) 104 - { 105 - __ide_mm_outsl((void __iomem *) port, addr, count); 106 - } 107 - 108 132 void default_hwif_mmiops (ide_hwif_t *hwif) 109 133 { 110 134 hwif->OUTB = ide_mm_outb; ··· 102 146 this one is controller specific! */ 103 147 hwif->OUTBSYNC = ide_mm_outbsync; 104 148 hwif->OUTW = ide_mm_outw; 105 - hwif->OUTSW = ide_mm_outsw; 106 - hwif->OUTSL = ide_mm_outsl; 107 149 hwif->INB = ide_mm_inb; 108 150 hwif->INW = ide_mm_inw; 109 - hwif->INSW = ide_mm_insw; 110 - hwif->INSL = ide_mm_insl; 111 151 } 112 152 113 153 EXPORT_SYMBOL(default_hwif_mmiops); ··· 155 203 struct ide_io_ports *io_ports = &hwif->io_ports; 156 204 unsigned long data_addr = io_ports->data_addr; 157 205 u8 io_32bit = drive->io_32bit; 206 + u8 mmio = (hwif->host_flags & IDE_HFLAG_MMIO) ? 1 : 0; 158 207 159 208 len++; 160 209 161 210 if (io_32bit) { 162 - if (io_32bit & 2) { 163 - unsigned long flags; 211 + unsigned long uninitialized_var(flags); 164 212 213 + if (io_32bit & 2) { 165 214 local_irq_save(flags); 166 215 ata_vlb_sync(drive, io_ports->nsect_addr); 167 - hwif->INSL(data_addr, buf, len / 4); 168 - local_irq_restore(flags); 169 - } else 170 - hwif->INSL(data_addr, buf, len / 4); 216 + } 171 217 172 - if ((len & 3) >= 2) 173 - hwif->INSW(data_addr, (u8 *)buf + (len & ~3), 1); 174 - } else 175 - hwif->INSW(data_addr, buf, len / 2); 218 + if (mmio) 219 + __ide_mm_insl((void __iomem *)data_addr, buf, len / 4); 220 + else 221 + insl(data_addr, buf, len / 4); 222 + 223 + if (io_32bit & 2) 224 + local_irq_restore(flags); 225 + 226 + if ((len & 3) >= 2) { 227 + if (mmio) 228 + __ide_mm_insw((void __iomem *)data_addr, 229 + (u8 *)buf + (len & ~3), 1); 230 + else 231 + insw(data_addr, (u8 *)buf + (len & ~3), 1); 232 + } 233 + } else { 234 + if (mmio) 235 + __ide_mm_insw((void __iomem *)data_addr, buf, len / 2); 236 + else 237 + insw(data_addr, buf, len / 2); 238 + } 176 239 } 177 240 178 241 /* ··· 200 233 struct ide_io_ports *io_ports = &hwif->io_ports; 201 234 unsigned long data_addr = io_ports->data_addr; 202 235 u8 io_32bit = drive->io_32bit; 236 + u8 mmio = (hwif->host_flags & IDE_HFLAG_MMIO) ? 1 : 0; 203 237 204 238 if (io_32bit) { 205 - if (io_32bit & 2) { 206 - unsigned long flags; 239 + unsigned long uninitialized_var(flags); 207 240 241 + if (io_32bit & 2) { 208 242 local_irq_save(flags); 209 243 ata_vlb_sync(drive, io_ports->nsect_addr); 210 - hwif->OUTSL(data_addr, buf, len / 4); 211 - local_irq_restore(flags); 212 - } else 213 - hwif->OUTSL(data_addr, buf, len / 4); 244 + } 214 245 215 - if ((len & 3) >= 2) 216 - hwif->OUTSW(data_addr, (u8 *)buf + (len & ~3), 1); 217 - } else 218 - hwif->OUTSW(data_addr, buf, len / 2); 246 + if (mmio) 247 + __ide_mm_outsl((void __iomem *)data_addr, buf, len / 4); 248 + else 249 + outsl(data_addr, buf, len / 4); 250 + 251 + if (io_32bit & 2) 252 + local_irq_restore(flags); 253 + 254 + if ((len & 3) >= 2) { 255 + if (mmio) 256 + __ide_mm_outsw((void __iomem *)data_addr, 257 + (u8 *)buf + (len & ~3), 1); 258 + else 259 + outsw(data_addr, (u8 *)buf + (len & ~3), 1); 260 + } 261 + } else { 262 + if (mmio) 263 + __ide_mm_outsw((void __iomem *)data_addr, buf, len / 2); 264 + else 265 + outsw(data_addr, buf, len / 2); 266 + } 219 267 } 220 268 221 269 void default_hwif_transport(ide_hwif_t *hwif)
-3
drivers/ide/mips/au1xxx-ide.c
··· 609 609 #ifdef CONFIG_BLK_DEV_IDE_AU1XXX_PIO_DBDMA 610 610 hwif->input_data = au1xxx_input_data; 611 611 hwif->output_data = au1xxx_output_data; 612 - 613 - hwif->INSW = auide_insw; 614 - hwif->OUTSW = auide_outsw; 615 612 #endif 616 613 hwif->select_data = 0; /* no chipset-specific code */ 617 614 hwif->config_data = 0; /* no chipset-specific code */
-4
drivers/ide/pci/scc_pata.c
··· 669 669 670 670 hwif->INB = scc_ide_inb; 671 671 hwif->INW = scc_ide_inw; 672 - hwif->INSW = scc_ide_insw; 673 - hwif->INSL = scc_ide_insl; 674 672 hwif->OUTB = scc_ide_outb; 675 673 hwif->OUTBSYNC = scc_ide_outbsync; 676 674 hwif->OUTW = scc_ide_outw; 677 - hwif->OUTSW = scc_ide_outsw; 678 - hwif->OUTSL = scc_ide_outsl; 679 675 680 676 hwif->dma_base = dma_base; 681 677 hwif->config_data = ports->ctl;
-4
include/linux/ide.h
··· 475 475 void (*OUTB)(u8 addr, unsigned long port); 476 476 void (*OUTBSYNC)(ide_drive_t *drive, u8 addr, unsigned long port); 477 477 void (*OUTW)(u16 addr, unsigned long port); 478 - void (*OUTSW)(unsigned long port, void *addr, u32 count); 479 - void (*OUTSL)(unsigned long port, void *addr, u32 count); 480 478 481 479 u8 (*INB)(unsigned long port); 482 480 u16 (*INW)(unsigned long port); 483 - void (*INSW)(unsigned long port, void *addr, u32 count); 484 - void (*INSL)(unsigned long port, void *addr, u32 count); 485 481 486 482 /* dma physical region descriptor table (cpu view) */ 487 483 unsigned int *dmatable_cpu;