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 <[EMAIL PROTECTED]>

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 [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to