All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vlad Lungu <vlad@comsys.ro>
To: u-boot@lists.denx.de
Subject: [U-Boot-Users] ne2000 compile error
Date: Fri, 11 Apr 2008 17:57:08 +0300	[thread overview]
Message-ID: <47FF7C44.6040600@comsys.ro> (raw)
In-Reply-To: <47FCD2C1.6020101@ruby.dti.ne.jp>

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

  reply	other threads:[~2008-04-11 14:57 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-04-09 14:29 [U-Boot-Users] ne2000 compile error Shinya Kuribayashi
2008-04-11 14:57 ` Vlad Lungu [this message]
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

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=47FF7C44.6040600@comsys.ro \
    --to=vlad@comsys.ro \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.