]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
efi_selftest: multi part device path to text
authorHeinrich Schuchardt <xypron.glpk@gmx.de>
Thu, 18 Feb 2021 17:30:44 +0000 (18:30 +0100)
committerHeinrich Schuchardt <xypron.glpk@gmx.de>
Sun, 21 Feb 2021 08:21:35 +0000 (09:21 +0100)
Test EFI_DEVICE_PATH_TO_TEXT_PROTOCOL.ConvertDevicePathToText() for a multi
part device path.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Acked-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
lib/efi_selftest/efi_selftest_devicepath.c

index 4ce3fad8959d4602f38670c0cb51a50de43b49a7..d87b9f7dcd00e981474493c860d8ac5892ed8526 100644 (file)
@@ -45,6 +45,55 @@ static u8 *dp1;
 static u8 *dp2;
 static u8 *dp3;
 
+static struct {
+       struct efi_device_path_sd_mmc_path sd1;
+       struct efi_device_path sep1;
+       struct efi_device_path_sd_mmc_path sd2;
+       struct efi_device_path sep2;
+       struct efi_device_path_sd_mmc_path sd3;
+       struct efi_device_path end;
+} multi_part_dp = {
+       {
+               {
+                       DEVICE_PATH_TYPE_MESSAGING_DEVICE,
+                       DEVICE_PATH_SUB_TYPE_MSG_SD,
+                       sizeof(struct efi_device_path_sd_mmc_path),
+               },
+               0,
+       },
+       {
+               DEVICE_PATH_TYPE_END,
+               DEVICE_PATH_SUB_TYPE_INSTANCE_END,
+               sizeof(struct efi_device_path),
+       },
+       {
+               {
+                       DEVICE_PATH_TYPE_MESSAGING_DEVICE,
+                       DEVICE_PATH_SUB_TYPE_MSG_SD,
+                       sizeof(struct efi_device_path_sd_mmc_path),
+               },
+               1,
+       },
+       {
+               DEVICE_PATH_TYPE_END,
+               DEVICE_PATH_SUB_TYPE_INSTANCE_END,
+               sizeof(struct efi_device_path),
+       },
+       {
+               {
+                       DEVICE_PATH_TYPE_MESSAGING_DEVICE,
+                       DEVICE_PATH_SUB_TYPE_MSG_SD,
+                       sizeof(struct efi_device_path_sd_mmc_path),
+               },
+               2,
+       },
+       {
+               DEVICE_PATH_TYPE_END,
+               DEVICE_PATH_SUB_TYPE_END,
+               sizeof(struct efi_device_path),
+       },
+};
+
 struct efi_device_path_to_text_protocol *device_path_to_text;
 
 /*
@@ -340,6 +389,22 @@ static int execute(void)
                return EFI_ST_FAILURE;
        }
 
+       string = device_path_to_text->convert_device_path_to_text(
+                       (struct efi_device_path *)&multi_part_dp, true, false);
+       if (efi_st_strcmp_16_8(
+               string,
+               "/SD(0),/SD(1),/SD(2)")
+           ) {
+               efi_st_printf("multi_part_dp: %ps\n", string);
+               efi_st_error("Incorrect text from ConvertDevicePathToText\n");
+               return EFI_ST_FAILURE;
+       }
+       ret = boottime->free_pool(string);
+       if (ret != EFI_SUCCESS) {
+               efi_st_error("FreePool failed\n");
+               return EFI_ST_FAILURE;
+       }
+
        /* Test ConvertDeviceNodeToText */
        string = device_path_to_text->convert_device_node_to_text(
                        (struct efi_device_path *)&dp_node, true, false);