summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHeinrich Schuchardt <xypron.glpk@gmx.de>2017-11-26 14:05:13 +0100
committerAlexander Graf <agraf@suse.de>2017-12-01 13:36:40 +0100
commit84d14568ca1a70ffd8925c357e3db2a6a8437922 (patch)
tree55d4ec7b1cc4353e7f5fc53dca9e35405aba6125
parent4b9f7aaf7c33eee196b7d203b99c2cdf2eaec803 (diff)
efi_loader: efi_net: use efi_add_protocol
Use efi_add_protocol to add protocols. Reviewed-by: Simon Glass <sjg@chromium.org> Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de> Signed-off-by: Alexander Graf <agraf@suse.de>
-rw-r--r--lib/efi_loader/efi_net.c34
1 files changed, 20 insertions, 14 deletions
diff --git a/lib/efi_loader/efi_net.c b/lib/efi_loader/efi_net.c
index a7b101e830..8b2f682351 100644
--- a/lib/efi_loader/efi_net.c
+++ b/lib/efi_loader/efi_net.c
@@ -292,20 +292,26 @@ int efi_net_register(void)
/* We only expose the "active" eth device, so one is enough */
netobj = calloc(1, sizeof(*netobj));
- if (!netobj) {
- printf("ERROR: Out of memory\n");
- return 1;
- }
+ if (!netobj)
+ goto out_of_memory;
+
+ /* Hook net up to the device list */
+ list_add_tail(&netobj->parent.link, &efi_obj_list);
/* Fill in object data */
- netobj->parent.protocols[0].guid = &efi_net_guid;
- netobj->parent.protocols[0].protocol_interface = &netobj->net;
- netobj->parent.protocols[1].guid = &efi_guid_device_path;
- netobj->parent.protocols[1].protocol_interface =
- efi_dp_from_eth();
- netobj->parent.protocols[2].guid = &efi_pxe_guid;
- netobj->parent.protocols[2].protocol_interface = &netobj->pxe;
netobj->parent.handle = &netobj->net;
+ r = efi_add_protocol(netobj->parent.handle, &efi_net_guid,
+ &netobj->net);
+ if (r != EFI_SUCCESS)
+ goto out_of_memory;
+ r = efi_add_protocol(netobj->parent.handle, &efi_guid_device_path,
+ efi_dp_from_eth());
+ if (r != EFI_SUCCESS)
+ goto out_of_memory;
+ r = efi_add_protocol(netobj->parent.handle, &efi_pxe_guid,
+ &netobj->pxe);
+ if (r != EFI_SUCCESS)
+ goto out_of_memory;
netobj->net.revision = EFI_SIMPLE_NETWORK_PROTOCOL_REVISION;
netobj->net.start = efi_net_start;
netobj->net.stop = efi_net_stop;
@@ -330,9 +336,6 @@ int efi_net_register(void)
if (dhcp_ack)
netobj->pxe_mode.dhcp_ack = *dhcp_ack;
- /* Hook net up to the device list */
- list_add_tail(&netobj->parent.link, &efi_obj_list);
-
/*
* Create WaitForPacket event.
*/
@@ -365,4 +368,7 @@ int efi_net_register(void)
}
return 0;
+out_of_memory:
+ printf("ERROR: Out of memory\n");
+ return 1;
}