All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alexander Graf <agraf@suse.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 1/1] efi_loader: completely initialize network
Date: Wed, 4 Apr 2018 11:42:53 +0200	[thread overview]
Message-ID: <2b47ed2f-c7cc-c6f0-3a7a-4e1c6b398c79@suse.de> (raw)
In-Reply-To: <20180403200652.25471-1-xypron.glpk@gmx.de>



On 03.04.18 22:06, Heinrich Schuchardt wrote:
> Add missing network initialization code.
> 
> Before the patch the network was only usable if a network command like
> dhcp or tftp had beed executed.
> 
> This was visible when interrupting the console countdown and executing
> bootefi selftest for vexpress_ca15_tc2_defconfig.
> 
> Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
> ---
>  lib/efi_loader/efi_net.c | 36 ++++++++++++++++++++++++++++++++++--
>  1 file changed, 34 insertions(+), 2 deletions(-)
> 
> diff --git a/lib/efi_loader/efi_net.c b/lib/efi_loader/efi_net.c
> index 3d860e658e..9afe76cdb3 100644
> --- a/lib/efi_loader/efi_net.c
> +++ b/lib/efi_loader/efi_net.c
> @@ -54,14 +54,46 @@ static efi_status_t EFIAPI efi_net_stop(struct efi_simple_network *this)
>  	return EFI_EXIT(EFI_SUCCESS);
>  }
>  
> +/*
> + * Initialize network adapter and allocate transmit and receive buffers.
> + *
> + * This function implements the Initialize service of the
> + * EFI_SIMPLE_NETWORK_PROTOCOL. See the Unified Extensible Firmware Interface
> + * (UEFI) specification for details.
> + *
> + * @this:	pointer to the protocol instance
> + * @extra_rx:	extra receive buffer to be allocated
> + * @extra_tx:	extra transmit buffer to be allocated
> + * @return:	status code
> + */
>  static efi_status_t EFIAPI efi_net_initialize(struct efi_simple_network *this,
>  					      ulong extra_rx, ulong extra_tx)
>  {
> +	int ret;
> +	efi_status_t r = EFI_SUCCESS;
> +
>  	EFI_ENTRY("%p, %lx, %lx", this, extra_rx, extra_tx);
>  
> -	eth_init();
> +	if (!this) {
> +		r = EFI_INVALID_PARAMETER;
> +		goto error;
> +	}
>  
> -	return EFI_EXIT(EFI_SUCCESS);
> +	/* Setup packet buffers */
> +	net_init();
> +	/* Disable hardware and put it into the reset state */
> +	eth_halt();
> +	/* Set current device according to environment variables */
> +	eth_set_current();

Is there any way to do the above dance only when needed? Some network
adapters can take quite a while to initialize and I'd prefer to not go
through that when not absolutely necessary.


Alex

> +	/* Get hardware ready for send and receive operations */
> +	ret = eth_init();
> +	if (ret < 0) {
> +		eth_halt();
> +		r = EFI_DEVICE_ERROR;
> +	}
> +
> +error:
> +	return EFI_EXIT(r);
>  }
>  
>  static efi_status_t EFIAPI efi_net_reset(struct efi_simple_network *this,
> 

  reply	other threads:[~2018-04-04  9:42 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-03 20:06 [U-Boot] [PATCH 1/1] efi_loader: completely initialize network Heinrich Schuchardt
2018-04-04  9:42 ` Alexander Graf [this message]
2018-04-04 11:20   ` Heinrich Schuchardt
  -- strict thread matches above, loose matches on Subject: below --
2018-04-02 13:58 Heinrich Schuchardt

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=2b47ed2f-c7cc-c6f0-3a7a-4e1c6b398c79@suse.de \
    --to=agraf@suse.de \
    --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.