282
283 if (io_32bit) {
284 unsigned long uninitialized_var(flags);
285
286 if ((io_32bit & 2) && !mmio) {
287 local_irq_save(flags);
288 ata_vlb_sync(io_ports->nsect_addr);
289 }
290
291 if (mmio)
292 __ide_mm_insl((void __iomem *)data_addr, buf, len / 4);
293 else
294 insl(data_addr, buf, len / 4);
295
296 if ((io_32bit & 2) && !mmio)
297 local_irq_restore(flags);
298
299 if ((len & 3) >= 2) {
300 if (mmio)
301 __ide_mm_insw((void __iomem *)data_addr,
302 (u8 *)buf + (len & ~3), 1);
303 else
304 insw(data_addr, (u8 *)buf + (len & ~3), 1);
305 }
306 } else {
307 if (mmio)
308 __ide_mm_insw((void __iomem *)data_addr, buf, len / 2);
309 else
310 insw(data_addr, buf, len / 2);
311 }
312}
313EXPORT_SYMBOL_GPL(ide_input_data);
314
315
316
317
318void ide_output_data(ide_drive_t *drive, struct request *rq, void *buf,
319 unsigned int len)
320{
321 ide_hwif_t *hwif = drive->hwif;
322 struct ide_io_ports *io_ports = &hwif->io_ports;