diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/libata.h | 68 |
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); | |||
| 348 | typedef void (*ata_postreset_fn_t)(struct ata_port *ap, unsigned int *classes); | 348 | typedef void (*ata_postreset_fn_t)(struct ata_port *ap, unsigned int *classes); |
| 349 | 349 | ||
| 350 | struct ata_ioports { | 350 | struct 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 | ||
| 368 | struct ata_probe_ent { | 368 | struct 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); | |||
| 768 | extern void ata_exec_command(struct ata_port *ap, const struct ata_taskfile *tf); | 768 | extern void ata_exec_command(struct ata_port *ap, const struct ata_taskfile *tf); |
| 769 | extern int ata_port_start (struct ata_port *ap); | 769 | extern int ata_port_start (struct ata_port *ap); |
| 770 | extern irqreturn_t ata_interrupt (int irq, void *dev_instance); | 770 | extern irqreturn_t ata_interrupt (int irq, void *dev_instance); |
| 771 | extern void ata_mmio_data_xfer(struct ata_device *adev, unsigned char *buf, | 771 | extern 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); |
| 773 | extern void ata_pio_data_xfer(struct ata_device *adev, unsigned char *buf, | 773 | extern 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); |
| 775 | extern void ata_pio_data_xfer_noirq(struct ata_device *adev, unsigned char *buf, | ||
| 776 | unsigned int buflen, int write_data); | ||
| 777 | extern void ata_qc_prep(struct ata_queued_cmd *qc); | 775 | extern void ata_qc_prep(struct ata_queued_cmd *qc); |
| 778 | extern void ata_noop_qc_prep(struct ata_queued_cmd *qc); | 776 | extern void ata_noop_qc_prep(struct ata_queued_cmd *qc); |
| 779 | extern unsigned int ata_qc_issue_prot(struct ata_queued_cmd *qc); | 777 | extern 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", |
