aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ne.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/ne.c')
-rw-r--r--drivers/net/ne.c28
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)
{