diff options
author | Heinrich Schuchardt <xypron.glpk@gmx.de> | 2017-11-26 14:05:12 +0100 |
---|---|---|
committer | Alexander Graf <agraf@suse.de> | 2017-12-01 13:36:17 +0100 |
commit | 4b9f7aaf7c33eee196b7d203b99c2cdf2eaec803 (patch) | |
tree | bb10498e6414b7c3b0274f77cd51858d4e09d17c /lib | |
parent | bf19064bdc4187b1851d45ded9a93e4867193a9c (diff) | |
download | u-boot-4b9f7aaf7c33eee196b7d203b99c2cdf2eaec803.zip u-boot-4b9f7aaf7c33eee196b7d203b99c2cdf2eaec803.tar.gz u-boot-4b9f7aaf7c33eee196b7d203b99c2cdf2eaec803.tar.bz2 |
efi_loader: efi_disk: use efi_add_protocol
Use efi_add_protocol to install 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>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/efi_loader/efi_disk.c | 39 |
1 files changed, 23 insertions, 16 deletions
diff --git a/lib/efi_loader/efi_disk.c b/lib/efi_loader/efi_disk.c index c6f0d73..1d6cf31 100644 --- a/lib/efi_loader/efi_disk.c +++ b/lib/efi_loader/efi_disk.c @@ -213,33 +213,40 @@ static void efi_disk_add_dev(const char *name, unsigned int part) { struct efi_disk_obj *diskobj; + efi_status_t ret; /* Don't add empty devices */ if (!desc->lba) return; diskobj = calloc(1, sizeof(*diskobj)); - if (!diskobj) { - printf("ERROR: Out of memory\n"); - return; - } + if (!diskobj) + goto out_of_memory; + + /* Hook up to the device list */ + list_add_tail(&diskobj->parent.link, &efi_obj_list); /* Fill in object data */ diskobj->dp = efi_dp_from_part(desc, part); diskobj->part = part; - diskobj->parent.protocols[0].guid = &efi_block_io_guid; - diskobj->parent.protocols[0].protocol_interface = &diskobj->ops; - diskobj->parent.protocols[1].guid = &efi_guid_device_path; - diskobj->parent.protocols[1].protocol_interface = diskobj->dp; + diskobj->parent.handle = diskobj; + ret = efi_add_protocol(diskobj->parent.handle, &efi_block_io_guid, + &diskobj->ops); + if (ret != EFI_SUCCESS) + goto out_of_memory; + ret = efi_add_protocol(diskobj->parent.handle, &efi_guid_device_path, + diskobj->dp); + if (ret != EFI_SUCCESS) + goto out_of_memory; if (part >= 1) { diskobj->volume = efi_simple_file_system(desc, part, diskobj->dp); - diskobj->parent.protocols[2].guid = - &efi_simple_file_system_protocol_guid; - diskobj->parent.protocols[2].protocol_interface = - diskobj->volume; + ret = efi_add_protocol(diskobj->parent.handle, + &efi_simple_file_system_protocol_guid, + &diskobj->volume); + if (ret != EFI_SUCCESS) + goto out_of_memory; } - diskobj->parent.handle = diskobj; diskobj->ops = block_io_disk_template; diskobj->ifname = if_typename; diskobj->dev_index = dev_index; @@ -253,9 +260,9 @@ static void efi_disk_add_dev(const char *name, diskobj->media.io_align = desc->blksz; diskobj->media.last_block = desc->lba - offset; diskobj->ops.media = &diskobj->media; - - /* Hook up to the device list */ - list_add_tail(&diskobj->parent.link, &efi_obj_list); + return; +out_of_memory: + printf("ERROR: Out of memory\n"); } static int efi_disk_create_eltorito(struct blk_desc *desc, |