[PATCH 2/2] efi_selftest: multi part device path to text

Heinrich Schuchardt xypron.glpk at gmx.de
Thu Feb 18 18:30:44 CET 2021


Test EFI_DEVICE_PATH_TO_TEXT_PROTOCOL.ConvertDevicePathToText() for a multi
part device path.

Signed-off-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
---
 lib/efi_selftest/efi_selftest_devicepath.c | 65 ++++++++++++++++++++++
 1 file changed, 65 insertions(+)

diff --git a/lib/efi_selftest/efi_selftest_devicepath.c b/lib/efi_selftest/efi_selftest_devicepath.c
index 4ce3fad895..d87b9f7dcd 100644
--- a/lib/efi_selftest/efi_selftest_devicepath.c
+++ b/lib/efi_selftest/efi_selftest_devicepath.c
@@ -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);
--
2.30.0



More information about the U-Boot mailing list