[PATCH 5/9] efi_loader/net: Remove efi_net_obj struct

Heinrich Schuchardt xypron.glpk at gmx.de
Mon May 26 11:04:18 CEST 2025


On 16.05.25 10:18, Adriano Cordova wrote:
> As all the protocols moved out of efi_net.c, and EFI
> net object is just an efi_object struct with network
> protocols installed on it, so efi_net_obj is not
> needed anymore.
> 
> Signed-off-by: Adriano Cordova <adriano.cordova at canonical.com>

Acked-by: Heinrich Schuchardt <xypron.glpk at gmx.de>

> ---
>   include/efi_loader.h                    |  2 +-
>   lib/efi_loader/net/efi_net.c            | 76 +++++++++----------------
>   lib/efi_loader/net/efi_simple_network.c | 10 ++--
>   3 files changed, 32 insertions(+), 56 deletions(-)
> 
> diff --git a/include/efi_loader.h b/include/efi_loader.h
> index cc90bdf6a3a..b53f88674fc 100644
> --- a/include/efi_loader.h
> +++ b/include/efi_loader.h
> @@ -660,7 +660,7 @@ efi_status_t efi_gop_register(void);
>   efi_status_t efi_net_register(struct udevice *dev);
>   efi_status_t efi_net_do_start(struct udevice *dev);
>   /* Called by efi_net_register to install EFI_SIMPLE_NETWORK_PROTOCOL */
> -efi_status_t efi_simple_network_install(const efi_handle_t handle, struct udevice *dev);
> +efi_status_t efi_simple_network_install(const efi_handle_t handle);
>   /* Called by efi_net_register to install EFI_PXE_BASE_CODE_PROTOCOL */
>   efi_status_t efi_pxe_install(const efi_handle_t handle, struct efi_pxe_packet *dhcp_ack);
>   /* Called by efi_net_register to install EFI_IP4_CONFIG2_PROTOCOL */
> diff --git a/lib/efi_loader/net/efi_net.c b/lib/efi_loader/net/efi_net.c
> index a7ceef4cbba..498ec4a0a8c 100644
> --- a/lib/efi_loader/net/efi_net.c
> +++ b/lib/efi_loader/net/efi_net.c
> @@ -57,32 +57,7 @@ struct dhcp_entry {
>   static struct dhcp_entry dhcp_cache[MAX_NUM_DHCP_ENTRIES];
>   static int next_dhcp_entry;
>   
> -/**
> - * struct efi_net_obj - EFI object representing a network interface
> - *
> - * @header:			EFI object header
> - * @dev:			net udevice
> - */
> -struct efi_net_obj {
> -	struct efi_object header;
> -	struct udevice *dev;
> -};
> -
> -static struct efi_net_obj *net_objs[MAX_EFI_NET_OBJS];
> -
> -/**
> - * efi_netobj_is_active() - checks if a netobj is active in the efi subsystem
> - *
> - * @netobj:	pointer to efi_net_obj
> - * Return:	true if active
> - */
> -static bool efi_netobj_is_active(struct efi_net_obj *netobj)
> -{
> -	if (!netobj || !efi_search_obj(&netobj->header))
> -		return false;
> -
> -	return true;
> -}
> +static efi_handle_t net_objs[MAX_EFI_NET_OBJS];
>   
>   /**
>    * efi_net_set_dhcp_ack() - take note of a selected DHCP IP address
> @@ -124,7 +99,7 @@ void efi_net_set_dhcp_ack(void *pkt, int len)
>   	for (i = 0; i < MAX_EFI_NET_OBJS; i++) {
>   		if (net_objs[i] && net_objs[i]->dev == dev) {
>   			phandler = NULL;
> -			r = efi_search_protocol(&net_objs[i]->header,
> +			r = efi_search_protocol(net_objs[i],
>   						&efi_pxe_base_code_protocol_guid,
>   						&phandler);
>   			if (r == EFI_SUCCESS && phandler) {
> @@ -139,17 +114,17 @@ void efi_net_set_dhcp_ack(void *pkt, int len)
>   /**
>    * efi_netobj_set_dp() - set device path of a netobj
>    *
> - * @netobj:	pointer to efi_net_obj
> + * @netobj:	handle of an EFI net device
>    * @dp:		device path to set, allocated by caller
>    * Return:	status code
>    */
> -efi_status_t efi_netobj_set_dp(struct efi_net_obj *netobj, struct efi_device_path *dp)
> +efi_status_t efi_netobj_set_dp(efi_handle_t netobj, struct efi_device_path *dp)
>   {
>   	efi_status_t ret;
>   	struct efi_handler *phandler;
>   	struct efi_device_path *new_net_dp;
>   
> -	if (!efi_netobj_is_active(netobj))
> +	if (!efi_search_obj(netobj))
>   		return EFI_SUCCESS;
>   
>   	// Create a device path for the netobj
> @@ -158,21 +133,21 @@ efi_status_t efi_netobj_set_dp(struct efi_net_obj *netobj, struct efi_device_pat
>   		return EFI_OUT_OF_RESOURCES;
>   
>   	phandler = NULL;
> -	efi_search_protocol(&netobj->header, &efi_guid_device_path, &phandler);
> +	efi_search_protocol(netobj, &efi_guid_device_path, &phandler);
>   
>   	// If the device path protocol is not yet installed, install it
>   	if (!phandler)
>   		goto add;
>   
>   	// If it is already installed, try to update it
> -	ret = efi_reinstall_protocol_interface(&netobj->header, &efi_guid_device_path,
> +	ret = efi_reinstall_protocol_interface(netobj, &efi_guid_device_path,
>   					       phandler->protocol_interface, new_net_dp);
>   	if (ret != EFI_SUCCESS)
>   		return ret;
>   
>   	return EFI_SUCCESS;
>   add:
> -	ret = efi_add_protocol(&netobj->header, &efi_guid_device_path,
> +	ret = efi_add_protocol(netobj, &efi_guid_device_path,
>   			       new_net_dp);
>   	if (ret != EFI_SUCCESS)
>   		return ret;
> @@ -183,18 +158,18 @@ add:
>   /**
>    * efi_netobj_get_dp() - get device path of a netobj
>    *
> - * @netobj:	pointer to efi_net_obj
> + * @netobj:	handle to EFI net object
>    * Return:	device path, NULL on error
>    */
> -static struct efi_device_path *efi_netobj_get_dp(struct efi_net_obj *netobj)
> +static struct efi_device_path *efi_netobj_get_dp(efi_handle_t netobj)
>   {
>   	struct efi_handler *phandler;
>   
> -	if (!efi_netobj_is_active(netobj))
> +	if (!efi_search_obj(netobj))
>   		return NULL;
>   
>   	phandler = NULL;
> -	efi_search_protocol(&netobj->header, &efi_guid_device_path, &phandler);
> +	efi_search_protocol(netobj, &efi_guid_device_path, &phandler);
>   
>   	if (phandler && phandler->protocol_interface)
>   		return efi_dp_dup(phandler->protocol_interface);
> @@ -213,7 +188,7 @@ static struct efi_device_path *efi_netobj_get_dp(struct efi_net_obj *netobj)
>   efi_status_t efi_net_do_start(struct udevice *dev)
>   {
>   	efi_status_t r = EFI_SUCCESS;
> -	struct efi_net_obj *netobj;
> +	efi_handle_t netobj;
>   	struct efi_device_path *net_dp;
>   #if IS_ENABLED(CONFIG_EFI_HTTP_PROTOCOL)
>   	struct efi_handler *phandler;
> @@ -229,7 +204,7 @@ efi_status_t efi_net_do_start(struct udevice *dev)
>   		}
>   	}
>   
> -	if (!efi_netobj_is_active(netobj))
> +	if (!efi_search_obj(netobj))
>   		return r;
>   
>   	efi_net_dp_from_dev(&net_dp, netobj->dev, true);
> @@ -257,7 +232,7 @@ set_addr:
>   	 * but the PXE protocol is not yet implmenented, so we add this in the meantime.
>   	 */
>   	pxe = NULL;
> -	r = efi_search_protocol(&netobj->header,
> +	r = efi_search_protocol(netobj,
>   				&efi_pxe_base_code_protocol_guid,
>   				&phandler);
>   	if (r == EFI_SUCCESS && phandler) {
> @@ -280,7 +255,7 @@ efi_status_t efi_net_register(struct udevice *dev)
>   {
>   	efi_status_t r;
>   	int seq_num;
> -	struct efi_net_obj *netobj;
> +	efi_handle_t netobj;
>   	struct efi_pxe_packet *dhcp_ack;
>   	int i, j;
>   
> @@ -313,13 +288,14 @@ efi_status_t efi_net_register(struct udevice *dev)
>   		return EFI_OUT_OF_RESOURCES;
>   	}
>   
> -	netobj->dev = dev;
> -
>   	/* Hook net up to the device list */
> -	efi_add_handle(&netobj->header);
> +	efi_add_handle(netobj);
> +
> +	if (efi_link_dev(netobj, dev) < 0)
> +		return EFI_DEVICE_ERROR;
>   
>   	/* Install EFI_SIMPLE_NETWORK_PROTOCOL */
> -	r = efi_simple_network_install(&netobj->header, dev);
> +	r = efi_simple_network_install(netobj);
>   	if (r != EFI_SUCCESS)
>   		goto failure_to_add_protocol;
>   
> @@ -338,19 +314,19 @@ efi_status_t efi_net_register(struct udevice *dev)
>   	}
>   
>   	/* Install EFI_PXE_BASE_CODE_PROTOCOL */
> -	r = efi_pxe_install(&netobj->header, dhcp_ack);
> +	r = efi_pxe_install(netobj, dhcp_ack);
>   	if (r != EFI_SUCCESS)
>   		goto failure_to_add_protocol;
>   
>   #if IS_ENABLED(CONFIG_EFI_IP4_CONFIG2_PROTOCOL)
>   	/* Install EFI_IP4_CONFIG2_PROTOCOL */
> -	r = efi_ip4_config2_install(&netobj->header);
> +	r = efi_ip4_config2_install(netobj);
>   	if (r != EFI_SUCCESS)
>   		goto failure_to_add_protocol;
>   #endif
>   #ifdef CONFIG_EFI_HTTP_PROTOCOL
>   	/* Install EFI_HTTP_PROTOCOL */
> -	r = efi_http_install(&netobj->header);
> +	r = efi_http_install(netobj);
>   	if (r != EFI_SUCCESS)
>   		goto failure_to_add_protocol;
>   #endif
> @@ -376,7 +352,7 @@ failure_to_add_protocol:
>   efi_status_t efi_net_new_dp(const char *dev, const char *server, struct udevice *udev)
>   {
>   	efi_status_t ret;
> -	struct efi_net_obj *netobj;
> +	efi_handle_t netobj;
>   	struct efi_device_path *old_net_dp, *new_net_dp;
>   	struct efi_device_path **dp;
>   	int i;
> @@ -708,7 +684,7 @@ efi_status_t efi_net_do_request(u8 *url, enum efi_http_method method, void **buf
>   		if (!net_objs[i])
>   			continue;
>   
> -		ret = efi_search_protocol(&net_objs[i]->header,
> +		ret = efi_search_protocol(net_objs[i],
>   					  &efi_http_service_binding_guid,
>   					  &phandler);
>   		if (ret == EFI_SUCCESS && phandler &&
> diff --git a/lib/efi_loader/net/efi_simple_network.c b/lib/efi_loader/net/efi_simple_network.c
> index c7c03062b11..5426d366e21 100644
> --- a/lib/efi_loader/net/efi_simple_network.c
> +++ b/lib/efi_loader/net/efi_simple_network.c
> @@ -758,7 +758,7 @@ out:
>    * @handle:	handle to install the protocol
>    * @dev:	net udevice
>    */
> -efi_status_t efi_simple_network_install(const efi_handle_t handle, struct udevice *dev)
> +efi_status_t efi_simple_network_install(const efi_handle_t handle)
>   {
>   	efi_status_t r;
>   	struct efi_simple_network_extended_protocol *simple_network;
> @@ -767,7 +767,7 @@ efi_status_t efi_simple_network_install(const efi_handle_t handle, struct udevic
>   	size_t *receive_lengths;
>   	int i;
>   
> -	if (!dev) {
> +	if (!handle || !handle->dev) {
>   		/* No network device active, don't expose any */
>   		return EFI_SUCCESS;
>   	}
> @@ -777,7 +777,7 @@ efi_status_t efi_simple_network_install(const efi_handle_t handle, struct udevic
>   	if (!simple_network)
>   		goto out_of_resources;
>   
> -	simple_network->dev = dev;
> +	simple_network->dev = handle->dev;
>   
>   	/* Allocate an aligned transmit buffer */
>   	transmit_buffer = calloc(1, PKTSIZE_ALIGN + PKTALIGN);
> @@ -820,9 +820,9 @@ efi_status_t efi_simple_network_install(const efi_handle_t handle, struct udevic
>   	simple_network->net.receive = efi_net_receive;
>   	simple_network->net.mode = &simple_network->net_mode;
>   	simple_network->net_mode.state = EFI_NETWORK_STOPPED;
> -	if (dev_get_plat(dev))
> +	if (dev_get_plat(handle->dev))
>   		memcpy(simple_network->net_mode.current_address.mac_addr,
> -		       ((struct eth_pdata *)dev_get_plat(dev))->enetaddr, 6);
> +		       ((struct eth_pdata *)dev_get_plat(handle->dev))->enetaddr, 6);
>   	simple_network->net_mode.hwaddr_size = ARP_HLEN;
>   	simple_network->net_mode.media_header_size = ETHER_HDR_SIZE;
>   	simple_network->net_mode.max_packet_size = PKTSIZE;



More information about the U-Boot mailing list