1 // SPDX-License-Identifier: GPL-2.0+
5 * Copyright (c) 2016-2018 Alexander Graf et al.
9 #include <efi_loader.h>
11 #define OBJ_LIST_NOT_INITIALIZED 1
13 static efi_status_t efi_obj_list_initialized = OBJ_LIST_NOT_INITIALIZED;
16 * efi_init_platform_lang() - define supported languages
18 * Set the PlatformLangCodes and PlatformLang variables.
22 static efi_status_t efi_init_platform_lang(void)
25 efi_uintn_t data_size = 0;
26 char *lang = CONFIG_EFI_PLATFORM_LANG_CODES;
30 * Variable PlatformLangCodes defines the language codes that the
31 * machine can support.
33 ret = EFI_CALL(efi_set_variable(L"PlatformLangCodes",
34 &efi_global_variable_guid,
35 EFI_VARIABLE_BOOTSERVICE_ACCESS |
36 EFI_VARIABLE_RUNTIME_ACCESS,
37 sizeof(CONFIG_EFI_PLATFORM_LANG_CODES),
38 CONFIG_EFI_PLATFORM_LANG_CODES));
39 if (ret != EFI_SUCCESS)
43 * Variable PlatformLang defines the language that the machine has been
46 ret = EFI_CALL(efi_get_variable(L"PlatformLang",
47 &efi_global_variable_guid,
48 NULL, &data_size, &pos));
49 if (ret == EFI_BUFFER_TOO_SMALL) {
50 /* The variable is already set. Do not change it. */
56 * The list of supported languages is semicolon separated. Use the first
57 * language to initialize PlatformLang.
59 pos = strchr(lang, ';');
63 ret = EFI_CALL(efi_set_variable(L"PlatformLang",
64 &efi_global_variable_guid,
65 EFI_VARIABLE_NON_VOLATILE |
66 EFI_VARIABLE_BOOTSERVICE_ACCESS |
67 EFI_VARIABLE_RUNTIME_ACCESS,
68 1 + strlen(lang), lang));
70 if (ret != EFI_SUCCESS)
71 printf("EFI: cannot initialize platform language settings\n");
76 * efi_init_obj_list() - Initialize and populate EFI object list
80 efi_status_t efi_init_obj_list(void)
82 efi_status_t ret = EFI_SUCCESS;
84 /* Initialize once only */
85 if (efi_obj_list_initialized != OBJ_LIST_NOT_INITIALIZED)
86 return efi_obj_list_initialized;
88 /* Define supported languages */
89 ret = efi_init_platform_lang();
90 if (ret != EFI_SUCCESS)
93 /* Initialize system table */
94 ret = efi_initialize_system_table();
95 if (ret != EFI_SUCCESS)
98 /* Initialize root node */
99 ret = efi_root_node_register();
100 if (ret != EFI_SUCCESS)
103 /* Initialize EFI driver uclass */
104 ret = efi_driver_init();
105 if (ret != EFI_SUCCESS)
108 ret = efi_console_register();
109 if (ret != EFI_SUCCESS)
111 #ifdef CONFIG_PARTITIONS
112 ret = efi_disk_register();
113 if (ret != EFI_SUCCESS)
116 #if defined(CONFIG_LCD) || defined(CONFIG_DM_VIDEO)
117 ret = efi_gop_register();
118 if (ret != EFI_SUCCESS)
122 ret = efi_net_register();
123 if (ret != EFI_SUCCESS)
126 #ifdef CONFIG_GENERATE_ACPI_TABLE
127 ret = efi_acpi_register();
128 if (ret != EFI_SUCCESS)
131 #ifdef CONFIG_GENERATE_SMBIOS_TABLE
132 ret = efi_smbios_register();
133 if (ret != EFI_SUCCESS)
136 ret = efi_watchdog_register();
137 if (ret != EFI_SUCCESS)
140 /* Initialize EFI runtime services */
141 ret = efi_reset_system_init();
142 if (ret != EFI_SUCCESS)
146 efi_obj_list_initialized = ret;