[PATCH] ibmtr fixes for 2.4.4-ac9

From: Mike Phillips (mikep@linuxtr.net)
Date: Mon May 14 2001 - 14:25:59 EST


This patch fixes a couple of bugs in the updated driver that stopped it
from working with the isa/isapnp adapters and fixes the compile time
error when compiled into the kernel.

The patch is against 2.4.4-ac9 (i.e. after Andrzej's updates)

Thanks
Mike Phillips
http://www.linuxtr.net

diff -urN --exclude-from=dontdiff linux-2.4.4-ac9.clean/drivers/net/tokenring/ibmtr.c linux-2.4.4-ac9/drivers/net/tokenring/ibmtr.c
--- linux-2.4.4-ac9.clean/drivers/net/tokenring/ibmtr.c Mon May 14 11:31:35 2001
+++ linux-2.4.4-ac9/drivers/net/tokenring/ibmtr.c Mon May 14 12:01:34 2001
@@ -271,7 +271,7 @@
                 for(i=jiffies+TR_BUSY_INTERVAL; time_before_eq(jiffies,i););
                 intf_tbl=ntohs(isa_readw(ram_addr+ACA_OFFSET+ACA_RW+WRBR_EVEN));
                 if (intf_tbl) {
-#if !TR_NEWFORMAT
+#if IBMTR_DEBUG_MESSAGES
                         printk("ibmtr::find_turbo_adapters, Turbo found at "
                                 "ram_addr %x\n",ram_addr);
                         printk("ibmtr::find_turbo_adapters, interface_table ");
@@ -288,7 +288,7 @@
                         index++;
                         continue;
                 }
-#if !TR_NEWFORMAT
+#if IBMTR_DEBUG_MESSAGES
                 printk("ibmtr::find_turbo_adapters, ibmtr card found at"
                         " %x but not a Turbo model\n",ram_addr);
 #endif
@@ -324,11 +324,6 @@
                 return -ENXIO;
         if (base_addr > 0x1ff) { /* Check a single specified location. */
                 if (!ibmtr_probe1(dev, base_addr)) return 0;
-#ifndef MODULE
-#ifndef PCMCIA
- tr_freedev(dev);
-#endif
-#endif
                 return -ENODEV;
         }
         find_turbo_adapters(ibmtr_portlist);
@@ -337,11 +332,6 @@
 
                 if (check_region(ioaddr, IBMTR_IO_EXTENT)) continue;
                 if (!ibmtr_probe1(dev, ioaddr)) return 0;
-#ifndef MODULE
-#ifndef PCMCIA
- tr_freedev(dev);
-#endif
-#endif
         }
         return -ENODEV;
 }
@@ -374,16 +364,24 @@
          */
         segment = inb(PIOaddr);
         if (segment < 0x40 || segment > 0xe0) {
- /* Out of range values so we'll assume non-existent IO device */
+ /* Out of range values so we'll assume non-existent IO device
+ * but this is not necessarily a problem, esp if a turbo
+ * adapter is being used. */
+#if IBMTR_DEBUG_MESSAGES
                 DPRINTK("ibmtr_probe1(): unhappy that inb(0x%X) == 0x%X, "
                         "Hardware Problem?\n",PIOaddr,segment);
+#endif
                 return -ENODEV;
         }
         /*
          * Compute the linear base address of the MMIO area
          * as LINUX doesn't care about segments
          */
- t_mmio = (((__u32) (segment & 0xfc) << 11) + 0x80000);
+ t_mmio = (u32)ioremap(((__u32) (segment & 0xfc) << 11) + 0x80000,2048);
+ if (!t_mmio) {
+ DPRINTK("Cannot remap mmiobase memory area") ;
+ return -ENODEV ;
+ }
         intr = segment & 0x03; /* low bits is coded interrupt # */
         if (ibmtr_debug_trace & TRC_INIT)
                 DPRINTK("PIOaddr: %4hx seg/intr: %2x mmio base: %08X intr: %d\n"
@@ -454,7 +452,7 @@
                                    adapter support as well /dwm */
         for(i=0; i<IBMTR_MAX_ADAPTERS; i++) {
                 if (turbo_io[i] != PIOaddr) continue;
-#if !TR_NEWFORMAT
+#if IBMTR_DEBUG_MESSAGES
                 printk("ibmtr::tr_probe1, setting PIOaddr %x to Turbo\n" ,
                                                         PIOaddr);
 #endif
@@ -902,6 +900,7 @@
         int i;
 
         ti = (struct tok_info *) dev->priv;
+ SET_PAGE(ti->init_srb_page);
         writeb(~SRB_RESP_INT, ti->mmio + ACA_OFFSET + ACA_RESET + ISRP_ODD);
         for (i = 0; i < sizeof(struct dir_open_adapter); i++)
                 writeb(0, ti->init_srb + i);
@@ -1304,7 +1303,7 @@
                                 netif_wake_queue(dev);
                                 break;
                         }
-#ifdef IBMTR_DEBUG_MESSAGES
+#if IBMTR_DEBUG_MESSAGES
 
 #define LINE_ERRORS_OFST 0
 #define INTERNAL_ERRORS_OFST 1
@@ -1478,7 +1477,7 @@
         /* we assign the shared-ram address for ISA devices */
         writeb(ti->sram_base, ti->mmio + ACA_OFFSET + ACA_RW + RRR_EVEN);
 #ifndef PCMCIA
- ti->sram_virt=((__u32)ti->sram_base << 12);
+ ti->sram_virt = (u32)ioremap(((__u32)ti->sram_base << 12), ti->avail_shared_ram);
 #endif
         ti->init_srb = ntohs(readw(ti->mmio + ACA_OFFSET + WRBR_EVEN));
         if (ti->page_mask) {
@@ -1955,6 +1954,13 @@
                 unregister_trdev(dev_ibmtr[i]);
                 free_irq(dev_ibmtr[i]->irq, dev_ibmtr[i]);
                 release_region(dev_ibmtr[i]->base_addr, IBMTR_IO_EXTENT);
+#ifndef PCMCIA
+ {
+ struct tok_info *ti = (struct tok_info *)dev_ibmtr[i]->priv ;
+ iounmap((u32 *)ti->mmio) ;
+ iounmap((u32 *)ti->sram_virt) ;
+ }
+#endif
                 kfree(dev_ibmtr[i]->priv);
                 kfree(dev_ibmtr[i]);
                 dev_ibmtr[i] = NULL;
diff -urN --exclude-from=dontdiff linux-2.4.4-ac9.clean/include/linux/ibmtr.h linux-2.4.4-ac9/include/linux/ibmtr.h
--- linux-2.4.4-ac9.clean/include/linux/ibmtr.h Mon May 14 11:31:53 2001
+++ linux-2.4.4-ac9/include/linux/ibmtr.h Mon May 14 12:02:04 2001
@@ -152,7 +152,7 @@
 #define ACA_RW 0x00
 
 #ifdef ENABLE_PAGING
-#define SET_PAGE(x) (isa_writeb((x), ti->mmio + ACA_OFFSET+ ACA_RW + SRPR_EVEN))
+#define SET_PAGE(x) (writeb((x), ti->mmio + ACA_OFFSET+ ACA_RW + SRPR_EVEN))
 #else
 #define SET_PAGE(x)
 #endif

-
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 : Tue May 15 2001 - 21:00:36 EST