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 <[email protected]>
---
 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

_______________________________________________
U-Boot mailing list
[email protected]
https://lists.denx.de/listinfo/u-boot

Reply via email to