From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S262850AbUEWN5h (ORCPT ); Sun, 23 May 2004 09:57:37 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S262866AbUEWN5h (ORCPT ); Sun, 23 May 2004 09:57:37 -0400 Received: from p060042.ppp.asahi-net.or.jp ([221.113.60.42]:59889 "EHLO mitou.ysato.dip.jp") by vger.kernel.org with ESMTP id S262850AbUEWN5d (ORCPT ); Sun, 23 May 2004 09:57:33 -0400 Date: Sun, 23 May 2004 22:57:31 +0900 Message-ID: From: Yoshinori Sato To: Linus Torvalds Cc: linux kernel Mailing List Subject: [PATCH] H8/300 ne driver module fix In-Reply-To: References: User-Agent: Wanderlust/2.11.24 (Wonderwall) SEMI/1.14.6 (Maruoka) LIMIT/1.14.7 (Fujiidera) APEL/10.6 Emacs/21.3 (i386-pc-linux-gnu) MULE/5.0 (SAKAKI) MIME-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org - module suppot fix -- Yoshinori Sato diff -u linux-2.6.6-bk9/drivers/net/8390.h linux-2.6.6-h8300/drivers/net/8390.h --- linux-2.6.6-bk9/drivers/net/8390.h 2004-05-23 21:11:58.000000000 +0900 +++ linux-2.6.6-h8300/drivers/net/8390.h 2004-05-23 22:49:24.000000000 +0900 @@ -143,7 +143,7 @@ #define inb_p(_p) inb(_p) #define outb_p(_v,_p) outb(_v,_p) -#elif defined(CONFIG_NET_CBUS) || defined(CONFIG_NE_H8300) +#elif defined(CONFIG_NET_CBUS) || defined(CONFIG_NE_H8300) || defined(CONFIG_NE_H8300_MODULE) #define EI_SHIFT(x) (ei_local->reg_offset[x]) #else #define EI_SHIFT(x) (x) diff -u linux-2.6.6-bk9/drivers/net/Kconfig linux-2.6.6-h8300/drivers/net/Kconfig --- linux-2.6.6-bk9/drivers/net/Kconfig 2004-05-23 21:11:58.000000000 +0900 +++ linux-2.6.6-h8300/drivers/net/Kconfig 2004-05-23 22:47:06.000000000 +0900 @@ -1829,7 +1829,7 @@ controller on the Motorola ColdFire 5272 processor. config NE_H8300 - bool "NE2000 compatible support for H8/300" + tristate "NE2000 compatible support for H8/300" depends on H8300 && NET_ETHERNET help Say Y here if you want to use the NE2000 compatible diff -u linux-2.6.6-bk9/drivers/net/ne-h8300.c linux-2.6.6-h8300/drivers/net/ne-h8300.c --- linux-2.6.6-bk9/drivers/net/ne-h8300.c 2004-05-23 21:11:58.000000000 +0900 +++ linux-2.6.6-h8300/drivers/net/ne-h8300.c 2004-05-23 22:40:01.000000000 +0900 @@ -260,8 +260,8 @@ bus_width &= 1 << ((ioaddr >> 21) & 7); ei_status.word16 = (bus_width == 0); /* temporary setting */ for(i = 0; i < 16 /*sizeof(SA_prom)*/; i++) { - SA_prom[i] = inb(ioaddr + NE_DATAPORT); - inb(ioaddr + NE_DATAPORT); /* dummy read */ + SA_prom[i] = inb_p(ioaddr + NE_DATAPORT); + inb_p(ioaddr + NE_DATAPORT); /* dummy read */ } start_page = NESM_START_PG; @@ -590,7 +590,7 @@ #ifdef MODULE -#define MAX_NE_CARDS 4 /* Max number of NE cards per module */ +#define MAX_NE_CARDS 1 /* Max number of NE cards per module */ static struct net_device *dev_ne[MAX_NE_CARDS]; static int io[MAX_NE_CARDS]; static int irq[MAX_NE_CARDS]; @@ -599,7 +599,7 @@ MODULE_PARM(io, "1-" __MODULE_STRING(MAX_NE_CARDS) "i"); MODULE_PARM(irq, "1-" __MODULE_STRING(MAX_NE_CARDS) "i"); MODULE_PARM(bad, "1-" __MODULE_STRING(MAX_NE_CARDS) "i"); -MODULE_PARM_DESC(io, "I/O base address(es),required"); +MODULE_PARM_DESC(io, "I/O base address(es)"); MODULE_PARM_DESC(irq, "IRQ number(s)"); MODULE_DESCRIPTION("H8/300 NE2000 Ethernet driver"); MODULE_LICENSE("GPL"); @@ -612,26 +612,35 @@ int init_module(void) { int this_dev, found = 0; + int err; for (this_dev = 0; this_dev < MAX_NE_CARDS; this_dev++) { struct net_device *dev = alloc_ei_netdev(); if (!dev) break; - dev->irq = irq[this_dev]; - dev->mem_end = bad[this_dev]; - dev->base_addr = io[this_dev]; - if (do_ne_probe(dev) == 0) { - if (register_netdev(dev) == 0) { - dev_ne[found++] = dev; - continue; + if (io[this_dev]) { + dev->irq = irq[this_dev]; + dev->mem_end = bad[this_dev]; + dev->base_addr = io[this_dev]; + } else { + dev->base_addr = h8300_ne_base[this_dev]; + dev->irq = h8300_ne_irq[this_dev]; + } + err = init_reg_offset(dev, dev->base_addr); + if (!err) { + if (do_ne_probe(dev) == 0) { + if (register_netdev(dev) == 0) { + dev_ne[found++] = dev; + continue; + } + cleanup_card(dev); } - cleanup_card(dev); } free_netdev(dev); if (found) break; if (io[this_dev] != 0) - printk(KERN_WARNING "ne.c: No NE*000 card found at i/o = %#x\n", io[this_dev]); + printk(KERN_WARNING "ne.c: No NE*000 card found at i/o = %#x\n", dev->base_addr); else printk(KERN_NOTICE "ne.c: You must supply \"io=0xNNN\" value(s) for ISA cards.\n"); return -ENXIO;