From 1f103105a3746ab12279b63b8c1d372c0ce2cc58 Mon Sep 17 00:00:00 2001 From: Roy Zang Date: Mon, 5 Nov 2007 17:39:24 +0800 Subject: Implement general ULi 526x Ethernet driver support in U-boot This patch implements general ULi 526x Ethernet driver. Until now, it is the only native Ethernet port on MPC8610HPCD board, but it could be used on other boards with ULi 526x Ethernet port as well. Signed-off-by: Roy Zang Signed-off-by: Zhang Wei Acked-by: Jon Loeliger Signed-off-by: Ben Warren --- net/eth.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'net/eth.c') diff --git a/net/eth.c b/net/eth.c index e7f1220..1b56a35 100644 --- a/net/eth.c +++ b/net/eth.c @@ -54,6 +54,7 @@ extern int rtl8169_initialize(bd_t*); extern int scc_initialize(bd_t*); extern int skge_initialize(bd_t*); extern int tsi108_eth_initialize(bd_t*); +extern int uli526x_initialize(bd_t *); extern int tsec_initialize(bd_t*, int, char *); extern int npe_initialize(bd_t *); extern int uec_initialize(int); @@ -238,6 +239,9 @@ int eth_initialize(bd_t *bis) #if defined(CONFIG_TSI108_ETH) tsi108_eth_initialize(bis); #endif +#if defined(CONFIG_ULI526X) + uli526x_initialize(bis); +#endif #if defined(CONFIG_RTL8139) rtl8139_initialize(bis); #endif -- cgit v1.1 From f85b60710571b37293d2233933b76e2aa3db5635 Mon Sep 17 00:00:00 2001 From: Rafal Jaworowski Date: Thu, 27 Dec 2007 18:19:02 +0100 Subject: Introduce new eth_receive routine The purpose of this routine is receiving a single network frame, outside of U-Boot's NetLoop(). Exporting it to standalone programs that run on top of U-Boot will let them utilise networking facilities. For sending a raw frame the already existing eth_send() can be used. The direct consumer of this routine is the newly introduced API layer for external applications (enabled with CONFIG_API). Signed-off-by: Rafal Jaworowski Signed-off-by: Piotr Kruszynski Signed-off-by: Ben Warren --- net/eth.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) (limited to 'net/eth.c') diff --git a/net/eth.c b/net/eth.c index 1b56a35..4657f79 100644 --- a/net/eth.c +++ b/net/eth.c @@ -62,6 +62,17 @@ extern int bfin_EMAC_initialize(bd_t *); extern int atstk1000_eth_initialize(bd_t *); extern int mcffec_initialize(bd_t*); +#ifdef CONFIG_API +extern void (*push_packet)(volatile void *, int); + +static struct { + uchar data[PKTSIZE]; + int length; +} eth_rcv_bufs[PKTBUFSRX]; + +static unsigned int eth_rcv_current = 0, eth_rcv_last = 0; +#endif + static struct eth_device *eth_devices, *eth_current; struct eth_device *eth_get_dev(void) @@ -457,6 +468,53 @@ int eth_rx(void) return eth_current->recv(eth_current); } +#ifdef CONFIG_API +static void eth_save_packet(volatile void *packet, int length) +{ + volatile char *p = packet; + int i; + + if ((eth_rcv_last+1) % PKTBUFSRX == eth_rcv_current) + return; + + if (PKTSIZE < length) + return; + + for (i = 0; i < length; i++) + eth_rcv_bufs[eth_rcv_last].data[i] = p[i]; + + eth_rcv_bufs[eth_rcv_last].length = length; + eth_rcv_last = (eth_rcv_last + 1) % PKTBUFSRX; +} + +int eth_receive(volatile void *packet, int length) +{ + volatile char *p = packet; + void *pp = push_packet; + int i; + + if (eth_rcv_current == eth_rcv_last) { + push_packet = eth_save_packet; + eth_rx(); + push_packet = pp; + + if (eth_rcv_current == eth_rcv_last) + return -1; + } + + if (length < eth_rcv_bufs[eth_rcv_current].length) + return -1; + + length = eth_rcv_bufs[eth_rcv_current].length; + + for (i = 0; i < length; i++) + p[i] = eth_rcv_bufs[eth_rcv_current].data[i]; + + eth_rcv_current = (eth_rcv_current + 1) % PKTBUFSRX; + return length; +} +#endif /* CONFIG_API */ + void eth_try_another(int first_restart) { static struct eth_device *first_failed = NULL; -- cgit v1.1 From 5ca2d0953e4579a80810966cca2077e20d912c97 Mon Sep 17 00:00:00 2001 From: Shinya Kuribayashi Date: Mon, 19 Nov 2007 20:27:04 +0900 Subject: net/eth.c: Fix env_enetaddr signed overflow Assigning the output of simple_strtoul(CB:A9:87:65:43:21) to `char', we are warned as below: U-Boot 1.2.0 (Aug 30 2007 - 08:27:37) DRAM: 256 MB Flash: 32 MB In: serial Out: serial Err: serial Net: NEC-Candy Warning: NEC-Candy MAC addresses don't match: Address in SROM is 00:00:4C:80:92:A2 Address in environment is FFFFFFCB:FFFFFFA9:FFFFFF87:65:43:21 This patch changes env_enetaddr type from `char' to `unsigned char'. Cc: Masaki Ishikawa Signed-off-by: Shinya Kuribayashi Signed-off-by: Ben Warren --- net/eth.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'net/eth.c') diff --git a/net/eth.c b/net/eth.c index 4657f79..425f29e 100644 --- a/net/eth.c +++ b/net/eth.c @@ -149,7 +149,8 @@ int eth_register(struct eth_device* dev) int eth_initialize(bd_t *bis) { - char enetvar[32], env_enetaddr[6]; + char enetvar[32]; + unsigned char env_enetaddr[6]; int i, eth_number = 0; char *tmp, *end; -- cgit v1.1 From 505be87a65e4f87ad7d8da1d57ea4dcd487d7e32 Mon Sep 17 00:00:00 2001 From: Upakul Barkakaty Date: Thu, 29 Nov 2007 12:16:13 +0530 Subject: NET: Proper return code handling in eth_init() function in file eth.c This patch modifies the return code handling in the eth_init() function, to be compatible with the handling of the return codes in the other network stack files. It now returns a 0 on Success and -1 on error. Signed-off-by: Upakul Barkakaty Signed-off-by: Ben Warren --- net/eth.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'net/eth.c') diff --git a/net/eth.c b/net/eth.c index 425f29e..3373a05 100644 --- a/net/eth.c +++ b/net/eth.c @@ -424,23 +424,23 @@ int eth_init(bd_t *bis) struct eth_device* old_current; if (!eth_current) - return 0; + return -1; old_current = eth_current; do { debug ("Trying %s\n", eth_current->name); - if (eth_current->init(eth_current, bis)) { + if (!eth_current->init(eth_current,bis)) { eth_current->state = ETH_STATE_ACTIVE; - return 1; + return 0; } debug ("FAIL\n"); eth_try_another(0); } while (old_current != eth_current); - return 0; + return -1; } void eth_halt(void) -- cgit v1.1 From ccf21c311e68d48399eff1e72936052885f6e3f7 Mon Sep 17 00:00:00 2001 From: Joakim Tjernlund Date: Thu, 6 Dec 2007 16:43:40 +0100 Subject: Add support CONFIG_UEC_ETH3 in MPC83xx Signed-off-by: Joakim Tjernlund --- net/eth.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'net/eth.c') diff --git a/net/eth.c b/net/eth.c index 3373a05..d2fced8 100644 --- a/net/eth.c +++ b/net/eth.c @@ -214,6 +214,9 @@ int eth_initialize(bd_t *bis) #if defined(CONFIG_UEC_ETH2) uec_initialize(1); #endif +#if defined(CONFIG_UEC_ETH3) + uec_initialize(2); +#endif #if defined(FEC_ENET) || defined(CONFIG_ETHER_ON_FCC) fec_initialize(bis); -- cgit v1.1