[U-Boot] [PATCH v2 16/18] net: Fix net buffer initialization

Simon Glass sjg at chromium.org
Sat Apr 21 04:35:00 CEST 2012


Hi Joe,

On Tue, Mar 27, 2012 at 4:43 PM, Joe Hershberger <joe.hershberger at ni.com> wrote:
> 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 at ni.com>
> Cc: Joe Hershberger <joe.hershberger at gmail.com>
> Cc: Simon Glass <sjg at chromium.org>
> Cc: Mike Frysinger <vapier at gentoo.org>

Some nits, but:

Acked-by: Simon Glass <sjg at chromium.org>

> ---
> Changes for v2:
>   - Unadded explicit parameter name in net.h for NetLoop
>   - Eliminate CamelCase from new functions
>   - Changed null pointer print to an assert
>
>  include/net.h |    1 +
>  net/net.c     |   44 ++++++++++++++++++++++++++++++--------------
>  2 files changed, 31 insertions(+), 14 deletions(-)
>
> diff --git a/include/net.h b/include/net.h
> index 33570c7..2c47604 100644
> --- a/include/net.h
> +++ b/include/net.h
> @@ -430,6 +430,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 */
> diff --git a/net/net.c b/net/net.c
> index 2cfb115..01e7b29 100644
> --- a/net/net.c
> +++ b/net/net.c
> @@ -267,6 +267,30 @@ 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;

blank line after

> +               NetTxPacket = &PktBuf[0] + (PKTALIGN - 1);
> +               NetTxPacket -= (ulong)NetTxPacket % PKTALIGN;
> +               for (i = 0; i < PKTBUFSRX; i++)
> +                       NetRxPackets[i] = NetTxPacket + (i+1)*PKTSIZE_ALIGN;

Spaces around operators

> +
> +               ArpInit();
> +               net_clear_handlers();
> +
> +               /* Only need to setup buffer pointers once. */
> +               first_call = 0;
> +       }
> +
> +       NetInitLoop();
> +}
> +
>  /**********************************************************************/
>  /*
>  *     Main network processing loop.
> @@ -274,28 +298,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) {
> @@ -627,6 +638,11 @@ 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;
> --
> 1.6.0.2
>


More information about the U-Boot mailing list