
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@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,