All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot-Users] ne2000 compile error
@ 2008-04-09 14:29 Shinya Kuribayashi
  2008-04-11 14:57 ` Vlad Lungu
  0 siblings, 1 reply; 6+ messages in thread
From: Shinya Kuribayashi @ 2008-04-09 14:29 UTC (permalink / raw)
  To: u-boot

I'm getting the following compile error in trunk git with
qemu_mips_config.

<--  snip  -->

mips-linux-gcc -g  -Os   -D__KERNEL__ -DTEXT_BASE=0xbfc00000 -I/home/skuribay/devel/u-boot.git/include -fno-builtin -ffreestanding -nostdinc -isystem /home/skuribay/devel/buildroot/build_mips/staging_dir/usr/bin-ccache/../lib/gcc/mips-linux-uclibc/4.2.3/include -pipe  -DCONFIG_MIPS -D__MIPS__ -G 0 -mabicalls -fpic -pipe -msoft-float -march=4kc -mtune=4kc -EB -Wall -Wstrict-prototypes -c -o ne2000.o ne2000.c
In file included from ne2000.c:118:
ne2000.h: In function 'pcnet_reset_8390':
ne2000.h:100: warning: implicit declaration of function 'n2k_outb'
ne2000.h:100: error: 'E8390_NODMA' undeclared (first use in this function)
ne2000.h:100: error: (Each undeclared identifier is reported only once
ne2000.h:100: error: for each function it appears in.)
ne2000.h:100: error: 'E8390_PAGE0' undeclared (first use in this function)
ne2000.h:100: error: 'E8390_STOP' undeclared (first use in this function)
ne2000.h:100: error: 'E8390_CMD' undeclared (first use in this function)
ne2000.h:102: error: 'E8390_PAGE1' undeclared (first use in this function)
ne2000.h:108: warning: implicit declaration of function 'n2k_inb'
ne2000.h:108: error: 'PCNET_RESET' undeclared (first use in this function)
ne2000.h:111: error: 'EN0_ISR' undeclared (first use in this function)
ne2000.h:111: error: 'ENISR_RESET' undeclared (first use in this function)
ne2000.h: In function 'get_prom':
ne2000.h:129: error: 'E8390_NODMA' undeclared (first use in this function)
ne2000.h:129: error: 'E8390_PAGE0' undeclared (first use in this function)
ne2000.h:129: error: 'E8390_STOP' undeclared (first use in this function)
ne2000.h:129: error: 'E8390_CMD' undeclared (first use in this function)
ne2000.h:130: error: 'EN0_DCFG' undeclared (first use in this function)
ne2000.h:131: error: 'EN0_RCNTLO' undeclared (first use in this function)
ne2000.h:132: error: 'EN0_RCNTHI' undeclared (first use in this function)
ne2000.h:133: error: 'EN0_IMR' undeclared (first use in this function)
ne2000.h:134: error: 'EN0_ISR' undeclared (first use in this function)
ne2000.h:135: error: 'E8390_RXOFF' undeclared (first use in this function)
ne2000.h:135: error: 'EN0_RXCR' undeclared (first use in this function)
ne2000.h:136: error: 'E8390_TXOFF' undeclared (first use in this function)
ne2000.h:136: error: 'EN0_TXCR' undeclared (first use in this function)
ne2000.h:139: error: 'EN0_RSARLO' undeclared (first use in this function)
ne2000.h:140: error: 'EN0_RSARHI' undeclared (first use in this function)
ne2000.h:141: error: 'E8390_RREAD' undeclared (first use in this function)
ne2000.h:141: error: 'E8390_START' undeclared (first use in this function)
ne2000.h:155: error: 'PCNET_DATAPORT' undeclared (first use in this function)
ne2000.h:159: error: 'NR_INFO' undeclared (first use in this function)
ne2000.h:159: warning: comparison between pointer and integer
ne2000.h:160: error: 'hw_info' undeclared (first use in this function)
ne2000.h:160: error: 'struct <anonymous>' has no member named '$4'
ne2000.h:160: warning: comparison between pointer and integer
ne2000.h:161: error: 'struct <anonymous>' has no member named '$5'
ne2000.h:161: warning: comparison between pointer and integer
ne2000.h:162: error: 'struct <anonymous>' has no member named '$6'
ne2000.h:162: warning: comparison between pointer and integer
ne2000.h:167: warning: comparison between pointer and integer
ne2000.h:175: warning: comparison between pointer and integer
ne2000.h:177: warning: return makes integer from pointer without a cast
ne2000.c: In function 'dp83902a_init':
ne2000.c:140: error: 'i' undeclared (first use in this function)
ne2000.c:140: warning: comparison between pointer and integer
ne2000.c:140: error: lvalue required as increment operand
ne2000.c:141: error: array subscript is not an integer
ne2000.c:141: error: invalid operands to binary +
ne2000.c:141: warning: statement with no effect
ne2000.c: In function 'eth_init':
ne2000.c:793: warning: assignment makes pointer from integer without a cast
ne2000.c:806: error: 'START_PG2' undeclared (first use in this function)
ne2000.c:806: warning: assignment makes integer from pointer without a cast
make[1]: *** [ne2000.o] Error 1

<--  snip  -->

Git bisect has picked up the following commit:

----------------------------------------------------------------
commit e710185aae90c64d39c2d453e40e58ceefe4f250
Author: goda.yusuke <goda.yusuke@renesas.com>
Date:   Wed Mar 5 17:08:20 2008 +0900

    net: Divided code of NE2000 ethernet driver
    
    There are more devices of the NE2000 base.
    A present code is difficult for us to support more devices.
    To support more NE2000 clone devices, separated the function.
    
    Signed-off-by: Yusuke Goda <goda.yusuke@renesas.com>
    Acked-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>

----------------------------------------------------------------

I tried to fix the problem, but tha patch is a little complicated.

Thanks,

  Shinya

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [U-Boot-Users] ne2000 compile error
  2008-04-09 14:29 [U-Boot-Users] ne2000 compile error Shinya Kuribayashi
@ 2008-04-11 14:57 ` Vlad Lungu
  2008-04-12  5:00   ` [U-Boot-Users] [PATCH] NE2000: Fix regresssion introduced by e710185aae90 on non AX88796 Jean-Christophe PLAGNIOL-VILLARD
  2008-04-20  6:36   ` [U-Boot-Users] ne2000 compile error Wolfgang Denk
  0 siblings, 2 replies; 6+ messages in thread
From: Vlad Lungu @ 2008-04-11 14:57 UTC (permalink / raw)
  To: u-boot

Shinya Kuribayashi wrote:
[BIG SNIP]
> Git bisect has picked up the following commit:
>
> ----------------------------------------------------------------
> commit e710185aae90c64d39c2d453e40e58ceefe4f250
> Author: goda.yusuke <goda.yusuke@renesas.com>
> Date:   Wed Mar 5 17:08:20 2008 +0900
>
>     net: Divided code of NE2000 ethernet driver
>     
>     There are more devices of the NE2000 base.
>     A present code is difficult for us to support more devices.
>     To support more NE2000 clone devices, separated the function.
>     
>     Signed-off-by: Yusuke Goda <goda.yusuke@renesas.com>
>     Acked-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
>
> ----------------------------------------------------------------
>
> I tried to fix the problem, but tha patch is a little complicated.
>   
Fixed it for now. #ifndef CONFIG_DRIVER_AX88796 could be replaced with 
something a little more generic
like a CFG_CUSTOM_GET_PROM_NE2000 or something. Or the code could be 
implemented in a .c file and the
generic get_prom() could be made weak. I think that implementing 
non-static, non-inlined functions in header files
is bad style. Breaking existing code in the process is even worse.

Vlad


Signed-off-by: Vlad Lungu <vlad@comsys.ro>
---
 drivers/net/ax88796.h     |    4 +-
 drivers/net/ne2000.c      |   91 
+++++++++++++++++++++++++++++++++++++++++++++
 drivers/net/ne2000.h      |   86 
+------------------------------------------
 drivers/net/ne2000_base.h |    2 +-
 4 files changed, 95 insertions(+), 88 deletions(-)

diff --git a/drivers/net/ax88796.h b/drivers/net/ax88796.h
index 069ae80..4262648 100644
--- a/drivers/net/ax88796.h
+++ b/drivers/net/ax88796.h
@@ -202,7 +202,7 @@ static void ax88796_mac_read(u8 *buff)
     }
 }
 
-int get_prom(u8* mac_addr)
+hw_info_t * get_prom(u8* mac_addr)
 {
     u8 prom[32];
     int i;
@@ -211,7 +211,7 @@ int get_prom(u8* mac_addr)
     for (i = 0; i < 6; i++){
         mac_addr[i] = prom[i];
     }
-    return 1;
+    return (void *)1;
 }
 
 #endif /* __DRIVERS_AX88796L_H__ */
diff --git a/drivers/net/ne2000.c b/drivers/net/ne2000.c
index 99baeea..aad27dc 100644
--- a/drivers/net/ne2000.c
+++ b/drivers/net/ne2000.c
@@ -125,6 +125,9 @@ dp83902a_init(void)
     dp83902a_priv_data_t *dp = &nic;
     u8* base;
 
+#if defined(NE2000_BASIC_INIT)
+    int i;
+#endif
     DEBUG_FUNCTION();
 
     base = dp->base;
@@ -738,6 +741,94 @@ u8 dev_addr[6];
 #define PCNET_RESET    0x1f    /* Issue a read to reset, a write to 
clear. */
 #define PCNET_MISC    0x18    /* For IBM CCAE and Socket EA cards */
 
+#ifndef CONFIG_DRIVER_AX88796L
+static void pcnet_reset_8390(void)
+{
+    int i, r;
+
+    PRINTK("nic base is %lx\n", nic_base);
+
+    n2k_outb(E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD);
+    PRINTK("cmd (at %lx) is %x\n", nic_base+ E8390_CMD, 
n2k_inb(E8390_CMD));
+    n2k_outb(E8390_NODMA+E8390_PAGE1+E8390_STOP, E8390_CMD);
+    PRINTK("cmd (at %lx) is %x\n", nic_base+ E8390_CMD, 
n2k_inb(E8390_CMD));
+    n2k_outb(E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD);
+    PRINTK("cmd (at %lx) is %x\n", nic_base+ E8390_CMD, 
n2k_inb(E8390_CMD));
+    n2k_outb(E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD);
+
+    n2k_outb(n2k_inb(PCNET_RESET), PCNET_RESET);
+
+    for (i = 0; i < 100; i++) {
+        if ((r = (n2k_inb(EN0_ISR) & ENISR_RESET)) != 0)
+            break;
+        PRINTK("got %x in reset\n", r);
+        udelay(100);
+    }
+    n2k_outb(ENISR_RESET, EN0_ISR); /* Ack intr. */
+
+    if (i == 100)
+        printf("pcnet_reset_8390() did not complete.\n");
+} /* pcnet_reset_8390 */
+
+hw_info_t * get_prom(u8* mac_addr)
+{
+    u8 prom[32];
+    int i, j;
+    struct {
+        u_char value, offset;
+    } program_seq[] = {
+        {E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD}, /* Select page 0*/
+        {0x48,  EN0_DCFG},        /* Set byte-wide (0x48) access. */
+        {0x00,  EN0_RCNTLO},        /* Clear the count regs. */
+        {0x00,  EN0_RCNTHI},
+        {0x00,  EN0_IMR},        /* Mask completion irq. */
+        {0xFF,  EN0_ISR},
+        {E8390_RXOFF, EN0_RXCR},    /* 0x20  Set to monitor */
+        {E8390_TXOFF, EN0_TXCR},    /* 0x02  and loopback mode. */
+        {32,    EN0_RCNTLO},
+        {0x00,  EN0_RCNTHI},
+        {0x00,  EN0_RSARLO},        /* DMA starting at 0x0000. */
+        {0x00,  EN0_RSARHI},
+        {E8390_RREAD+E8390_START, E8390_CMD},
+    };
+
+    PRINTK ("trying to get MAC via prom reading\n");
+
+    pcnet_reset_8390 ();
+
+    mdelay (10);
+
+    for (i = 0; i < sizeof (program_seq) / sizeof (program_seq[0]); i++)
+        n2k_outb (program_seq[i].value, program_seq[i].offset);
+
+    PRINTK ("PROM:");
+    for (i = 0; i < 32; i++) {
+        prom[i] = n2k_inb (PCNET_DATAPORT);
+        PRINTK (" %02x", prom[i]);
+    }
+    PRINTK ("\n");
+    for (i = 0; i < NR_INFO; i++) {
+        if ((prom[0] == hw_info[i].a0) &&
+            (prom[2] == hw_info[i].a1) &&
+            (prom[4] == hw_info[i].a2)) {
+            PRINTK ("matched board %d\n", i);
+            break;
+        }
+    }
+    if ((i < NR_INFO) || ((prom[28] == 0x57) && (prom[30] == 0x57))) {
+        PRINTK ("on exit i is %d/%ld\n", i, NR_INFO);
+        PRINTK ("MAC address is ");
+        for (j = 0; j < 6; j++) {
+            mac_addr[j] = prom[j << 1];
+            PRINTK ("%02x:", mac_addr[i]);
+        }
+        PRINTK ("\n");
+        return (i < NR_INFO) ? hw_info+i : &default_info;
+    }
+    return NULL;
+}
+#endif
+
 u32 nic_base;
 
 /* U-boot specific routines */
diff --git a/drivers/net/ne2000.h b/drivers/net/ne2000.h
index d324a00..4a540c7 100644
--- a/drivers/net/ne2000.h
+++ b/drivers/net/ne2000.h
@@ -81,6 +81,7 @@ are GPL, so this is, of course, GPL.
 
 #define DP_DATA     0x10
 #define START_PG    0x50    /* First page of TX buffer */
+#define START_PG2   0x48
 #define STOP_PG     0x80    /* Last page +1 of RX ring */
 
 #define RX_START    0x50
@@ -91,89 +92,4 @@ are GPL, so this is, of course, GPL.
 #define DP_IN_DATA(_b_, _d_)  (_d_) = *( (vu_char *) ((_b_)))
 #define DP_OUT_DATA(_b_, _d_) *( (vu_char *) ((_b_))) = (_d_)
 
-static void pcnet_reset_8390(void)
-{
-    int i, r;
-
-    PRINTK("nic base is %lx\n", nic_base);
-
-    n2k_outb(E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD);
-    PRINTK("cmd (at %lx) is %x\n", nic_base+ E8390_CMD, 
n2k_inb(E8390_CMD));
-    n2k_outb(E8390_NODMA+E8390_PAGE1+E8390_STOP, E8390_CMD);
-    PRINTK("cmd (at %lx) is %x\n", nic_base+ E8390_CMD, 
n2k_inb(E8390_CMD));
-    n2k_outb(E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD);
-    PRINTK("cmd (at %lx) is %x\n", nic_base+ E8390_CMD, 
n2k_inb(E8390_CMD));
-    n2k_outb(E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD);
-
-    n2k_outb(n2k_inb(PCNET_RESET), PCNET_RESET);
-
-    for (i = 0; i < 100; i++) {
-        if ((r = (n2k_inb(EN0_ISR) & ENISR_RESET)) != 0)
-            break;
-        PRINTK("got %x in reset\n", r);
-        udelay(100);
-    }
-    n2k_outb(ENISR_RESET, EN0_ISR); /* Ack intr. */
-
-    if (i == 100)
-        printf("pcnet_reset_8390() did not complete.\n");
-} /* pcnet_reset_8390 */
-
-int get_prom(u8* mac_addr)
-{
-    u8 prom[32];
-    int i, j;
-    struct {
-        u_char value, offset;
-    } program_seq[] = {
-        {E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD}, /* Select page 0*/
-        {0x48,  EN0_DCFG},        /* Set byte-wide (0x48) access. */
-        {0x00,  EN0_RCNTLO},        /* Clear the count regs. */
-        {0x00,  EN0_RCNTHI},
-        {0x00,  EN0_IMR},        /* Mask completion irq. */
-        {0xFF,  EN0_ISR},
-        {E8390_RXOFF, EN0_RXCR},    /* 0x20  Set to monitor */
-        {E8390_TXOFF, EN0_TXCR},    /* 0x02  and loopback mode. */
-        {32,    EN0_RCNTLO},
-        {0x00,  EN0_RCNTHI},
-        {0x00,  EN0_RSARLO},        /* DMA starting@0x0000. */
-        {0x00,  EN0_RSARHI},
-        {E8390_RREAD+E8390_START, E8390_CMD},
-    };
-
-    PRINTK ("trying to get MAC via prom reading\n");
-
-    pcnet_reset_8390 ();
-
-    mdelay (10);
-
-    for (i = 0; i < sizeof (program_seq) / sizeof (program_seq[0]); i++)
-        n2k_outb (program_seq[i].value, program_seq[i].offset);
-
-    PRINTK ("PROM:");
-    for (i = 0; i < 32; i++) {
-        prom[i] = n2k_inb (PCNET_DATAPORT);
-        PRINTK (" %02x", prom[i]);
-    }
-    PRINTK ("\n");
-    for (i = 0; i < NR_INFO; i++) {
-        if ((prom[0] == hw_info[i].a0) &&
-            (prom[2] == hw_info[i].a1) &&
-            (prom[4] == hw_info[i].a2)) {
-            PRINTK ("matched board %d\n", i);
-            break;
-        }
-    }
-    if ((i < NR_INFO) || ((prom[28] == 0x57) && (prom[30] == 0x57))) {
-        PRINTK ("on exit i is %d/%ld\n", i, NR_INFO);
-        PRINTK ("MAC address is ");
-        for (j = 0; j < 6; j++) {
-            mac_addr[j] = prom[j << 1];
-            PRINTK ("%02x:", mac_addr[i]);
-        }
-        PRINTK ("\n");
-        return (i < NR_INFO) ? i : 0;
-    }
-    return NULL;
-}
 #endif /* __DRIVERS_NE2000_H__ */
diff --git a/drivers/net/ne2000_base.h b/drivers/net/ne2000_base.h
index 1badf62..18dc5fe 100644
--- a/drivers/net/ne2000_base.h
+++ b/drivers/net/ne2000_base.h
@@ -120,7 +120,7 @@ typedef struct dp83902a_priv_data {
  ------------------------------------------------------------------------
  Some forward declarations
 */
-int get_prom( u8* mac_addr);
+hw_info_t * get_prom( u8* mac_addr);
 static void dp83902a_poll(void);
 
 /* 
------------------------------------------------------------------------ */
-- 
1.5.4

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [U-Boot-Users] [PATCH] NE2000: Fix regresssion introduced by e710185aae90 on non AX88796
  2008-04-11 14:57 ` Vlad Lungu
@ 2008-04-12  5:00   ` Jean-Christophe PLAGNIOL-VILLARD
  2008-04-15  3:47     ` Ben Warren
  2008-04-20  6:36     ` Wolfgang Denk
  2008-04-20  6:36   ` [U-Boot-Users] ne2000 compile error Wolfgang Denk
  1 sibling, 2 replies; 6+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2008-04-12  5:00 UTC (permalink / raw)
  To: u-boot

Move non-inlied functions into specific drivers file
Set get_prom as weak

Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Signed-off-by: Vlad Lungu <vlad@comsys.ro>

diff --git a/drivers/net/Makefile b/drivers/net/Makefile
index eafd267..99e068b 100644
--- a/drivers/net/Makefile
+++ b/drivers/net/Makefile
@@ -42,7 +42,10 @@ COBJS-y += lan91c96.o
 COBJS-y += macb.o
 COBJS-y += mcffec.o
 COBJS-y += natsemi.o
-COBJS-$(CONFIG_DRIVER_NE2000) += ne2000.o
+ifeq ($(CONFIG_DRIVER_NE2000),y)
+COBJS-y += ne2000.o
+COBJS-$(CONFIG_DRIVER_AX88796L) += ax88796.o
+endif
 COBJS-y += netarm_eth.o
 COBJS-y += netconsole.o
 COBJS-y += ns7520_eth.o
diff --git a/drivers/net/ax88796.c b/drivers/net/ax88796.c
new file mode 100644
index 0000000..7e3e3bb
--- /dev/null
+++ b/drivers/net/ax88796.c
@@ -0,0 +1,155 @@
+/*
+ * (c) 2008 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+ * (c) 2007 Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+#include <common.h>
+#include "ax88796.h"
+
+/*
+ * Set 1 bit data
+ */
+static void ax88796_bitset(u32 bit)
+{
+	/* DATA1 */
+	if( bit )
+		EEDI_HIGH;
+	else
+		EEDI_LOW;
+
+	EECLK_LOW;
+	udelay(1000);
+	EECLK_HIGH;
+	udelay(1000);
+	EEDI_LOW;
+}
+
+/*
+ * Get 1 bit data
+ */
+static u8 ax88796_bitget(void)
+{
+	u8 bit;
+
+	EECLK_LOW;
+	udelay(1000);
+	/* DATA */
+	bit = EEDO;
+	EECLK_HIGH;
+	udelay(1000);
+
+	return bit;
+}
+
+/*
+ * Send COMMAND to EEPROM
+ */
+static void ax88796_eep_cmd(u8 cmd)
+{
+	ax88796_bitset(BIT_DUMMY);
+	switch(cmd){
+		case MAC_EEP_READ:
+			ax88796_bitset(1);
+			ax88796_bitset(1);
+			ax88796_bitset(0);
+			break;
+
+		case MAC_EEP_WRITE:
+			ax88796_bitset(1);
+			ax88796_bitset(0);
+			ax88796_bitset(1);
+			break;
+
+		case MAC_EEP_ERACE:
+			ax88796_bitset(1);
+			ax88796_bitset(1);
+			ax88796_bitset(1);
+			break;
+
+		case MAC_EEP_EWEN:
+			ax88796_bitset(1);
+			ax88796_bitset(0);
+			ax88796_bitset(0);
+			break;
+
+		case MAC_EEP_EWDS:
+			ax88796_bitset(1);
+			ax88796_bitset(0);
+			ax88796_bitset(0);
+			break;
+		default:
+			break;
+	}
+}
+
+static void ax88796_eep_setaddr(u16 addr)
+{
+	int i ;
+	for( i = 7 ; i >= 0 ; i-- )
+		ax88796_bitset(addr & (1 << i));
+}
+
+/*
+ * Get data from EEPROM
+ */
+static u16 ax88796_eep_getdata(void)
+{
+	ushort data = 0;
+	int i;
+
+	ax88796_bitget();	/* DUMMY */
+	for( i = 0 ; i < 16 ; i++ ){
+		data <<= 1;
+		data |= ax88796_bitget();
+	}
+	return data;
+}
+
+static void ax88796_mac_read(u8 *buff)
+{
+	int i ;
+	u16 data, addr = 0;
+
+	for( i = 0 ; i < 3; i++ )
+	{
+		EECS_HIGH;
+		EEDI_LOW;
+		udelay(1000);
+		/* READ COMMAND */
+		ax88796_eep_cmd(MAC_EEP_READ);
+		/* ADDRESS */
+		ax88796_eep_setaddr(addr++);
+		/* GET DATA */
+		data = ax88796_eep_getdata();
+		*buff++ = (uchar)(data & 0xff);
+		*buff++ = (uchar)((data >> 8) & 0xff);
+		EECLK_LOW;
+		EEDI_LOW;
+		EECS_LOW;
+	}
+}
+
+int get_prom(u8* mac_addr)
+{
+	u8 prom[32];
+	int i;
+
+	ax88796_mac_read(prom);
+	for (i = 0; i < 6; i++){
+		mac_addr[i] = prom[i];
+	}
+	return 1;
+}
diff --git a/drivers/net/ax88796.h b/drivers/net/ax88796.h
index 069ae80..aa342cb 100644
--- a/drivers/net/ax88796.h
+++ b/drivers/net/ax88796.h
@@ -79,139 +79,5 @@
 #endif
 
 
-/*
- * Set 1 bit data
- */
-static void ax88796_bitset(u32 bit)
-{
-	/* DATA1 */
-	if( bit )
-		EEDI_HIGH;
-	else
-		EEDI_LOW;
-
-	EECLK_LOW;
-	udelay(1000);
-	EECLK_HIGH;
-	udelay(1000);
-	EEDI_LOW;
-}
-
-/*
- * Get 1 bit data
- */
-static u8 ax88796_bitget(void)
-{
-	u8 bit;
-
-	EECLK_LOW;
-	udelay(1000);
-	/* DATA */
-	bit = EEDO;
-	EECLK_HIGH;
-	udelay(1000);
-
-	return bit;
-}
-
-/*
- * Send COMMAND to EEPROM
- */
-static void ax88796_eep_cmd(u8 cmd)
-{
-	ax88796_bitset(BIT_DUMMY);
-	switch(cmd){
-		case MAC_EEP_READ:
-			ax88796_bitset(1);
-			ax88796_bitset(1);
-			ax88796_bitset(0);
-			break;
-
-		case MAC_EEP_WRITE:
-			ax88796_bitset(1);
-			ax88796_bitset(0);
-			ax88796_bitset(1);
-			break;
-
-		case MAC_EEP_ERACE:
-			ax88796_bitset(1);
-			ax88796_bitset(1);
-			ax88796_bitset(1);
-			break;
-
-		case MAC_EEP_EWEN:
-			ax88796_bitset(1);
-			ax88796_bitset(0);
-			ax88796_bitset(0);
-			break;
-
-		case MAC_EEP_EWDS:
-			ax88796_bitset(1);
-			ax88796_bitset(0);
-			ax88796_bitset(0);
-			break;
-		default:
-			break;
-	}
-}
-
-static void ax88796_eep_setaddr(u16 addr)
-{
-	int i ;
-	for( i = 7 ; i >= 0 ; i-- )
-		ax88796_bitset(addr & (1 << i));
-}
-
-/*
- * Get data from EEPROM
- */
-static u16 ax88796_eep_getdata(void)
-{
-	ushort data = 0;
-	int i;
-
-	ax88796_bitget();	/* DUMMY */
-	for( i = 0 ; i < 16 ; i++ ){
-		data <<= 1;
-		data |= ax88796_bitget();
-	}
-	return data;
-}
-
-static void ax88796_mac_read(u8 *buff)
-{
-	int i ;
-	u16 data, addr = 0;
-
-	for( i = 0 ; i < 3; i++ )
-	{
-		EECS_HIGH;
-		EEDI_LOW;
-		udelay(1000);
-		/* READ COMMAND */
-		ax88796_eep_cmd(MAC_EEP_READ);
-		/* ADDRESS */
-		ax88796_eep_setaddr(addr++);
-		/* GET DATA */
-		data = ax88796_eep_getdata();
-		*buff++ = (uchar)(data & 0xff);
-		*buff++ = (uchar)((data >> 8) & 0xff);
-		EECLK_LOW;
-		EEDI_LOW;
-		EECS_LOW;
-	}
-}
-
-int get_prom(u8* mac_addr)
-{
-	u8 prom[32];
-	int i;
-
-	ax88796_mac_read(prom);
-	for (i = 0; i < 6; i++){
-		mac_addr[i] = prom[i];
-	}
-	return 1;
-}
 
 #endif /* __DRIVERS_AX88796L_H__ */
diff --git a/drivers/net/ne2000.c b/drivers/net/ne2000.c
index 99baeea..fc2ae5c 100644
--- a/drivers/net/ne2000.c
+++ b/drivers/net/ne2000.c
@@ -124,6 +124,9 @@ dp83902a_init(void)
 {
 	dp83902a_priv_data_t *dp = &nic;
 	u8* base;
+#if defined(NE2000_BASIC_INIT)
+    int i;
+#endif
 
 	DEBUG_FUNCTION();
 
@@ -729,8 +732,6 @@ static hw_info_t hw_info[] = {
 
 #define NR_INFO		(sizeof(hw_info)/sizeof(hw_info_t))
 
-static hw_info_t default_info = { 0, 0, 0, 0, 0 };
-
 u8 dev_addr[6];
 
 #define PCNET_CMD	0x00
@@ -738,6 +739,93 @@ u8 dev_addr[6];
 #define PCNET_RESET	0x1f	/* Issue a read to reset, a write to clear. */
 #define PCNET_MISC	0x18	/* For IBM CCAE and Socket EA cards */
 
+static void pcnet_reset_8390(void)
+{
+	int i, r;
+
+	PRINTK("nic base is %lx\n", nic_base);
+
+	n2k_outb(E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD);
+	PRINTK("cmd (at %lx) is %x\n", nic_base+ E8390_CMD, n2k_inb(E8390_CMD));
+	n2k_outb(E8390_NODMA+E8390_PAGE1+E8390_STOP, E8390_CMD);
+	PRINTK("cmd (at %lx) is %x\n", nic_base+ E8390_CMD, n2k_inb(E8390_CMD));
+	n2k_outb(E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD);
+	PRINTK("cmd (at %lx) is %x\n", nic_base+ E8390_CMD, n2k_inb(E8390_CMD));
+	n2k_outb(E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD);
+
+	n2k_outb(n2k_inb(PCNET_RESET), PCNET_RESET);
+
+	for (i = 0; i < 100; i++) {
+		if ((r = (n2k_inb(EN0_ISR) & ENISR_RESET)) != 0)
+			break;
+		PRINTK("got %x in reset\n", r);
+		udelay(100);
+	}
+	n2k_outb(ENISR_RESET, EN0_ISR); /* Ack intr. */
+
+	if (i == 100)
+		printf("pcnet_reset_8390() did not complete.\n");
+} /* pcnet_reset_8390 */
+
+int get_prom(u8* mac_addr) __attribute__ ((weak, alias ("__get_prom")));
+int __get_prom(u8* mac_addr)
+{
+	u8 prom[32];
+	int i, j;
+	struct {
+		u_char value, offset;
+	} program_seq[] = {
+		{E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD}, /* Select page 0*/
+		{0x48,  EN0_DCFG},		/* Set byte-wide (0x48) access. */
+		{0x00,  EN0_RCNTLO},		/* Clear the count regs. */
+		{0x00,  EN0_RCNTHI},
+		{0x00,  EN0_IMR},		/* Mask completion irq. */
+		{0xFF,  EN0_ISR},
+		{E8390_RXOFF, EN0_RXCR},	/* 0x20  Set to monitor */
+		{E8390_TXOFF, EN0_TXCR},	/* 0x02  and loopback mode. */
+		{32,    EN0_RCNTLO},
+		{0x00,  EN0_RCNTHI},
+		{0x00,  EN0_RSARLO},		/* DMA starting at 0x0000. */
+		{0x00,  EN0_RSARHI},
+		{E8390_RREAD+E8390_START, E8390_CMD},
+	};
+
+	PRINTK ("trying to get MAC via prom reading\n");
+
+	pcnet_reset_8390 ();
+
+	mdelay (10);
+
+	for (i = 0; i < sizeof (program_seq) / sizeof (program_seq[0]); i++)
+		n2k_outb (program_seq[i].value, program_seq[i].offset);
+
+	PRINTK ("PROM:");
+	for (i = 0; i < 32; i++) {
+		prom[i] = n2k_inb (PCNET_DATAPORT);
+		PRINTK (" %02x", prom[i]);
+	}
+	PRINTK ("\n");
+	for (i = 0; i < NR_INFO; i++) {
+		if ((prom[0] == hw_info[i].a0) &&
+		    (prom[2] == hw_info[i].a1) &&
+		    (prom[4] == hw_info[i].a2)) {
+			PRINTK ("matched board %d\n", i);
+			break;
+		}
+	}
+	if ((i < NR_INFO) || ((prom[28] == 0x57) && (prom[30] == 0x57))) {
+		PRINTK ("on exit i is %d/%ld\n", i, NR_INFO);
+		PRINTK ("MAC address is ");
+		for (j = 0; j < 6; j++) {
+			mac_addr[j] = prom[j << 1];
+			PRINTK ("%02x:", mac_addr[i]);
+		}
+		PRINTK ("\n");
+		return (i < NR_INFO) ? i : 0;
+	}
+	return 0;
+}
+
 u32 nic_base;
 
 /* U-boot specific routines */
@@ -764,7 +852,7 @@ void uboot_push_tx_done(int key, int val) {
 }
 
 int eth_init(bd_t *bd) {
-	static hw_info_t * r;
+	int r;
 	char ethaddr[20];
 
 	PRINTK("### eth_init\n");
diff --git a/drivers/net/ne2000.h b/drivers/net/ne2000.h
index d324a00..0b21612 100644
--- a/drivers/net/ne2000.h
+++ b/drivers/net/ne2000.h
@@ -81,6 +81,7 @@ are GPL, so this is, of course, GPL.
 
 #define DP_DATA     0x10
 #define START_PG    0x50    /* First page of TX buffer */
+#define START_PG2   0x48
 #define STOP_PG     0x80    /* Last page +1 of RX ring */
 
 #define RX_START    0x50
@@ -90,90 +91,4 @@ are GPL, so this is, of course, GPL.
 #define DP_OUT(_b_, _o_, _d_) *( (vu_char *) ((_b_)+(_o_))) = (_d_)
 #define DP_IN_DATA(_b_, _d_)  (_d_) = *( (vu_char *) ((_b_)))
 #define DP_OUT_DATA(_b_, _d_) *( (vu_char *) ((_b_))) = (_d_)
-
-static void pcnet_reset_8390(void)
-{
-	int i, r;
-
-	PRINTK("nic base is %lx\n", nic_base);
-
-	n2k_outb(E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD);
-	PRINTK("cmd (at %lx) is %x\n", nic_base+ E8390_CMD, n2k_inb(E8390_CMD));
-	n2k_outb(E8390_NODMA+E8390_PAGE1+E8390_STOP, E8390_CMD);
-	PRINTK("cmd (at %lx) is %x\n", nic_base+ E8390_CMD, n2k_inb(E8390_CMD));
-	n2k_outb(E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD);
-	PRINTK("cmd (at %lx) is %x\n", nic_base+ E8390_CMD, n2k_inb(E8390_CMD));
-	n2k_outb(E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD);
-
-	n2k_outb(n2k_inb(PCNET_RESET), PCNET_RESET);
-
-	for (i = 0; i < 100; i++) {
-		if ((r = (n2k_inb(EN0_ISR) & ENISR_RESET)) != 0)
-			break;
-		PRINTK("got %x in reset\n", r);
-		udelay(100);
-	}
-	n2k_outb(ENISR_RESET, EN0_ISR); /* Ack intr. */
-
-	if (i == 100)
-		printf("pcnet_reset_8390() did not complete.\n");
-} /* pcnet_reset_8390 */
-
-int get_prom(u8* mac_addr)
-{
-	u8 prom[32];
-	int i, j;
-	struct {
-		u_char value, offset;
-	} program_seq[] = {
-		{E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD}, /* Select page 0*/
-		{0x48,  EN0_DCFG},		/* Set byte-wide (0x48) access. */
-		{0x00,  EN0_RCNTLO},		/* Clear the count regs. */
-		{0x00,  EN0_RCNTHI},
-		{0x00,  EN0_IMR},		/* Mask completion irq. */
-		{0xFF,  EN0_ISR},
-		{E8390_RXOFF, EN0_RXCR},	/* 0x20  Set to monitor */
-		{E8390_TXOFF, EN0_TXCR},	/* 0x02  and loopback mode. */
-		{32,    EN0_RCNTLO},
-		{0x00,  EN0_RCNTHI},
-		{0x00,  EN0_RSARLO},		/* DMA starting@0x0000. */
-		{0x00,  EN0_RSARHI},
-		{E8390_RREAD+E8390_START, E8390_CMD},
-	};
-
-	PRINTK ("trying to get MAC via prom reading\n");
-
-	pcnet_reset_8390 ();
-
-	mdelay (10);
-
-	for (i = 0; i < sizeof (program_seq) / sizeof (program_seq[0]); i++)
-		n2k_outb (program_seq[i].value, program_seq[i].offset);
-
-	PRINTK ("PROM:");
-	for (i = 0; i < 32; i++) {
-		prom[i] = n2k_inb (PCNET_DATAPORT);
-		PRINTK (" %02x", prom[i]);
-	}
-	PRINTK ("\n");
-	for (i = 0; i < NR_INFO; i++) {
-		if ((prom[0] == hw_info[i].a0) &&
-		    (prom[2] == hw_info[i].a1) &&
-		    (prom[4] == hw_info[i].a2)) {
-			PRINTK ("matched board %d\n", i);
-			break;
-		}
-	}
-	if ((i < NR_INFO) || ((prom[28] == 0x57) && (prom[30] == 0x57))) {
-		PRINTK ("on exit i is %d/%ld\n", i, NR_INFO);
-		PRINTK ("MAC address is ");
-		for (j = 0; j < 6; j++) {
-			mac_addr[j] = prom[j << 1];
-			PRINTK ("%02x:", mac_addr[i]);
-		}
-		PRINTK ("\n");
-		return (i < NR_INFO) ? i : 0;
-	}
-	return NULL;
-}
 #endif /* __DRIVERS_NE2000_H__ */
diff --git a/drivers/net/ne2000_base.h b/drivers/net/ne2000_base.h
index 1badf62..d8768e8 100644
--- a/drivers/net/ne2000_base.h
+++ b/drivers/net/ne2000_base.h
@@ -120,7 +120,6 @@ typedef struct dp83902a_priv_data {
  ------------------------------------------------------------------------
  Some forward declarations
 */
-int get_prom( u8* mac_addr);
 static void dp83902a_poll(void);
 
 /* ------------------------------------------------------------------------ */
-- 
1.5.4.5

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [U-Boot-Users] [PATCH] NE2000: Fix regresssion introduced by e710185aae90 on non AX88796
  2008-04-12  5:00   ` [U-Boot-Users] [PATCH] NE2000: Fix regresssion introduced by e710185aae90 on non AX88796 Jean-Christophe PLAGNIOL-VILLARD
@ 2008-04-15  3:47     ` Ben Warren
  2008-04-20  6:36     ` Wolfgang Denk
  1 sibling, 0 replies; 6+ messages in thread
From: Ben Warren @ 2008-04-15  3:47 UTC (permalink / raw)
  To: u-boot

On Sat, Apr 12, 2008 at 1:00 AM, Jean-Christophe PLAGNIOL-VILLARD
<plagnioj@jcrosoft.com> wrote:
> Move non-inlied functions into specific drivers file
>  Set get_prom as weak
>
>  Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
>  Signed-off-by: Vlad Lungu <vlad@comsys.ro>
>
>  diff --git a/drivers/net/Makefile b/drivers/net/Makefile
>  index eafd267..99e068b 100644
>  --- a/drivers/net/Makefile
>  +++ b/drivers/net/Makefile
>  @@ -42,7 +42,10 @@ COBJS-y += lan91c96.o
>   COBJS-y += macb.o
>   COBJS-y += mcffec.o
>   COBJS-y += natsemi.o
>  -COBJS-$(CONFIG_DRIVER_NE2000) += ne2000.o
>  +ifeq ($(CONFIG_DRIVER_NE2000),y)
>  +COBJS-y += ne2000.o
>  +COBJS-$(CONFIG_DRIVER_AX88796L) += ax88796.o
>  +endif
>   COBJS-y += netarm_eth.o
>   COBJS-y += netconsole.o
>   COBJS-y += ns7520_eth.o
>  diff --git a/drivers/net/ax88796.c b/drivers/net/ax88796.c
>  new file mode 100644
>  index 0000000..7e3e3bb
>  --- /dev/null
>  +++ b/drivers/net/ax88796.c
>  @@ -0,0 +1,155 @@
>  +/*
>  + * (c) 2008 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
>  + * (c) 2007 Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
>  + *

Your work is appreciated, but moving code to a different file doesn't
entitle you to copyright.

regards,
Ben

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [U-Boot-Users] ne2000 compile error
  2008-04-11 14:57 ` Vlad Lungu
  2008-04-12  5:00   ` [U-Boot-Users] [PATCH] NE2000: Fix regresssion introduced by e710185aae90 on non AX88796 Jean-Christophe PLAGNIOL-VILLARD
@ 2008-04-20  6:36   ` Wolfgang Denk
  1 sibling, 0 replies; 6+ messages in thread
From: Wolfgang Denk @ 2008-04-20  6:36 UTC (permalink / raw)
  To: u-boot

In message <47FF7C44.6040600@comsys.ro> you wrote:
>
> Fixed it for now. #ifndef CONFIG_DRIVER_AX88796 could be replaced with 
> something a little more generic
> like a CFG_CUSTOM_GET_PROM_NE2000 or something. Or the code could be 
> implemented in a .c file and the
> generic get_prom() could be made weak. I think that implementing 
> non-static, non-inlined functions in header files
> is bad style. Breaking existing code in the process is even worse.

Unfortunately your patch is line wrapped and thus unusable.

Please fix your mailer setup and resubmit. I really recommend to use
git tools to send the messages.

> --- a/drivers/net/ne2000.c
> +++ b/drivers/net/ne2000.c
> @@ -125,6 +125,9 @@ dp83902a_init(void)
>      dp83902a_priv_data_t *dp = &nic;
>      u8* base;
>  
> +#if defined(NE2000_BASIC_INIT)
> +    int i;
> +#endif
>      DEBUG_FUNCTION();
>  
>      base = dp->base;
> @@ -738,6 +741,94 @@ u8 dev_addr[6];
>  #define PCNET_RESET    0x1f    /* Issue a read to reset, a write to 
> clear. */
^^^^^^^^^^^^^^^^^^^^ Here

>  #define PCNET_MISC    0x18    /* For IBM CCAE and Socket EA cards */
>  
> +#ifndef CONFIG_DRIVER_AX88796L
> +static void pcnet_reset_8390(void)
> +{
> +    int i, r;
> +
> +    PRINTK("nic base is %lx\n", nic_base);
> +
> +    n2k_outb(E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD);
> +    PRINTK("cmd (at %lx) is %x\n", nic_base+ E8390_CMD, 
> n2k_inb(E8390_CMD));
^^^^^^^^^^^^^^^^^^^^ Here

> +    n2k_outb(E8390_NODMA+E8390_PAGE1+E8390_STOP, E8390_CMD);
> +    PRINTK("cmd (at %lx) is %x\n", nic_base+ E8390_CMD, 
> n2k_inb(E8390_CMD));
^^^^^^^^^^^^^^^^^^^^ Here

> +    n2k_outb(E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD);
> +    PRINTK("cmd (at %lx) is %x\n", nic_base+ E8390_CMD, 
> n2k_inb(E8390_CMD));
^^^^^^^^^^^^^^^^^^^^ Here

And so on...

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
"The combination of a number of things to make existence worthwhile."
"Yes, the philosophy of 'none,' meaning 'all.'"
	-- Spock and Lincoln, "The Savage Curtain", stardate 5906.4

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [U-Boot-Users] [PATCH] NE2000: Fix regresssion introduced by e710185aae90 on non AX88796
  2008-04-12  5:00   ` [U-Boot-Users] [PATCH] NE2000: Fix regresssion introduced by e710185aae90 on non AX88796 Jean-Christophe PLAGNIOL-VILLARD
  2008-04-15  3:47     ` Ben Warren
@ 2008-04-20  6:36     ` Wolfgang Denk
  1 sibling, 0 replies; 6+ messages in thread
From: Wolfgang Denk @ 2008-04-20  6:36 UTC (permalink / raw)
  To: u-boot

In message <1207976419-6571-1-git-send-email-plagnioj@jcrosoft.com> you wrote:
> Move non-inlied functions into specific drivers file
> Set get_prom as weak
> 
> Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
> Signed-off-by: Vlad Lungu <vlad@comsys.ro>

Are you planning to fix and resubmit the patch according to Ben's
comment?

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
"Here's a fish hangs in the net like a poor man's right in  the  law.
'Twill hardly come out."     - Shakespeare, Pericles, Act II, Scene 1

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2008-04-20  6:36 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-04-09 14:29 [U-Boot-Users] ne2000 compile error Shinya Kuribayashi
2008-04-11 14:57 ` Vlad Lungu
2008-04-12  5:00   ` [U-Boot-Users] [PATCH] NE2000: Fix regresssion introduced by e710185aae90 on non AX88796 Jean-Christophe PLAGNIOL-VILLARD
2008-04-15  3:47     ` Ben Warren
2008-04-20  6:36     ` Wolfgang Denk
2008-04-20  6:36   ` [U-Boot-Users] ne2000 compile error Wolfgang Denk

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.