]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c
1) Replace MACRO with C functions.
[mirror_edk2.git] / MdeModulePkg / Universal / Variable / RuntimeDxe / Variable.c
index d7cb0cd71c1908c79f726b3732c4918a0b98c9cd..9ff417230a90616e2fb1f0fb862e8feabcff31f1 100644 (file)
@@ -367,6 +367,89 @@ Returns:
   }\r
 }\r
 \r
+\r
+UINTN\r
+NameSizeOfVariable (\r
+  IN  VARIABLE_HEADER   *Variable\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  This code gets the size of name of variable.\r
+\r
+Arguments:\r
+\r
+  Variable            Pointer to the Variable Header.\r
+\r
+Returns:\r
+\r
+  UINTN               Size of variable in bytes\r
+\r
+--*/\r
+{\r
+  if (Variable->State    == (UINT8) (-1) ||\r
+      Variable->DataSize == (UINT32) -1 ||\r
+      Variable->NameSize == (UINT32) -1 ||\r
+      Variable->Attributes == (UINT32) -1) {\r
+    return 0;\r
+  }\r
+  return (UINTN) Variable->NameSize;\r
+}\r
+\r
+UINTN\r
+DataSizeOfVariable (\r
+  IN  VARIABLE_HEADER   *Variable\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  This code gets the size of name of variable.\r
+\r
+Arguments:\r
+\r
+  Variable            Pointer to the Variable Header.\r
+\r
+Returns:\r
+\r
+  UINTN               Size of variable in bytes\r
+\r
+--*/\r
+{\r
+  if (Variable->State    == (UINT8)  -1 ||\r
+      Variable->DataSize == (UINT32) -1 ||\r
+      Variable->NameSize == (UINT32) -1 ||\r
+      Variable->Attributes == (UINT32) -1) {\r
+    return 0;\r
+  }\r
+  return (UINTN) Variable->DataSize;\r
+}\r
+\r
+CHAR16 *\r
+GetVariableNamePtr (\r
+  IN  VARIABLE_HEADER   *Variable\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  This code gets the pointer to the variable name.\r
+\r
+Arguments:\r
+\r
+  Variable            Pointer to the Variable Header.\r
+\r
+Returns:\r
+\r
+  CHAR16*              Pointer to Variable Name\r
+\r
+--*/\r
+{\r
+\r
+  return (CHAR16 *) (Variable + 1);\r
+}\r
+\r
 UINT8 *\r
 GetVariableDataPtr (\r
   IN  VARIABLE_HEADER   *Variable\r
@@ -387,10 +470,16 @@ Returns:
 \r
 --*/\r
 {\r
+  UINTN Value;\r
+  \r
   //\r
   // Be careful about pad size for alignment\r
   //\r
-  return (UINT8 *) ((UINTN) GET_VARIABLE_NAME_PTR (Variable) + NAMESIZE_OF_VARIABLE (Variable) + GET_PAD_SIZE (NAMESIZE_OF_VARIABLE (Variable)));\r
+  Value =  (UINTN) GetVariableNamePtr (Variable);\r
+  Value += NameSizeOfVariable (Variable);\r
+  Value += GET_PAD_SIZE (NameSizeOfVariable (Variable));\r
+\r
+  return (UINT8 *) Value;\r
 }\r
 \r
 \r
@@ -414,13 +503,20 @@ Returns:
 \r
 --*/\r
 {\r
+  UINTN Value;\r
+\r
   if (!IsValidVariableHeader (Variable)) {\r
     return NULL;\r
   }\r
+\r
+  Value =  (UINTN) GetVariableDataPtr (Variable);\r
+  Value += DataSizeOfVariable (Variable);\r
+  Value += GET_PAD_SIZE (DataSizeOfVariable (Variable));\r
+\r
   //\r
   // Be careful about pad size for alignment\r
   //\r
-  return (VARIABLE_HEADER *) HEADER_ALIGN (((UINTN) GetVariableDataPtr (Variable) + DATASIZE_OF_VARIABLE (Variable) + GET_PAD_SIZE (DATASIZE_OF_VARIABLE (Variable))));\r
+  return (VARIABLE_HEADER *) HEADER_ALIGN (Value);\r
 }\r
 \r
 VARIABLE_HEADER *\r
@@ -747,6 +843,7 @@ Returns:
   VARIABLE_HEADER       *Variable[2];\r
   VARIABLE_STORE_HEADER *VariableStoreHeader[2];\r
   UINTN                 Index;\r
+  VOID                  *Point;\r
 \r
   //\r
   // 0: Volatile, 1: Non-Volatile\r
@@ -782,8 +879,10 @@ Returns:
             return EFI_SUCCESS;\r
           } else {\r
             if (CompareGuid (VendorGuid, &Variable[Index]->VendorGuid)) {\r
-              ASSERT (NAMESIZE_OF_VARIABLE (Variable[Index]) != 0);\r
-              if (!CompareMem (VariableName, GET_VARIABLE_NAME_PTR (Variable[Index]), NAMESIZE_OF_VARIABLE (Variable[Index]))) {\r
+              Point = (VOID *) GetVariableNamePtr (Variable[Index]);\r
+\r
+              ASSERT (NameSizeOfVariable (Variable[Index]) != 0);\r
+              if (!CompareMem (VariableName, Point, NameSizeOfVariable (Variable[Index]))) {\r
                 PtrTrack->CurrPtr   = Variable[Index];\r
                 PtrTrack->Volatile  = (BOOLEAN)(Index == 0);\r
                 return EFI_SUCCESS;\r
@@ -866,7 +965,7 @@ RuntimeServiceGetVariable (
   //\r
   // Get data size\r
   //\r
-  VarDataSize = DATASIZE_OF_VARIABLE (Variable.CurrPtr);\r
+  VarDataSize = DataSizeOfVariable (Variable.CurrPtr);\r
   ASSERT (VarDataSize != 0);\r
 \r
   if (*DataSize >= VarDataSize) {\r
@@ -973,13 +1072,13 @@ RuntimeServiceGetNextVariableName (
     //\r
     if (IsValidVariableHeader (Variable.CurrPtr) && Variable.CurrPtr->State == VAR_ADDED) {\r
       if (!(EfiAtRuntime () && !(Variable.CurrPtr->Attributes & EFI_VARIABLE_RUNTIME_ACCESS))) {\r
-        VarNameSize = NAMESIZE_OF_VARIABLE (Variable.CurrPtr);\r
+        VarNameSize = NameSizeOfVariable (Variable.CurrPtr);\r
         ASSERT (VarNameSize != 0);\r
 \r
         if (VarNameSize <= *VariableNameSize) {\r
           CopyMem (\r
             VariableName,\r
-            GET_VARIABLE_NAME_PTR (Variable.CurrPtr),\r
+            GetVariableNamePtr (Variable.CurrPtr),\r
             VarNameSize\r
             );\r
           CopyMem (\r
@@ -1174,7 +1273,7 @@ RuntimeServiceSetVariable (
     // If the variable is marked valid and the same data has been passed in\r
     // then return to the caller immediately.\r
     //\r
-    if (DATASIZE_OF_VARIABLE (Variable.CurrPtr) == DataSize &&\r
+    if (DataSizeOfVariable (Variable.CurrPtr) == DataSize &&\r
         (CompareMem (Data, GetVariableDataPtr (Variable.CurrPtr), DataSize) == 0)) {\r
       \r
       UpdateVariableInfo (VariableName, VendorGuid, Volatile, FALSE, TRUE, FALSE, FALSE);\r
@@ -1310,8 +1409,9 @@ RuntimeServiceSetVariable (
     //\r
     // Three steps\r
     // 1. Write variable header\r
-    // 2. Write variable data\r
-    // 3. Set variable state to valid\r
+    // 2. Set variable state to header valid  \r
+    // 3. Write variable data\r
+    // 4. Set variable state to valid\r
     //\r
     //\r
     // Step 1:\r
@@ -1329,9 +1429,27 @@ RuntimeServiceSetVariable (
     if (EFI_ERROR (Status)) {\r
       goto Done;\r
     }\r
+\r
     //\r
     // Step 2:\r
     //\r
+    NextVariable->State = VAR_HEADER_VALID_ONLY;\r
+    Status = UpdateVariableStore (\r
+               &mVariableModuleGlobal->VariableGlobal,\r
+               FALSE,\r
+               TRUE,\r
+               Instance,\r
+               *NonVolatileOffset,\r
+               sizeof (VARIABLE_HEADER),\r
+               (UINT8 *) NextVariable\r
+               );\r
+\r
+    if (EFI_ERROR (Status)) {\r
+      goto Done;\r
+    }\r
+    //\r
+    // Step 3:\r
+    //\r
     Status = UpdateVariableStore (\r
                &mVariableModuleGlobal->VariableGlobal,\r
                FALSE,\r
@@ -1346,7 +1464,7 @@ RuntimeServiceSetVariable (
       goto Done;\r
     }\r
     //\r
-    // Step 3:\r
+    // Step 4:\r
     //\r
     NextVariable->State = VAR_ADDED;\r
     Status = UpdateVariableStore (\r