Merge tag 'efi-2019-07-rc3-3' of git://git.denx.de/u-boot-efi
[oweals/u-boot.git] / lib / efi_selftest / efi_selftest_variables.c
index 146378fb9a293909d56b3120450f824c31f89cb9..06c1a032dd04a5621a1b40673d2de81558737b9e 100644 (file)
@@ -4,10 +4,8 @@
  *
  * Copyright (c) 2018 Heinrich Schuchardt <xypron.glpk@gmx.de>
  *
- * This unit test checks the following protocol services:
- * ConnectController, DisconnectController,
- * InstallProtocol, ReinstallProtocol, UninstallProtocol,
- * OpenProtocol, CloseProtcol, OpenProtocolInformation
+ * This unit test checks the runtime services for variables:
+ * GetVariable, GetNextVariableName, SetVariable, QueryVariableInfo.
  */
 
 #include <efi_selftest.h>
 
 static struct efi_boot_services *boottime;
 static struct efi_runtime_services *runtime;
-static efi_guid_t guid_vendor0 =
+static const efi_guid_t guid_vendor0 =
        EFI_GUID(0x67029eb5, 0x0af2, 0xf6b1,
                 0xda, 0x53, 0xfc, 0xb5, 0x66, 0xdd, 0x1c, 0xe6);
-static efi_guid_t guid_vendor1 =
+static const efi_guid_t guid_vendor1 =
        EFI_GUID(0xff629290, 0x1fc1, 0xd73f,
                 0x8f, 0xb1, 0x32, 0xf9, 0x0c, 0xa0, 0x42, 0xea);
 
@@ -80,7 +78,7 @@ static int execute(void)
                efi_st_error("GetVariable failed\n");
                return EFI_ST_FAILURE;
        }
-       if (efi_st_memcmp(data, v + 4, 3)) {
+       if (memcmp(data, v + 4, 3)) {
                efi_st_error("GetVariable returned wrong value\n");
                return EFI_ST_FAILURE;
        }
@@ -108,7 +106,7 @@ static int execute(void)
                             (unsigned int)len);
                return EFI_ST_FAILURE;
        }
-       if (efi_st_memcmp(data, v, 8)) {
+       if (memcmp(data, v, 8)) {
                efi_st_error("GetVariable returned wrong value\n");
                return EFI_ST_FAILURE;
        }
@@ -118,21 +116,21 @@ static int execute(void)
                                    EFI_VARIABLE_APPEND_WRITE,
                                    7, v + 8);
        if (ret != EFI_SUCCESS) {
-               efi_st_error("SetVariable failed\n");
-               return EFI_ST_FAILURE;
-       }
-       len = EFI_ST_MAX_DATA_SIZE;
-       ret = runtime->get_variable(L"efi_st_var1", &guid_vendor1,
-                                   &attr, &len, data);
-       if (ret != EFI_SUCCESS) {
-               efi_st_error("GetVariable failed\n");
-               return EFI_ST_FAILURE;
+               efi_st_todo("SetVariable(APPEND_WRITE) failed\n");
+       } else {
+               len = EFI_ST_MAX_DATA_SIZE;
+               ret = runtime->get_variable(L"efi_st_var1", &guid_vendor1,
+                                           &attr, &len, data);
+               if (ret != EFI_SUCCESS) {
+                       efi_st_error("GetVariable failed\n");
+                       return EFI_ST_FAILURE;
+               }
+               if (len != 15)
+                       efi_st_todo("GetVariable returned wrong length %u\n",
+                                   (unsigned int)len);
+               if (memcmp(data, v, len))
+                       efi_st_todo("GetVariable returned wrong value\n");
        }
-       if (len != 15)
-               efi_st_todo("GetVariable returned wrong length %u\n",
-                           (unsigned int)len);
-       if (efi_st_memcmp(data, v, len))
-               efi_st_todo("GetVariable returned wrong value\n");
        /* Enumerate variables */
        boottime->set_mem(&guid, 16, 0);
        *varname = 0;
@@ -143,19 +141,22 @@ static int execute(void)
                if (ret == EFI_NOT_FOUND)
                        break;
                if (ret != EFI_SUCCESS) {
-                       efi_st_todo("GetNextVariableName failed\n");
-                       break;
+                       efi_st_error("GetNextVariableName failed (%u)\n",
+                                    (unsigned int)ret);
+                       return EFI_ST_FAILURE;
                }
-               if (!efi_st_memcmp(&guid, &guid_vendor0, sizeof(efi_guid_t)) &&
+               if (!memcmp(&guid, &guid_vendor0, sizeof(efi_guid_t)) &&
                    !efi_st_strcmp_16_8(varname, "efi_st_var0"))
-                       flag |= 2;
-               if (!efi_st_memcmp(&guid, &guid_vendor1, sizeof(efi_guid_t)) &&
+                       flag |= 1;
+               if (!memcmp(&guid, &guid_vendor1, sizeof(efi_guid_t)) &&
                    !efi_st_strcmp_16_8(varname, "efi_st_var1"))
                        flag |= 2;
        }
-       if (flag != 3)
-               efi_st_todo(
+       if (flag != 3) {
+               efi_st_error(
                        "GetNextVariableName did not return all variables\n");
+               return EFI_ST_FAILURE;
+       }
        /* Delete variable 1 */
        ret = runtime->set_variable(L"efi_st_var1", &guid_vendor1,
                                    0, 0, NULL);