diff options
author | Heinrich Schuchardt <xypron.glpk@gmx.de> | 2017-11-26 14:05:13 +0100 |
---|---|---|
committer | Alexander Graf <agraf@suse.de> | 2017-12-01 13:36:40 +0100 |
commit | 84d14568ca1a70ffd8925c357e3db2a6a8437922 (patch) | |
tree | 55d4ec7b1cc4353e7f5fc53dca9e35405aba6125 | |
parent | 4b9f7aaf7c33eee196b7d203b99c2cdf2eaec803 (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.c | 34 |
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; } |