From: Hirokazu Takata This patch updates drivers/net/ne.c and merges m32r support to it. - Add m32r support. Signed-off-by: Hayato Fujiwara Signed-off-by: Hirokazu Takata Signed-off-by: Andrew Morton --- 25-akpm/arch/m32r/kernel/setup_mappi.c | 2 +- 25-akpm/arch/m32r/kernel/setup_oaks32r.c | 2 +- 25-akpm/drivers/net/8390.c | 10 ++++++++++ 25-akpm/drivers/net/Kconfig | 2 +- 25-akpm/drivers/net/ne.c | 30 +++++++++++++++++++++++++++++- 5 files changed, 42 insertions(+), 4 deletions(-) diff -puN arch/m32r/kernel/setup_mappi.c~m32r-modify-drivers-net-nec-for-m32r arch/m32r/kernel/setup_mappi.c --- 25/arch/m32r/kernel/setup_mappi.c~m32r-modify-drivers-net-nec-for-m32r 2004-09-15 20:23:42.793457744 -0700 +++ 25-akpm/arch/m32r/kernel/setup_mappi.c 2004-09-15 20:23:42.803456224 -0700 @@ -92,7 +92,7 @@ void __init init_IRQ(void) else once++; -#ifdef CONFIG_M32R_NE2000 +#ifdef CONFIG_NE2000 /* INT0 : LAN controller (RTL8019AS) */ irq_desc[M32R_IRQ_INT0].status = IRQ_DISABLED; irq_desc[M32R_IRQ_INT0].handler = &mappi_irq_type; diff -puN arch/m32r/kernel/setup_oaks32r.c~m32r-modify-drivers-net-nec-for-m32r arch/m32r/kernel/setup_oaks32r.c --- 25/arch/m32r/kernel/setup_oaks32r.c~m32r-modify-drivers-net-nec-for-m32r 2004-09-15 20:23:42.794457592 -0700 +++ 25-akpm/arch/m32r/kernel/setup_oaks32r.c 2004-09-15 20:23:42.803456224 -0700 @@ -92,7 +92,7 @@ void __init init_IRQ(void) else once++; -#ifdef CONFIG_M32R_NE2000 +#ifdef CONFIG_NE2000 /* INT3 : LAN controller (RTL8019AS) */ irq_desc[M32R_IRQ_INT3].status = IRQ_DISABLED; irq_desc[M32R_IRQ_INT3].handler = &oaks32r_irq_type; diff -puN drivers/net/8390.c~m32r-modify-drivers-net-nec-for-m32r drivers/net/8390.c --- 25/drivers/net/8390.c~m32r-modify-drivers-net-nec-for-m32r 2004-09-15 20:23:42.796457288 -0700 +++ 25-akpm/drivers/net/8390.c 2004-09-15 20:23:42.807455616 -0700 @@ -42,6 +42,7 @@ Alan Cox : Spinlocking work, added 'BUG_83C690' Paul Gortmaker : Separate out Tx timeout code from Tx path. Paul Gortmaker : Remove old unused single Tx buffer code. + Hayato Fujiwara : Add m32r support. Sources: The National Semiconductor LAN Databook, and the 3Com 3c503 databook. @@ -219,6 +220,15 @@ void ei_tx_timeout(struct net_device *de int txsr, isr, tickssofar = jiffies - dev->trans_start; unsigned long flags; +#if defined(CONFIG_M32R) && defined(CONFIG_SMP) + unsigned long icucr; + + local_irq_save(flags); + icucr = inl(ICUCR1); + icucr |= M32R_ICUCR_ISMOD11; + outl(icucr, ICUCR1); + local_irq_restore(flags); +#endif ei_local->stat.tx_errors++; spin_lock_irqsave(&ei_local->page_lock, flags); diff -puN drivers/net/Kconfig~m32r-modify-drivers-net-nec-for-m32r drivers/net/Kconfig --- 25/drivers/net/Kconfig~m32r-modify-drivers-net-nec-for-m32r 2004-09-15 20:23:42.798456984 -0700 +++ 25-akpm/drivers/net/Kconfig 2004-09-15 20:23:42.806455768 -0700 @@ -1075,7 +1075,7 @@ config ETH16I config NE2000 tristate "NE2000/NE1000 support" - depends on NET_ISA || (Q40 && m) + depends on NET_ISA || (Q40 && m) || M32R select CRC32 ---help--- If you have a network (Ethernet) card of this type, say Y and read diff -puN drivers/net/ne.c~m32r-modify-drivers-net-nec-for-m32r drivers/net/ne.c --- 25/drivers/net/ne.c~m32r-modify-drivers-net-nec-for-m32r 2004-09-15 20:23:42.800456680 -0700 +++ 25-akpm/drivers/net/ne.c 2004-09-15 20:23:42.808455464 -0700 @@ -29,6 +29,7 @@ last in cleanup_modue() Richard Guenther : Added support for ISAPnP cards Paul Gortmaker : Discontinued PCI support - use ne2k-pci.c instead. + Hayato Fujiwara : Add m32r support. */ @@ -128,6 +129,14 @@ bad_clone_list[] __initdata = { #define NESM_START_PG 0x40 /* First page of TX buffer */ #define NESM_STOP_PG 0x80 /* Last page +1 of RX ring */ +#ifdef CONFIG_PLAT_MAPPI +# define DCR_VAL 0x4b +#elif CONFIG_PLAT_OAKS32R +# define DCR_VAL 0x48 +#else +# define DCR_VAL 0x49 +#endif + static int ne_probe1(struct net_device *dev, int ioaddr); static int ne_probe_isapnp(struct net_device *dev); @@ -387,7 +396,7 @@ static int __init ne_probe1(struct net_d for (i = 0; i < 16; i++) SA_prom[i] = SA_prom[i+i]; /* We must set the 8390 for word mode. */ - outb_p(0x49, ioaddr + EN0_DCFG); + outb_p(DCR_VAL, ioaddr + EN0_DCFG); start_page = NESM_START_PG; stop_page = NESM_STOP_PG; } else { @@ -395,7 +404,12 @@ static int __init ne_probe1(struct net_d stop_page = NE1SM_STOP_PG; } +#if defined(CONFIG_PLAT_MAPPI) || defined(CONFIG_PLAT_OAKS32R) + neX000 = ((SA_prom[14] == 0x57 && SA_prom[15] == 0x57) + || (SA_prom[14] == 0x42 && SA_prom[15] == 0x42)); +#else neX000 = (SA_prom[14] == 0x57 && SA_prom[15] == 0x57); +#endif ctron = (SA_prom[0] == 0x00 && SA_prom[1] == 0x00 && SA_prom[2] == 0x1d); copam = (SA_prom[14] == 0x49 && SA_prom[15] == 0x00); @@ -476,10 +490,20 @@ static int __init ne_probe1(struct net_d dev->base_addr = ioaddr; +#ifdef CONFIG_PLAT_MAPPI + outb_p(E8390_NODMA + E8390_PAGE1 + E8390_STOP, + ioaddr + E8390_CMD); /* 0x61 */ + for (i = 0 ; i < ETHER_ADDR_LEN ; i++) { + dev->dev_addr[i] = SA_prom[i] + = inb_p(ioaddr + EN1_PHYS_SHIFT(i)); + printk(" %2.2x", SA_prom[i]); + } +#else for(i = 0; i < ETHER_ADDR_LEN; i++) { printk(" %2.2x", SA_prom[i]); dev->dev_addr[i] = SA_prom[i]; } +#endif printk("\n%s: %s found at %#x, using IRQ %d.\n", dev->name, name, ioaddr, dev->irq); @@ -487,7 +511,11 @@ static int __init ne_probe1(struct net_d ei_status.name = name; ei_status.tx_start_page = start_page; ei_status.stop_page = stop_page; +#ifdef CONFIG_PLAT_OAKS32R + ei_status.word16 = 0; +#else ei_status.word16 = (wordlength == 2); +#endif ei_status.rx_start_page = start_page + TX_PAGES; #ifdef PACKETBUF_MEMSIZE _