diff options
Diffstat (limited to 'drivers/net/ne.c')
-rw-r--r-- | drivers/net/ne.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/drivers/net/ne.c b/drivers/net/ne.c index b32765215f75c1..55f7b7b82b5bdd 100644 --- a/drivers/net/ne.c +++ b/drivers/net/ne.c @@ -142,6 +142,10 @@ bad_clone_list[] __initdata = { #elif defined(CONFIG_PLAT_OAKS32R) || \ defined(CONFIG_TOSHIBA_RBTX4927) || defined(CONFIG_TOSHIBA_RBTX4938) # define DCR_VAL 0x48 /* 8-bit mode */ +#elif defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R77703DRP) || \ + defined(CONFIG_SH_R7780RP) +# include "88796l.c" +# define DCR_VAL 0x01 #else # define DCR_VAL 0x49 #endif @@ -191,6 +195,11 @@ static int __init do_ne_probe(struct net_device *dev) SET_MODULE_OWNER(dev); +#if defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R77703DRP) || defined(CONFIG_SH_R7780RP) + base_addr = AX88796L_IO_BASE; + dev->irq = IRQ_ONETH; +#endif + /* First check any supplied i/o locations. User knows best. <cough> */ if (base_addr > 0x1ff) /* Check a single specified location. */ return ne_probe1(dev, base_addr); @@ -324,7 +333,11 @@ static int __init ne_probe1(struct net_device *dev, int ioaddr) if (ei_debug && version_printed++ == 0) printk(KERN_INFO "%s" KERN_INFO "%s", version1, version2); +#if defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R77703DRP) || defined(CONFIG_SH_R7780RP) + printk(KERN_INFO "ASIX AX88796L ethercard probe at %#3x:", ioaddr); +#else printk(KERN_INFO "NE*000 ethercard probe at %#3x:", ioaddr); +#endif /* A user with a poor card that fails to ack the reset, or that does not have a valid 0x57,0x57 signature can still use this @@ -365,12 +378,20 @@ static int __init ne_probe1(struct net_device *dev, int ioaddr) struct {unsigned char value, offset; } program_seq[] = { {E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD}, /* Select page 0*/ +#if defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R77703DRP) || defined(CONFIG_SH_R7780RP) + {0x00, EN0_DCFG}, /* Set byte-wide (0x00) access. */ +#else {0x48, EN0_DCFG}, /* Set byte-wide (0x48) access. */ +#endif {0x00, EN0_RCNTLO}, /* Clear the count regs. */ {0x00, EN0_RCNTHI}, {0x00, EN0_IMR}, /* Mask completion irq. */ {0xFF, EN0_ISR}, +#if defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R77703DRP) || defined(CONFIG_SH_R7780RP) + {E8390_RXOFF|0x40, EN0_RXCR}, /* 0x60 Set to monitor */ +#else {E8390_RXOFF, EN0_RXCR}, /* 0x20 Set to monitor */ +#endif {E8390_TXOFF, EN0_TXCR}, /* 0x02 and loopback mode. */ {32, EN0_RCNTLO}, {0x00, EN0_RCNTHI}, @@ -395,6 +416,9 @@ static int __init ne_probe1(struct net_device *dev, int ioaddr) for (i = 0; i < 16; i++) SA_prom[i] = SA_prom[i+i]; /* We must set the 8390 for word mode. */ +#if defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R77703DRP) || defined(CONFIG_SH_R7780RP) + asix88796_eeprom_read(ioaddr, SA_prom); +#endif outb_p(DCR_VAL, ioaddr + EN0_DCFG); start_page = NESM_START_PG; @@ -426,7 +450,11 @@ static int __init ne_probe1(struct net_device *dev, int ioaddr) /* Set up the rest of the parameters. */ if (neX000 || bad_card || copam) { +#if defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R77703DRP) || defined(CONFIG_SH_R7780RP) + name = (wordlength == 2) ? "AX88796L" : "NE1000"; +#else name = (wordlength == 2) ? "NE2000" : "NE1000"; +#endif } else if (ctron) { |