efi_selftest: multi part device path to text
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>
diff --git a/lib/efi_selftest/efi_selftest_devicepath.c b/lib/efi_selftest/efi_selftest_devicepath.c
index 4ce3fad..d87b9f7 100644
--- a/lib/efi_selftest/efi_selftest_devicepath.c
+++ b/lib/efi_selftest/efi_selftest_devicepath.c
@@ -45,6 +45,55 @@
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 @@
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);