efi_loader: efi_net: use efi_add_protocol
authorHeinrich Schuchardt <xypron.glpk@gmx.de>
Sun, 26 Nov 2017 13:05:13 +0000 (14:05 +0100)
committerAlexander Graf <agraf@suse.de>
Fri, 1 Dec 2017 12:36:40 +0000 (13:36 +0100)
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>
lib/efi_loader/efi_net.c

index a7b101e830b5151a2a0cea532ae52c50be4b4914..8b2f682351a299b90d314d80f8ead87328c90587 100644 (file)
@@ -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;
 }