aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
authorTejun Heo <htejun@gmail.com>2007-02-01 01:06:36 -0500
committerJeff Garzik <jeff@garzik.org>2007-02-09 17:39:38 -0500
commit0d5ff566779f894ca9937231a181eb31e4adff0e (patch)
treed1c7495c932581c1d41aa7f0fdb303348da49106 /include/linux
parent1a68ff13c8a9b517de3fd4187dc525412a6eba1b (diff)
libata: convert to iomap
Convert libata core layer and LLDs to use iomap. * managed iomap is used. Pointer to pcim_iomap_table() is cached at host->iomap and used through out LLDs. This basically replaces host->mmio_base. * if possible, pcim_iomap_regions() is used Most iomap operation conversions are taken from Jeff Garzik <jgarzik@pobox.com>'s iomap branch. Signed-off-by: Tejun Heo <htejun@gmail.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/libata.h68
1 files changed, 28 insertions, 40 deletions
diff --git a/include/linux/libata.h b/include/linux/libata.h
index cebbcc8d45fd..308bb8cbe50f 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -348,21 +348,21 @@ typedef int (*ata_reset_fn_t)(struct ata_port *ap, unsigned int *classes);
348typedef void (*ata_postreset_fn_t)(struct ata_port *ap, unsigned int *classes); 348typedef void (*ata_postreset_fn_t)(struct ata_port *ap, unsigned int *classes);
349 349
350struct ata_ioports { 350struct ata_ioports {
351 unsigned long cmd_addr; 351 void __iomem *cmd_addr;
352 unsigned long data_addr; 352 void __iomem *data_addr;
353 unsigned long error_addr; 353 void __iomem *error_addr;
354 unsigned long feature_addr; 354 void __iomem *feature_addr;
355 unsigned long nsect_addr; 355 void __iomem *nsect_addr;
356 unsigned long lbal_addr; 356 void __iomem *lbal_addr;
357 unsigned long lbam_addr; 357 void __iomem *lbam_addr;
358 unsigned long lbah_addr; 358 void __iomem *lbah_addr;
359 unsigned long device_addr; 359 void __iomem *device_addr;
360 unsigned long status_addr; 360 void __iomem *status_addr;
361 unsigned long command_addr; 361 void __iomem *command_addr;
362 unsigned long altstatus_addr; 362 void __iomem *altstatus_addr;
363 unsigned long ctl_addr; 363 void __iomem *ctl_addr;
364 unsigned long bmdma_addr; 364 void __iomem *bmdma_addr;
365 unsigned long scr_addr; 365 void __iomem *scr_addr;
366}; 366};
367 367
368struct ata_probe_ent { 368struct ata_probe_ent {
@@ -381,7 +381,7 @@ struct ata_probe_ent {
381 unsigned int irq_flags; 381 unsigned int irq_flags;
382 unsigned long port_flags; 382 unsigned long port_flags;
383 unsigned long _host_flags; 383 unsigned long _host_flags;
384 void __iomem *mmio_base; 384 void __iomem * const *iomap;
385 void *private_data; 385 void *private_data;
386 386
387 /* port_info for the secondary port. Together with irq2, it's 387 /* port_info for the secondary port. Together with irq2, it's
@@ -398,7 +398,7 @@ struct ata_host {
398 struct device *dev; 398 struct device *dev;
399 unsigned long irq; 399 unsigned long irq;
400 unsigned long irq2; 400 unsigned long irq2;
401 void __iomem *mmio_base; 401 void __iomem * const *iomap;
402 unsigned int n_ports; 402 unsigned int n_ports;
403 void *private_data; 403 void *private_data;
404 const struct ata_port_operations *ops; 404 const struct ata_port_operations *ops;
@@ -768,12 +768,10 @@ extern u8 ata_altstatus(struct ata_port *ap);
768extern void ata_exec_command(struct ata_port *ap, const struct ata_taskfile *tf); 768extern void ata_exec_command(struct ata_port *ap, const struct ata_taskfile *tf);
769extern int ata_port_start (struct ata_port *ap); 769extern int ata_port_start (struct ata_port *ap);
770extern irqreturn_t ata_interrupt (int irq, void *dev_instance); 770extern irqreturn_t ata_interrupt (int irq, void *dev_instance);
771extern void ata_mmio_data_xfer(struct ata_device *adev, unsigned char *buf, 771extern void ata_data_xfer(struct ata_device *adev, unsigned char *buf,
772 unsigned int buflen, int write_data); 772 unsigned int buflen, int write_data);
773extern void ata_pio_data_xfer(struct ata_device *adev, unsigned char *buf, 773extern void ata_data_xfer_noirq(struct ata_device *adev, unsigned char *buf,
774 unsigned int buflen, int write_data); 774 unsigned int buflen, int write_data);
775extern void ata_pio_data_xfer_noirq(struct ata_device *adev, unsigned char *buf,
776 unsigned int buflen, int write_data);
777extern void ata_qc_prep(struct ata_queued_cmd *qc); 775extern void ata_qc_prep(struct ata_queued_cmd *qc);
778extern void ata_noop_qc_prep(struct ata_queued_cmd *qc); 776extern void ata_noop_qc_prep(struct ata_queued_cmd *qc);
779extern unsigned int ata_qc_issue_prot(struct ata_queued_cmd *qc); 777extern unsigned int ata_qc_issue_prot(struct ata_queued_cmd *qc);
@@ -1084,10 +1082,9 @@ static inline u8 ata_wait_idle(struct ata_port *ap)
1084 u8 status = ata_busy_wait(ap, ATA_BUSY | ATA_DRQ, 1000); 1082 u8 status = ata_busy_wait(ap, ATA_BUSY | ATA_DRQ, 1000);
1085 1083
1086 if (status != 0xff && (status & (ATA_BUSY | ATA_DRQ))) { 1084 if (status != 0xff && (status & (ATA_BUSY | ATA_DRQ))) {
1087 unsigned long l = ap->ioaddr.status_addr;
1088 if (ata_msg_warn(ap)) 1085 if (ata_msg_warn(ap))
1089 printk(KERN_WARNING "ATA: abnormal status 0x%X on port 0x%lX\n", 1086 printk(KERN_WARNING "ATA: abnormal status 0x%X on port 0x%p\n",
1090 status, l); 1087 status, ap->ioaddr.status_addr);
1091 } 1088 }
1092 1089
1093 return status; 1090 return status;
@@ -1172,20 +1169,11 @@ static inline u8 ata_irq_ack(struct ata_port *ap, unsigned int chk_drq)
1172 printk(KERN_ERR "abnormal status 0x%X\n", status); 1169 printk(KERN_ERR "abnormal status 0x%X\n", status);
1173 1170
1174 /* get controller status; clear intr, err bits */ 1171 /* get controller status; clear intr, err bits */
1175 if (ap->flags & ATA_FLAG_MMIO) { 1172 host_stat = ioread8(ap->ioaddr.bmdma_addr + ATA_DMA_STATUS);
1176 void __iomem *mmio = (void __iomem *) ap->ioaddr.bmdma_addr; 1173 iowrite8(host_stat | ATA_DMA_INTR | ATA_DMA_ERR,
1177 host_stat = readb(mmio + ATA_DMA_STATUS); 1174 ap->ioaddr.bmdma_addr + ATA_DMA_STATUS);
1178 writeb(host_stat | ATA_DMA_INTR | ATA_DMA_ERR, 1175
1179 mmio + ATA_DMA_STATUS); 1176 post_stat = ioread8(ap->ioaddr.bmdma_addr + ATA_DMA_STATUS);
1180
1181 post_stat = readb(mmio + ATA_DMA_STATUS);
1182 } else {
1183 host_stat = inb(ap->ioaddr.bmdma_addr + ATA_DMA_STATUS);
1184 outb(host_stat | ATA_DMA_INTR | ATA_DMA_ERR,
1185 ap->ioaddr.bmdma_addr + ATA_DMA_STATUS);
1186
1187 post_stat = inb(ap->ioaddr.bmdma_addr + ATA_DMA_STATUS);
1188 }
1189 1177
1190 if (ata_msg_intr(ap)) 1178 if (ata_msg_intr(ap))
1191 printk(KERN_INFO "%s: irq ack: host_stat 0x%X, new host_stat 0x%X, drv_stat 0x%X\n", 1179 printk(KERN_INFO "%s: irq ack: host_stat 0x%X, new host_stat 0x%X, drv_stat 0x%X\n",