blob: e5246f65df26d14a00d1ad7c98295ece606aa165 [file] [log] [blame]
Heinrich Schuchardt79d72022018-09-20 21:58:23 +02001// SPDX-License-Identifier: GPL-2.0+
2/*
3 * Root node for system services
4 *
5 * Copyright (c) 2018 Heinrich Schuchardt
6 */
7
Heinrich Schuchardt955a3212025-01-16 20:26:59 +01008#define LOG_CATEGORY LOGC_EFI
9
Heinrich Schuchardt79d72022018-09-20 21:58:23 +020010#include <malloc.h>
Heinrich Schuchardt2c1e2242020-12-13 10:30:24 +010011#include <efi_dt_fixup.h>
Heinrich Schuchardt79d72022018-09-20 21:58:23 +020012#include <efi_loader.h>
13
14const efi_guid_t efi_u_boot_guid = U_BOOT_GUID;
15
AKASHI Takahiro0b275752019-04-16 13:24:20 +090016efi_handle_t efi_root = NULL;
17
Heinrich Schuchardt79d72022018-09-20 21:58:23 +020018struct efi_root_dp {
19 struct efi_device_path_vendor vendor;
20 struct efi_device_path end;
21} __packed;
22
23/**
24 * efi_root_node_register() - create root node
25 *
26 * Create the root node on which we install all protocols that are
27 * not related to a loaded image or a driver.
28 *
29 * Return: status code
30 */
31efi_status_t efi_root_node_register(void)
32{
Heinrich Schuchardt2e0a7902019-05-05 16:55:06 +020033 efi_status_t ret;
Heinrich Schuchardt79d72022018-09-20 21:58:23 +020034 struct efi_root_dp *dp;
35
Heinrich Schuchardt22b9fb92019-04-12 07:14:43 +020036 /* Create device path protocol */
Heinrich Schuchardt79d72022018-09-20 21:58:23 +020037 dp = calloc(1, sizeof(*dp));
38 if (!dp)
39 return EFI_OUT_OF_RESOURCES;
40
41 /* Fill vendor node */
42 dp->vendor.dp.type = DEVICE_PATH_TYPE_HARDWARE_DEVICE;
43 dp->vendor.dp.sub_type = DEVICE_PATH_SUB_TYPE_VENDOR;
44 dp->vendor.dp.length = sizeof(struct efi_device_path_vendor);
45 dp->vendor.guid = efi_u_boot_guid;
46
47 /* Fill end node */
48 dp->end.type = DEVICE_PATH_TYPE_END;
49 dp->end.sub_type = DEVICE_PATH_SUB_TYPE_END;
50 dp->end.length = sizeof(struct efi_device_path);
51
Heinrich Schuchardt22b9fb92019-04-12 07:14:43 +020052 /* Create root node and install protocols */
Ilias Apalodimas8ac0ebe2022-10-06 16:08:46 +030053 ret = efi_install_multiple_protocol_interfaces
54 (&efi_root,
55 /* Device path protocol */
56 &efi_guid_device_path, dp,
Heinrich Schuchardt3db35912019-05-11 09:53:33 +020057#if CONFIG_IS_ENABLED(EFI_DEVICE_PATH_TO_TEXT)
Ilias Apalodimas8ac0ebe2022-10-06 16:08:46 +030058 /* Device path to text protocol */
59 &efi_guid_device_path_to_text_protocol,
60 &efi_device_path_to_text,
Heinrich Schuchardt3db35912019-05-11 09:53:33 +020061#endif
Simon Glass3e26ee42023-02-05 15:39:41 -070062#if IS_ENABLED(CONFIG_EFI_DEVICE_PATH_UTIL)
Ilias Apalodimas8ac0ebe2022-10-06 16:08:46 +030063 /* Device path utilities protocol */
64 &efi_guid_device_path_utilities_protocol,
65 &efi_device_path_utilities,
Heinrich Schuchardt1cb1a9d2021-01-16 09:44:25 +010066#endif
Ilias Apalodimas8ac0ebe2022-10-06 16:08:46 +030067#if CONFIG_IS_ENABLED(EFI_DT_FIXUP)
68 /* Device-tree fix-up protocol */
69 &efi_guid_dt_fixup_protocol,
70 &efi_dt_fixup_prot,
Heinrich Schuchardt2c1e2242020-12-13 10:30:24 +010071#endif
Simon Glass8f438112023-02-05 15:39:47 -070072#if IS_ENABLED(CONFIG_EFI_UNICODE_COLLATION_PROTOCOL2)
Ilias Apalodimas8ac0ebe2022-10-06 16:08:46 +030073 &efi_guid_unicode_collation_protocol2,
74 &efi_unicode_collation_protocol2,
Heinrich Schuchardt532fec72019-05-08 23:24:26 +020075#endif
Simon Glass6b52ab52023-02-05 15:39:43 -070076#if IS_ENABLED(CONFIG_EFI_LOADER_HII)
Ilias Apalodimas8ac0ebe2022-10-06 16:08:46 +030077 /* HII string protocol */
78 &efi_guid_hii_string_protocol,
79 &efi_hii_string,
80 /* HII database protocol */
81 &efi_guid_hii_database_protocol,
82 &efi_hii_database,
Heinrich Schuchardt8f96be62025-01-02 19:11:31 +010083 /* EFI HII Configuration Routing Protocol */
84 &efi_guid_hii_config_routing_protocol,
85 &efi_hii_config_routing,
Heinrich Schuchardt926e6962019-04-07 23:53:53 +020086#endif
Ilias Apalodimas8ac0ebe2022-10-06 16:08:46 +030087 NULL);
Heinrich Schuchardt2e0a7902019-05-05 16:55:06 +020088 efi_root->type = EFI_OBJECT_TYPE_U_BOOT_FIRMWARE;
89 return ret;
Heinrich Schuchardt79d72022018-09-20 21:58:23 +020090}