efi_loader: simplify protocol installation

By using InstallMultipleProtocolInterfaces() the coding for installing
protocol interfaces on the root node can be simplified.

Suggested-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
This commit is contained in:
Heinrich Schuchardt 2019-04-12 07:14:43 +02:00
parent 7657ae12f3
commit f1465c1597

View file

@ -26,16 +26,10 @@ struct efi_root_dp {
*/ */
efi_status_t efi_root_node_register(void) efi_status_t efi_root_node_register(void)
{ {
efi_handle_t root; efi_handle_t root = NULL;
efi_status_t ret;
struct efi_root_dp *dp; struct efi_root_dp *dp;
/* Create handle */ /* Create device path protocol */
ret = efi_create_handle(&root);
if (ret != EFI_SUCCESS)
return ret;
/* Install device path protocol */
dp = calloc(1, sizeof(*dp)); dp = calloc(1, sizeof(*dp));
if (!dp) if (!dp)
return EFI_OUT_OF_RESOURCES; return EFI_OUT_OF_RESOURCES;
@ -51,49 +45,29 @@ efi_status_t efi_root_node_register(void)
dp->end.sub_type = DEVICE_PATH_SUB_TYPE_END; dp->end.sub_type = DEVICE_PATH_SUB_TYPE_END;
dp->end.length = sizeof(struct efi_device_path); dp->end.length = sizeof(struct efi_device_path);
/* Install device path protocol */ /* Create root node and install protocols */
ret = efi_add_protocol(root, &efi_guid_device_path, dp); return EFI_CALL(efi_install_multiple_protocol_interfaces(&root,
if (ret != EFI_SUCCESS) /* Device path protocol */
goto failure; &efi_guid_device_path, dp,
/* Device path to text protocol */
/* Install device path to text protocol */ &efi_guid_device_path_to_text_protocol,
ret = efi_add_protocol(root, &efi_guid_device_path_to_text_protocol, (void *)&efi_device_path_to_text,
(void *)&efi_device_path_to_text); /* Device path utilities protocol */
if (ret != EFI_SUCCESS) &efi_guid_device_path_utilities_protocol,
goto failure; (void *)&efi_device_path_utilities,
/* Unicode collation protocol */
/* Install device path utilities protocol */ &efi_guid_unicode_collation_protocol,
ret = efi_add_protocol(root, &efi_guid_device_path_utilities_protocol, (void *)&efi_unicode_collation_protocol,
(void *)&efi_device_path_utilities);
if (ret != EFI_SUCCESS)
goto failure;
/* Install Unicode collation protocol */
ret = efi_add_protocol(root, &efi_guid_unicode_collation_protocol,
(void *)&efi_unicode_collation_protocol);
if (ret != EFI_SUCCESS)
goto failure;
#if CONFIG_IS_ENABLED(EFI_LOADER_HII) #if CONFIG_IS_ENABLED(EFI_LOADER_HII)
/* Install HII string protocol */ /* HII string protocol */
ret = efi_add_protocol(root, &efi_guid_hii_string_protocol, &efi_guid_hii_string_protocol,
(void *)&efi_hii_string); (void *)&efi_hii_string,
if (ret != EFI_SUCCESS) /* HII database protocol */
goto failure; &efi_guid_hii_database_protocol,
(void *)&efi_hii_database,
/* Install HII database protocol */ /* HII configuration routing protocol */
ret = efi_add_protocol(root, &efi_guid_hii_database_protocol, &efi_guid_hii_config_routing_protocol,
(void *)&efi_hii_database); (void *)&efi_hii_config_routing,
if (ret != EFI_SUCCESS)
goto failure;
/* Install HII configuration routing protocol */
ret = efi_add_protocol(root, &efi_guid_hii_config_routing_protocol,
(void *)&efi_hii_config_routing);
if (ret != EFI_SUCCESS)
goto failure;
#endif #endif
NULL));
failure:
return ret;
} }