PATCH: clean up siimage, use generic mmio ops

From: Alan Cox (alan@lxorguk.ukuu.org.uk)
Date: Tue Feb 18 2003 - 13:34:00 EST


diff -u --new-file --recursive --exclude-from /usr/src/exclude linux-2.5.61/drivers/ide/pci/siimage.c linux-2.5.61-ac2/drivers/ide/pci/siimage.c
--- linux-2.5.61/drivers/ide/pci/siimage.c 2003-02-10 18:38:19.000000000 +0000
+++ linux-2.5.61-ac2/drivers/ide/pci/siimage.c 2003-02-18 18:06:19.000000000 +0000
@@ -1,5 +1,5 @@
 /*
- * linux/drivers/ide/siimage.c Version 1.01 Sept 11, 2002
+ * linux/drivers/ide/pci/siimage.c Version 1.02 Jan 30, 2003
  *
  * Copyright (C) 2001-2002 Andre Hedrick <andre@linux-ide.org>
  */
@@ -31,15 +31,15 @@
 {
         char *p = buf;
         u8 mmio = (pci_get_drvdata(dev) != NULL) ? 1 : 0;
- u32 bmdma = (mmio) ? ((u32) pci_get_drvdata(dev)) :
+ unsigned long bmdma = (mmio) ? ((unsigned long) pci_get_drvdata(dev)) :
                                     (pci_resource_start(dev, 4));
 
         p += sprintf(p, "\nController: %d\n", index);
         p += sprintf(p, "SiI%x Chipset.\n", dev->device);
         if (mmio)
- p += sprintf(p, "MMIO Base 0x%08x\n", bmdma);
- p += sprintf(p, "%s-DMA Base 0x%08x\n", (mmio)?"MMIO":"BM", bmdma);
- p += sprintf(p, "%s-DMA Base 0x%08x\n", (mmio)?"MMIO":"BM", bmdma+8);
+ p += sprintf(p, "MMIO Base 0x%lx\n", bmdma);
+ p += sprintf(p, "%s-DMA Base 0x%lx\n", (mmio)?"MMIO":"BM", bmdma);
+ p += sprintf(p, "%s-DMA Base 0x%lx\n", (mmio)?"MMIO":"BM", bmdma+8);
 
         p += sprintf(p, "--------------- Primary Channel "
                         "---------------- Secondary Channel "
@@ -248,9 +248,9 @@
 {
         u8 speed = ide_dma_speed(drive, siimage_ratemask(drive));
 
- config_chipset_for_pio(drive, (!(speed)));
+ config_chipset_for_pio(drive, !speed);
 
- if ((!(speed)))
+ if (!speed)
                 return 0;
 
         if (ide_set_xfer_rate(drive, speed))
@@ -267,7 +267,7 @@
         ide_hwif_t *hwif = HWIF(drive);
         struct hd_driveid *id = drive->id;
 
- if ((id != NULL) && ((id->capability & 1) != 0) && drive->autodma) {
+ if (id != NULL && (id->capability & 1) != 0 && drive->autodma) {
                 if (!(hwif->atapi_dma))
                         goto fast_ata_pio;
                 /* Consult the list of known "bad" drives */
@@ -317,10 +317,9 @@
                 return 1;
 
         /* return 1 if Device INTR asserted */
- if ((pci_read_config_byte(hwif->pci_dev, SELREG(1), &dma_altstat)),
- ((dma_altstat & 8) == 8))
+ pci_read_config_byte(hwif->pci_dev, SELREG(1), &dma_altstat);
+ if (dma_altstat & 8)
                 return 0; //return 1;
-
         return 0;
 }
 
@@ -355,7 +354,7 @@
                         hwif->OUTL(sata_error, SATA_ERROR_REG);
                         watchdog = (sata_error & 0x00680000) ? 1 : 0;
 #if 1
- printk("%s: sata_error = 0x%08x, "
+ printk(KERN_WARNING "%s: sata_error = 0x%08x, "
                                 "watchdog = %d, %s\n",
                                 drive->name, sata_error, watchdog,
                                 __FUNCTION__);
@@ -426,7 +425,7 @@
                 ide_hwif_t *hwif = HWIF(drive);
 
                 if ((hwif->INL(SATA_STATUS_REG) & 0x03) != 0x03) {
- printk("%s: reset phy dead, status=0x%08x\n",
+ printk(KERN_WARNING "%s: reset phy dead, status=0x%08x\n",
                                 hwif->name, hwif->INL(SATA_STATUS_REG));
                         HWGROUP(drive)->poll_timeout = 0;
 #if 0
@@ -475,10 +474,10 @@
 
         if (SATA_STATUS_REG) {
                 u32 sata_stat = hwif->INL(SATA_STATUS_REG);
- printk("%s: reset phy, status=0x%08x, %s\n",
+ printk(KERN_WARNING "%s: reset phy, status=0x%08x, %s\n",
                         hwif->name, sata_stat, __FUNCTION__);
                 if (!(sata_stat)) {
- printk("%s: reset phy dead, status=0x%08x\n",
+ printk(KERN_WARNING "%s: reset phy dead, status=0x%08x\n",
                                 hwif->name, sata_stat);
                         drive->failures++;
                 }
@@ -491,7 +490,7 @@
         if (dev->device == PCI_DEVICE_ID_SII_3112)
                 goto sata_skip;
 
- printk("%s: BASE CLOCK ", name);
+ printk(KERN_INFO "%s: BASE CLOCK ", name);
         clocking &= ~0x0C;
         switch(clocking) {
                 case 0x03: printk("DISABLED !\n"); break;
@@ -514,13 +513,12 @@
 #endif /* DISPLAY_SIIMAGE_TIMINGS && CONFIG_PROC_FS */
 }
 
-#ifdef CONFIG_TRY_MMIO_SIIMAGE
 static unsigned int setup_mmio_siimage (struct pci_dev *dev, const char *name)
 {
- u32 bar5 = pci_resource_start(dev, 5);
- u32 end5 = pci_resource_end(dev, 5);
+ unsigned long bar5 = pci_resource_start(dev, 5);
+ unsigned long end5 = pci_resource_end(dev, 5);
         u8 tmpbyte = 0;
- u32 addr;
+ unsigned long addr;
         void *ioaddr;
 
         ioaddr = ioremap_nocache(bar5, (end5 - bar5));
@@ -529,82 +527,77 @@
                 return 0;
 
         pci_set_master(dev);
- addr = (u32) ioaddr;
- pci_set_drvdata(dev, (void *) addr);
+ pci_set_drvdata(dev, ioaddr);
+ addr = (unsigned long) ioaddr;
 
         if (dev->device == PCI_DEVICE_ID_SII_3112) {
- sii_outl(0, DEVADDR(0x148));
- sii_outl(0, DEVADDR(0x1C8));
+ writel(0, DEVADDR(0x148));
+ writel(0, DEVADDR(0x1C8));
         }
 
- sii_outb(0, DEVADDR(0xB4));
- sii_outb(0, DEVADDR(0xF4));
- tmpbyte = sii_inb(DEVADDR(0x4A));
+ writeb(0, DEVADDR(0xB4));
+ writeb(0, DEVADDR(0xF4));
+ tmpbyte = readb(DEVADDR(0x4A));
 
         switch(tmpbyte) {
                 case 0x01:
- sii_outb(tmpbyte|0x10, DEVADDR(0x4A));
- tmpbyte = sii_inb(DEVADDR(0x4A));
+ writeb(tmpbyte|0x10, DEVADDR(0x4A));
+ tmpbyte = readb(DEVADDR(0x4A));
                 case 0x31:
                         /* if clocking is disabled */
                         /* 133 clock attempt to force it on */
- sii_outb(tmpbyte & ~0x20, DEVADDR(0x4A));
- tmpbyte = sii_inb(DEVADDR(0x4A));
+ writeb(tmpbyte & ~0x20, DEVADDR(0x4A));
+ tmpbyte = readb(DEVADDR(0x4A));
                 case 0x11:
                 case 0x21:
                         break;
                 default:
                         tmpbyte &= ~0x30;
                         tmpbyte |= 0x20;
- sii_outb(tmpbyte, DEVADDR(0x4A));
+ writeb(tmpbyte, DEVADDR(0x4A));
                         break;
         }
         
- sii_outb(0x72, DEVADDR(0xA1));
- sii_outw(0x328A, DEVADDR(0xA2));
- sii_outl(0x62DD62DD, DEVADDR(0xA4));
- sii_outl(0x43924392, DEVADDR(0xA8));
- sii_outl(0x40094009, DEVADDR(0xAC));
- sii_outb(0x72, DEVADDR(0xE1));
- sii_outw(0x328A, DEVADDR(0xE2));
- sii_outl(0x62DD62DD, DEVADDR(0xE4));
- sii_outl(0x43924392, DEVADDR(0xE8));
- sii_outl(0x40094009, DEVADDR(0xEC));
+ writeb(0x72, DEVADDR(0xA1));
+ writew(0x328A, DEVADDR(0xA2));
+ writel(0x62DD62DD, DEVADDR(0xA4));
+ writel(0x43924392, DEVADDR(0xA8));
+ writel(0x40094009, DEVADDR(0xAC));
+ writeb(0x72, DEVADDR(0xE1));
+ writew(0x328A, DEVADDR(0xE2));
+ writel(0x62DD62DD, DEVADDR(0xE4));
+ writel(0x43924392, DEVADDR(0xE8));
+ writel(0x40094009, DEVADDR(0xEC));
 
         if (dev->device == PCI_DEVICE_ID_SII_3112) {
- sii_outl(0xFFFF0000, DEVADDR(0x108));
- sii_outl(0xFFFF0000, DEVADDR(0x188));
- sii_outl(0x00680000, DEVADDR(0x148));
- sii_outl(0x00680000, DEVADDR(0x1C8));
+ writel(0xFFFF0000, DEVADDR(0x108));
+ writel(0xFFFF0000, DEVADDR(0x188));
+ writel(0x00680000, DEVADDR(0x148));
+ writel(0x00680000, DEVADDR(0x1C8));
         }
 
- tmpbyte = sii_inb(DEVADDR(0x4A));
+ tmpbyte = readb(DEVADDR(0x4A));
 
         proc_reports_siimage(dev, (tmpbyte>>=4), name);
         return 1;
 }
-#endif /* CONFIG_TRY_MMIO_SIIMAGE */
 
 static unsigned int __init init_chipset_siimage (struct pci_dev *dev, const char *name)
 {
         u32 class_rev = 0;
         u8 tmpbyte = 0;
-#ifdef CONFIG_TRY_MMIO_SIIMAGE
         u8 BA5_EN = 0;
-#endif /* CONFIG_TRY_MMIO_SIIMAGE */
 
         pci_read_config_dword(dev, PCI_CLASS_REVISION, &class_rev);
         class_rev &= 0xff;
         pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, (class_rev) ? 1 : 255);
 
-#ifdef CONFIG_TRY_MMIO_SIIMAGE
         pci_read_config_byte(dev, 0x8A, &BA5_EN);
         if ((BA5_EN & 0x01) || (pci_resource_start(dev, 5))) {
                 if (setup_mmio_siimage(dev, name)) {
                         return 0;
                 }
         }
-#endif /* CONFIG_TRY_MMIO_SIIMAGE */
 
         pci_write_config_byte(dev, 0x80, 0x00);
         pci_write_config_byte(dev, 0x84, 0x00);
@@ -653,22 +646,12 @@
 static void __init init_mmio_iops_siimage (ide_hwif_t *hwif)
 {
         struct pci_dev *dev = hwif->pci_dev;
- u32 addr = (u32) pci_get_drvdata(hwif->pci_dev);
+ unsigned long addr = (unsigned long) pci_get_drvdata(hwif->pci_dev);
         u8 ch = hwif->channel;
 // u16 i = 0;
         hw_regs_t hw;
 
- hwif->OUTB = sii_outb;
- hwif->OUTW = sii_outw;
- hwif->OUTL = sii_outl;
- hwif->OUTSW = sii_outsw;
- hwif->OUTSL = sii_outsl;
- hwif->INB = sii_inb;
- hwif->INW = sii_inw;
- hwif->INL = sii_inl;
- hwif->INSW = sii_insw;
- hwif->INSL = sii_insl;
-
+ default_hwif_mmiops(hwif);
         memset(&hw, 0, sizeof(hw_regs_t));
 
 #if 1
@@ -706,7 +689,7 @@
 #endif
 
 #if 0
- printk("%s: ", hwif->name);
+ printk(KERN_DEBUG "%s: ", hwif->name);
         for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++)
                 printk("0x%08x ", DEVADDR((ch) ? 0xC0 : 0x80)|(i));
         printk("0x%08x ", DEVADDR((ch) ? 0xCA : 0x8A)|(i));
@@ -726,7 +709,6 @@
         hw.priv = (void *) addr;
 // hw.priv = pci_get_drvdata(hwif->pci_dev);
         hw.irq = hwif->pci_dev->irq;
-// hw.iops = siimage_iops;
 
         memcpy(&hwif->hw, &hw, sizeof(hw));
         memcpy(hwif->io_ports, hwif->hw.io_ports, sizeof(hwif->hw.io_ports));
@@ -777,9 +759,6 @@
                 pci_read_config_byte(hwif->pci_dev, SELREG(0), &ata66);
                 return (ata66 & 0x01) ? 1 : 0;
         }
-#ifndef CONFIG_TRY_MMIO_SIIMAGE
- if (hwif->mmio) BUG();
-#endif /* CONFIG_TRY_MMIO_SIIMAGE */
 
         return (hwif->INB(SELADDR(0)) & 0x01) ? 1 : 0;
 }
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux-2.5.61/drivers/ide/pci/siimage.h linux-2.5.61-ac2/drivers/ide/pci/siimage.h
--- linux-2.5.61/drivers/ide/pci/siimage.h 2003-02-10 18:38:42.000000000 +0000
+++ linux-2.5.61-ac2/drivers/ide/pci/siimage.h 2003-02-17 19:01:34.000000000 +0000
@@ -9,8 +9,6 @@
 
 #define DISPLAY_SIIMAGE_TIMINGS
 
-#define CONFIG_TRY_MMIO_SIIMAGE
-//#undef CONFIG_TRY_MMIO_SIIMAGE
 #undef SIIMAGE_VIRTUAL_DMAPIO
 #undef SIIMAGE_BUFFERED_TASKFILE
 #undef SIIMAGE_LARGE_DMA
@@ -31,63 +29,11 @@
 
 #define ADJREG(B,R) ((B)|(R)|((hwif->channel)<<(4+(2*(hwif->mmio)))))
 #define SELREG(R) ADJREG((0xA0),(R))
-#define SELADDR(R) ((((u32)hwif->hwif_data)*(hwif->mmio))|SELREG((R)))
-#define HWIFADDR(R) ((((u32)hwif->hwif_data)*(hwif->mmio))|(R))
-#define DEVADDR(R) (((u32) pci_get_drvdata(dev))|(R))
+#define SELADDR(R) ((((unsigned long)hwif->hwif_data)*(hwif->mmio))|SELREG((R)))
+#define HWIFADDR(R) ((((unsigned long)hwif->hwif_data)*(hwif->mmio))|(R))
+#define DEVADDR(R) (((unsigned long) pci_get_drvdata(dev))|(R))
 
 
-inline u8 sii_inb (u32 port)
-{
- return (u8) readb(port);
-}
-
-inline u16 sii_inw (u32 port)
-{
- return (u16) readw(port);
-}
-
-inline void sii_insw (u32 port, void *addr, u32 count)
-{
- while (count--) { *(u16 *)addr = readw(port); addr += 2; }
-}
-
-inline u32 sii_inl (u32 port)
-{
- return (u32) readl(port);
-}
-
-inline void sii_insl (u32 port, void *addr, u32 count)
-{
- sii_insw(port, addr, (count)<<1);
-// while (count--) { *(u32 *)addr = readl(port); addr += 4; }
-}
-
-inline void sii_outb (u8 value, u32 port)
-{
- writeb(value, port);
-}
-
-inline void sii_outw (u16 value, u32 port)
-{
- writew(value, port);
-}
-
-inline void sii_outsw (u32 port, void *addr, u32 count)
-{
- while (count--) { writew(*(u16 *)addr, port); addr += 2; }
-}
-
-inline void sii_outl (u32 value, u32 port)
-{
- writel(value, port);
-}
-
-inline void sii_outsl (u32 port, void *addr, u32 count)
-{
- sii_outsw(port, addr, (count)<<1);
-// while (count--) { writel(*(u32 *)addr, port); addr += 4; }
-}
-
 #if defined(DISPLAY_SIIMAGE_TIMINGS) && defined(CONFIG_PROC_FS)
 #include <linux/stat.h>
 #include <linux/proc_fs.h>
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sun Feb 23 2003 - 22:00:22 EST