net: Fix net buffer initialization

A new non-static function net_init() will initialize buffers and
read from the environment.  Only update from the env on each entry
to NetLoop().

Signed-off-by: Joe Hershberger <joe.hershberger@ni.com>
Acked-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Joe Hershberger 2012-05-23 07:59:22 +00:00
parent cb1c991120
commit 46c495d524
2 changed files with 32 additions and 14 deletions

View file

@ -436,6 +436,7 @@ extern IPaddr_t Mcast_addr;
#endif
/* Initialize the network adapter */
extern void net_init(void);
extern int NetLoop(enum proto_t);
/* Shutdown adapters and cleanup */

View file

@ -265,6 +265,31 @@ static void net_cleanup_loop(void)
net_clear_handlers();
}
void net_init(void)
{
static int first_call = 1;
if (first_call) {
/*
* Setup packet buffers, aligned correctly.
*/
int i;
NetTxPacket = &PktBuf[0] + (PKTALIGN - 1);
NetTxPacket -= (ulong)NetTxPacket % PKTALIGN;
for (i = 0; i < PKTBUFSRX; i++)
NetRxPackets[i] = NetTxPacket + (i + 1) * PKTSIZE_ALIGN;
ArpInit();
net_clear_handlers();
/* Only need to setup buffer pointers once. */
first_call = 0;
}
NetInitLoop();
}
/**********************************************************************/
/*
* Main network processing loop.
@ -272,28 +297,15 @@ static void net_cleanup_loop(void)
int NetLoop(enum proto_t protocol)
{
int i;
bd_t *bd = gd->bd;
int ret = -1;
NetRestarted = 0;
NetDevExists = 0;
NetTxPacket = NULL;
NetTryCount = 1;
ArpInit();
net_clear_handlers();
/*
* Setup packet buffers, aligned correctly.
*/
NetTxPacket = &PktBuf[0] + (PKTALIGN - 1);
NetTxPacket -= (ulong)NetTxPacket % PKTALIGN;
for (i = 0; i < PKTBUFSRX; i++)
NetRxPackets[i] = NetTxPacket + (i+1)*PKTSIZE_ALIGN;
bootstage_mark_name(BOOTSTAGE_ID_ETH_START, "eth_start");
net_init();
eth_halt();
eth_set_current();
if (eth_init(bd) < 0) {
@ -624,6 +636,11 @@ int NetSendUDPPacket(uchar *ether, IPaddr_t dest, int dport, int sport,
int eth_hdr_size;
int pkt_hdr_size;
/* make sure the NetTxPacket is initialized (NetInit() was called) */
assert(NetTxPacket != NULL);
if (NetTxPacket == NULL)
return -1;
/* convert to new style broadcast */
if (dest == 0)
dest = 0xFFFFFFFF;