efi_loader: move efi_save_gd() call to board_r.c
[platform/kernel/u-boot.git] / lib / efi_loader / efi_setup.c
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  *  EFI setup code
4  *
5  *  Copyright (c) 2016-2018 Alexander Graf et al.
6  */
7
8 #include <common.h>
9 #include <efi_loader.h>
10
11 #define OBJ_LIST_NOT_INITIALIZED 1
12
13 /* Language code for American English according to RFC 4646 */
14 #define EN_US L"en-US"
15
16 static efi_status_t efi_obj_list_initialized = OBJ_LIST_NOT_INITIALIZED;
17
18 /* Initialize and populate EFI object list */
19 efi_status_t efi_init_obj_list(void)
20 {
21         efi_status_t ret = EFI_SUCCESS;
22
23         /*
24          * Variable PlatformLang defines the language that the machine has been
25          * configured for.
26          */
27         ret = EFI_CALL(efi_set_variable(L"PlatformLang",
28                                         &efi_global_variable_guid,
29                                         EFI_VARIABLE_BOOTSERVICE_ACCESS |
30                                         EFI_VARIABLE_RUNTIME_ACCESS,
31                                         sizeof(EN_US), EN_US));
32         if (ret != EFI_SUCCESS)
33                 goto out;
34
35         /*
36          * Variable PlatformLangCodes defines the language codes that the
37          * machine can support.
38          */
39         ret = EFI_CALL(efi_set_variable(L"PlatformLangCodes",
40                                         &efi_global_variable_guid,
41                                         EFI_VARIABLE_BOOTSERVICE_ACCESS |
42                                         EFI_VARIABLE_RUNTIME_ACCESS,
43                                         sizeof(EN_US), EN_US));
44         if (ret != EFI_SUCCESS)
45                 goto out;
46
47         /* Initialize once only */
48         if (efi_obj_list_initialized != OBJ_LIST_NOT_INITIALIZED)
49                 return efi_obj_list_initialized;
50
51         /* Initialize system table */
52         ret = efi_initialize_system_table();
53         if (ret != EFI_SUCCESS)
54                 goto out;
55
56         /* Initialize root node */
57         ret = efi_root_node_register();
58         if (ret != EFI_SUCCESS)
59                 goto out;
60
61         /* Initialize EFI driver uclass */
62         ret = efi_driver_init();
63         if (ret != EFI_SUCCESS)
64                 goto out;
65
66         ret = efi_console_register();
67         if (ret != EFI_SUCCESS)
68                 goto out;
69 #ifdef CONFIG_PARTITIONS
70         ret = efi_disk_register();
71         if (ret != EFI_SUCCESS)
72                 goto out;
73 #endif
74 #if defined(CONFIG_LCD) || defined(CONFIG_DM_VIDEO)
75         ret = efi_gop_register();
76         if (ret != EFI_SUCCESS)
77                 goto out;
78 #endif
79 #ifdef CONFIG_NET
80         ret = efi_net_register();
81         if (ret != EFI_SUCCESS)
82                 goto out;
83 #endif
84 #ifdef CONFIG_GENERATE_ACPI_TABLE
85         ret = efi_acpi_register();
86         if (ret != EFI_SUCCESS)
87                 goto out;
88 #endif
89 #ifdef CONFIG_GENERATE_SMBIOS_TABLE
90         ret = efi_smbios_register();
91         if (ret != EFI_SUCCESS)
92                 goto out;
93 #endif
94         ret = efi_watchdog_register();
95         if (ret != EFI_SUCCESS)
96                 goto out;
97
98         /* Initialize EFI runtime services */
99         ret = efi_reset_system_init();
100         if (ret != EFI_SUCCESS)
101                 goto out;
102
103 out:
104         efi_obj_list_initialized = ret;
105         return ret;
106 }