[U-Boot] [RFC] efi: workaround for SCT (against unicode collation protocol)
AKASHI Takahiro
takahiro.akashi at linaro.org
Mon Oct 1 07:35:56 UTC 2018
UEFI SCT doesn't run on the latest u-boot (or Alex's efi-next).
Among other issues, there are two problems around language handling:
1. SCT looks for efi_unicode_collation_protocol with an (old?) guid,
{0x1d85cd7f, 0xf43d, 0x11d2,
0x9a, 0x0c, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d)
2. SCT uses a hard-coded language name, "eng," in SctInializeLib()
These assumptions conflict with Heinrich's current unicode implementation.
While this patch fixes them in a quick way, it's more of an informative
one so that we will share and discuss them.
Signed-off-by: AKASHI Takahiro <takahiro.akashi at linaro.org>
---
include/efi_api.h | 3 +++
include/efi_loader.h | 3 +++
lib/efi_loader/efi_root_node.c | 2 ++
lib/efi_loader/efi_unicode_collation.c | 13 +++++++++++++
4 files changed, 21 insertions(+)
diff --git a/include/efi_api.h b/include/efi_api.h
index daaaa78d72b0..841b680581c0 100644
--- a/include/efi_api.h
+++ b/include/efi_api.h
@@ -1262,6 +1262,9 @@ struct efi_driver_binding_protocol {
efi_handle_t driver_binding_handle;
};
+#define EFI_UNICODE_COLLATION_PROTOCOL_GUID \
+ EFI_GUID(0x1d85cd7f, 0xf43d, 0x11d2, \
+ 0x9a, 0x0c, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d)
#define EFI_UNICODE_COLLATION_PROTOCOL2_GUID \
EFI_GUID(0xa4c751fc, 0x23ae, 0x4c3e, \
0x92, 0xe9, 0x49, 0x64, 0xcf, 0x63, 0xf3, 0x49)
diff --git a/include/efi_loader.h b/include/efi_loader.h
index c8760bebd6bc..2d99eba15e32 100644
--- a/include/efi_loader.h
+++ b/include/efi_loader.h
@@ -104,6 +104,8 @@ extern const struct efi_device_path_to_text_protocol efi_device_path_to_text;
extern const struct efi_device_path_utilities_protocol
efi_device_path_utilities;
/* Implementation of the EFI_UNICODE_COLLATION_PROTOCOL */
+extern const struct efi_unicode_collation_protocol
+ efi_unicode_collation_protocol_eng;
extern const struct efi_unicode_collation_protocol
efi_unicode_collation_protocol;
extern const struct efi_hii_config_routing_protocol efi_hii_config_routing;
@@ -142,6 +144,7 @@ extern const efi_guid_t efi_file_system_info_guid;
extern const efi_guid_t efi_guid_device_path_utilities_protocol;
/* GUID of the Unicode collation protocol */
extern const efi_guid_t efi_guid_unicode_collation_protocol;
+extern const efi_guid_t efi_guid_unicode_collation_protocol2;
extern const efi_guid_t efi_guid_hii_config_routing_protocol;
extern const efi_guid_t efi_guid_hii_database_protocol;
extern const efi_guid_t efi_guid_hii_string_protocol;
diff --git a/lib/efi_loader/efi_root_node.c b/lib/efi_loader/efi_root_node.c
index b056ba3ee880..aadb47aba1cd 100644
--- a/lib/efi_loader/efi_root_node.c
+++ b/lib/efi_loader/efi_root_node.c
@@ -70,6 +70,8 @@ efi_status_t efi_root_node_register(void)
/* Install Unicode collation protocol */
ret = efi_add_protocol(root, &efi_guid_unicode_collation_protocol,
+ (void *)&efi_unicode_collation_protocol_eng);
+ ret = efi_add_protocol(root, &efi_guid_unicode_collation_protocol2,
(void *)&efi_unicode_collation_protocol);
if (ret != EFI_SUCCESS)
goto failure;
diff --git a/lib/efi_loader/efi_unicode_collation.c b/lib/efi_loader/efi_unicode_collation.c
index 7f3ea3c77e4e..932feb3a9984 100644
--- a/lib/efi_loader/efi_unicode_collation.c
+++ b/lib/efi_loader/efi_unicode_collation.c
@@ -28,6 +28,8 @@ static const u16 codepage[] = CP437;
/* GUID of the EFI_UNICODE_COLLATION_PROTOCOL */
const efi_guid_t efi_guid_unicode_collation_protocol =
+ EFI_UNICODE_COLLATION_PROTOCOL_GUID;
+const efi_guid_t efi_guid_unicode_collation_protocol2 =
EFI_UNICODE_COLLATION_PROTOCOL2_GUID;
/**
@@ -318,6 +320,17 @@ static bool EFIAPI efi_str_to_fat(struct efi_unicode_collation_protocol *this,
return ret;
}
+const
+struct efi_unicode_collation_protocol efi_unicode_collation_protocol_eng = {
+ .stri_coll = efi_stri_coll,
+ .metai_match = efi_metai_match,
+ .str_lwr = efi_str_lwr,
+ .str_upr = efi_str_upr,
+ .fat_to_str = efi_fat_to_str,
+ .str_to_fat = efi_str_to_fat,
+ .supported_languages = "eng",
+};
+
const struct efi_unicode_collation_protocol efi_unicode_collation_protocol = {
.stri_coll = efi_stri_coll,
.metai_match = efi_metai_match,
--
2.19.0
More information about the U-Boot
mailing list