|
@@ -1193,34 +1193,45 @@ void efi_setup_loaded_image(struct efi_loaded_image *info, struct efi_object *ob
|
|
|
struct efi_device_path *device_path,
|
|
|
struct efi_device_path *file_path)
|
|
|
{
|
|
|
+ efi_status_t ret;
|
|
|
+
|
|
|
obj->handle = info;
|
|
|
|
|
|
+ info->file_path = file_path;
|
|
|
+ if (device_path)
|
|
|
+ info->device_handle = efi_dp_find_obj(device_path, NULL);
|
|
|
+
|
|
|
+ list_add_tail(&obj->link, &efi_obj_list);
|
|
|
/*
|
|
|
* When asking for the device path interface, return
|
|
|
* bootefi_device_path
|
|
|
*/
|
|
|
- obj->protocols[0].guid = &efi_guid_device_path;
|
|
|
- obj->protocols[0].protocol_interface = device_path;
|
|
|
+ ret = efi_add_protocol(obj->handle, &efi_guid_device_path, device_path);
|
|
|
+ if (ret != EFI_SUCCESS)
|
|
|
+ goto failure;
|
|
|
|
|
|
/*
|
|
|
* When asking for the loaded_image interface, just
|
|
|
* return handle which points to loaded_image_info
|
|
|
*/
|
|
|
- obj->protocols[1].guid = &efi_guid_loaded_image;
|
|
|
- obj->protocols[1].protocol_interface = info;
|
|
|
-
|
|
|
- obj->protocols[2].guid = &efi_guid_console_control;
|
|
|
- obj->protocols[2].protocol_interface = (void *)&efi_console_control;
|
|
|
+ ret = efi_add_protocol(obj->handle, &efi_guid_loaded_image, info);
|
|
|
+ if (ret != EFI_SUCCESS)
|
|
|
+ goto failure;
|
|
|
|
|
|
- obj->protocols[3].guid = &efi_guid_device_path_to_text_protocol;
|
|
|
- obj->protocols[3].protocol_interface =
|
|
|
- (void *)&efi_device_path_to_text;
|
|
|
+ ret = efi_add_protocol(obj->handle, &efi_guid_console_control,
|
|
|
+ (void *)&efi_console_control);
|
|
|
+ if (ret != EFI_SUCCESS)
|
|
|
+ goto failure;
|
|
|
|
|
|
- info->file_path = file_path;
|
|
|
- if (device_path)
|
|
|
- info->device_handle = efi_dp_find_obj(device_path, NULL);
|
|
|
+ ret = efi_add_protocol(obj->handle,
|
|
|
+ &efi_guid_device_path_to_text_protocol,
|
|
|
+ (void *)&efi_device_path_to_text);
|
|
|
+ if (ret != EFI_SUCCESS)
|
|
|
+ goto failure;
|
|
|
|
|
|
- list_add_tail(&obj->link, &efi_obj_list);
|
|
|
+ return;
|
|
|
+failure:
|
|
|
+ printf("ERROR: Failure to install protocols for loaded image\n");
|
|
|
}
|
|
|
|
|
|
/*
|