Add an iomap_name() function which translates an I/O map into a string to print Use it for the Libata layer For now we use 0xXXXX for I/O and 0xXXXXXXXX for MMIO. I'm assuming that eventually some other platforms will want to use their own iomap_name() and we can add ARCH_HAVE_IOMAP_NAME later as such a platform needs it. Signed-off-by: Alan Cox <alan@xxxxxxxxxx> diff -u --new-file --exclude-from /usr/src/exclude --recursive linux.vanilla-2.6.22-rc6-mm1/drivers/ata/libata-core.c linux-2.6.22-rc6-mm1/drivers/ata/libata-core.c --- linux.vanilla-2.6.22-rc6-mm1/drivers/ata/libata-core.c 2007-07-02 20:50:11.000000000 +0100 +++ linux-2.6.22-rc6-mm1/drivers/ata/libata-core.c 2007-07-02 21:36:20.000000000 +0100 @@ -6292,6 +6425,7 @@ int ata_host_register(struct ata_host *host, struct scsi_host_template *sht) { int i, rc; + char ctlbuf[IOMAP_NAMELEN], cmdbuf[IOMAP_NAMELEN], dmabuf[IOMAP_NAMELEN]; /* host must have been started */ if (!(host->flags & ATA_HOST_STARTED)) { @@ -6348,13 +6482,13 @@ /* print per-port info to dmesg */ if (!ata_port_is_dummy(ap)) - ata_port_printk(ap, KERN_INFO, "%cATA max %s cmd 0x%p " - "ctl 0x%p bmdma 0x%p irq %d\n", + ata_port_printk(ap, KERN_INFO, "%cATA max %s cmd %s " + "ctl %s bmdma %s irq %d\n", (ap->flags & ATA_FLAG_SATA) ? 'S' : 'P', ata_mode_string(xfer_mask), - ap->ioaddr.cmd_addr, - ap->ioaddr.ctl_addr, - ap->ioaddr.bmdma_addr, + iomap_name(ap->ioaddr.cmd_addr, cmdbuf, sizeof(cmdbuf)), + iomap_name(ap->ioaddr.ctl_addr, ctlbuf, sizeof(ctlbuf)), + iomap_name(ap->ioaddr.bmdma_addr, dmabuf, sizeof(dmabuf)), irq_line); else ata_port_printk(ap, KERN_INFO, "DUMMY\n"); diff -u --new-file --exclude-from /usr/src/exclude --recursive linux.vanilla-2.6.22-rc6-mm1/include/linux/libata.h linux-2.6.22-rc6-mm1/include/linux/libata.h --- linux.vanilla-2.6.22-rc6-mm1/include/linux/libata.h 2007-07-02 20:50:14.000000000 +0100 +++ linux-2.6.22-rc6-mm1/include/linux/libata.h 2007-07-02 21:29:18.000000000 +0100 @@ -1112,11 +1124,14 @@ static inline u8 ata_wait_idle(struct ata_port *ap) { + char buf[IOMAP_NAMELEN]; u8 status = ata_busy_wait(ap, ATA_BUSY | ATA_DRQ, 1000); - if (status != 0xff && (status & (ATA_BUSY | ATA_DRQ))) - DPRINTK("ATA: abnormal status 0x%X on port 0x%p\n", - status, ap->ioaddr.status_addr); + if (status != 0xff && (status & (ATA_BUSY | ATA_DRQ))) { + if (ata_msg_warn(ap)) + printk(KERN_WARNING "ATA: abnormal status 0x%X on port %s\n", + status, iomap_name(ap->ioaddr.status_addr, buf, sizeof(buf))); + } return status; } diff -u --new-file --exclude-from /usr/src/exclude --recursive linux.vanilla-2.6.22-rc6-mm1/lib/iomap.c linux-2.6.22-rc6-mm1/lib/iomap.c --- linux.vanilla-2.6.22-rc6-mm1/lib/iomap.c 2007-07-02 20:49:03.000000000 +0100 +++ linux-2.6.22-rc6-mm1/lib/iomap.c 2007-07-02 21:30:38.000000000 +0100 @@ -268,3 +268,15 @@ } EXPORT_SYMBOL(pci_iomap); EXPORT_SYMBOL(pci_iounmap); + +char *iomap_name(void __iomem *port, char *buf, size_t len) +{ + if (port == NULL) { + snprintf(buf, len, "None"); + return buf; + } + IO_COND(port, snprintf(buf, len, "0x%04lx", port), snprintf(buf, len, "%08lx", port)); + return buf; +} + +EXPORT_SYMBOL(iomap_name); diff -u --new-file --exclude-from /usr/src/exclude --recursive linux.vanilla-2.6.22-rc6-mm1/include/asm-generic/iomap.h linux-2.6.22-rc6-mm1/include/asm-generic/iomap.h --- linux.vanilla-2.6.22-rc6-mm1/include/asm-generic/iomap.h 2007-07-02 20:47:33.000000000 +0100 +++ linux-2.6.22-rc6-mm1/include/asm-generic/iomap.h 2007-07-02 21:25:46.000000000 +0100 @@ -65,4 +65,9 @@ extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max); extern void pci_iounmap(struct pci_dev *dev, void __iomem *); +/* Convert an iomap to text for this platform */ +extern char *iomap_name(void __iomem *addr, char *buf, size_t len); +#define IOMAP_NAMELEN 12 + + #endif - To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html