efi_loader: comments EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
[oweals/u-boot.git] / lib / efi_loader / efi_disk.c
index 0582e02158fc172179e0c407bccd505773d6c65f..670bf2b8ef0185961662d14db1a0a1fc3d51c0c7 100644 (file)
@@ -356,6 +356,7 @@ static efi_status_t efi_disk_add_dev(
                                struct efi_disk_obj **disk)
 {
        struct efi_disk_obj *diskobj;
+       struct efi_object *handle;
        efi_status_t ret;
 
        /* Don't add empty devices */
@@ -379,15 +380,25 @@ static efi_status_t efi_disk_add_dev(
                diskobj->dp = efi_dp_from_part(desc, part);
        }
        diskobj->part = part;
-       ret = efi_add_protocol(&diskobj->header, &efi_block_io_guid,
-                              &diskobj->ops);
-       if (ret != EFI_SUCCESS)
-               return ret;
-       ret = efi_add_protocol(&diskobj->header, &efi_guid_device_path,
-                              diskobj->dp);
+
+       /*
+        * Install the device path and the block IO protocol.
+        *
+        * InstallMultipleProtocolInterfaces() checks if the device path is
+        * already installed on an other handle and returns EFI_ALREADY_STARTED
+        * in this case.
+        */
+       handle = &diskobj->header;
+       ret = EFI_CALL(efi_install_multiple_protocol_interfaces(
+                       &handle, &efi_guid_device_path, diskobj->dp,
+                       &efi_block_io_guid, &diskobj->ops, NULL));
        if (ret != EFI_SUCCESS)
                return ret;
-       /* partitions or whole disk without partitions */
+
+       /*
+        * On partitions or whole disks without partitions install the
+        * simple file system protocol if a file system is available.
+        */
        if ((part || desc->part_type == PART_TYPE_UNKNOWN) &&
            efi_fs_exists(desc, part)) {
                diskobj->volume = efi_simple_file_system(desc, part,
@@ -424,7 +435,7 @@ static efi_status_t efi_disk_add_dev(
        /* Store first EFI system partition */
        if (part && !efi_system_partition.if_type) {
                int r;
-               disk_partition_t info;
+               struct disk_partition info;
 
                r = part_get_info(desc, part, &info);
                if (r)
@@ -459,7 +470,7 @@ int efi_disk_create_partitions(efi_handle_t parent, struct blk_desc *desc,
 {
        int disks = 0;
        char devname[32] = { 0 }; /* dp->str is u16[32] long */
-       disk_partition_t info;
+       struct disk_partition info;
        int part;
        struct efi_device_path *dp = NULL;
        efi_status_t ret;
@@ -600,7 +611,7 @@ bool efi_disk_is_system_part(efi_handle_t handle)
 {
        struct efi_handler *handler;
        struct efi_disk_obj *diskobj;
-       disk_partition_t info;
+       struct disk_partition info;
        efi_status_t ret;
        int r;