]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFrameworkModulePkg/Universal/VariablePei/Variable.c
1) Replace MACRO with C functions.
[mirror_edk2.git] / IntelFrameworkModulePkg / Universal / VariablePei / Variable.c
index 3751845fbf998851a8083574cc4eb6d1595e08ea..72d8fd1252ec61096e403b567449e71cbb11b70d 100644 (file)
@@ -80,27 +80,56 @@ Returns:
 \r
 }\r
 \r
-STATIC\r
 VARIABLE_HEADER *\r
-GetNextVariablePtr (\r
-  IN VARIABLE_HEADER  *Variable\r
+GetStartPointer (\r
+  IN VARIABLE_STORE_HEADER       *VarStoreHeader\r
   )\r
 /*++\r
 \r
 Routine Description:\r
 \r
-  This code checks if variable header is valid or not.\r
+  This code gets the pointer to the first variable memory pointer byte\r
 \r
 Arguments:\r
-  Variable       Pointer to the Variable Header.\r
+\r
+  VarStoreHeader        Pointer to the Variable Store Header.\r
 \r
 Returns:\r
-  TRUE            Variable header is valid.\r
-  FALSE           Variable header is not valid.\r
+\r
+  VARIABLE_HEADER*      Pointer to last unavailable Variable Header\r
+\r
+--*/\r
+{\r
+  //\r
+  // The end of variable store\r
+  //\r
+  return (VARIABLE_HEADER *) HEADER_ALIGN (VarStoreHeader + 1);\r
+}\r
+\r
+VARIABLE_HEADER *\r
+GetEndPointer (\r
+  IN VARIABLE_STORE_HEADER       *VarStoreHeader\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  This code gets the pointer to the last variable memory pointer byte\r
+\r
+Arguments:\r
+\r
+  VarStoreHeader        Pointer to the Variable Store Header.\r
+\r
+Returns:\r
+\r
+  VARIABLE_HEADER*      Pointer to last unavailable Variable Header\r
 \r
 --*/\r
 {\r
-  return (VARIABLE_HEADER *) HEADER_ALIGN ((UINTN) GET_VARIABLE_DATA_PTR (Variable) + DATASIZE_OF_VARIABLE (Variable) + GET_PAD_SIZE (DATASIZE_OF_VARIABLE (Variable)));\r
+  //\r
+  // The end of variable store\r
+  //\r
+  return (VARIABLE_HEADER *) HEADER_ALIGN ((UINTN) VarStoreHeader + VarStoreHeader->Size);\r
 }\r
 \r
 STATIC\r
@@ -131,6 +160,159 @@ Returns:
   return TRUE;\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
+\r
+UINT8 *\r
+GetVariableDataPtr (\r
+  IN  VARIABLE_HEADER   *Variable\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  This code gets the pointer to the variable data.\r
+\r
+Arguments:\r
+\r
+  Variable            Pointer to the Variable Header.\r
+\r
+Returns:\r
+\r
+  UINT8*              Pointer to Variable Data\r
+\r
+--*/\r
+{\r
+  UINTN Value;\r
+  \r
+  //\r
+  // Be careful about pad size for alignment\r
+  //\r
+  Value =  (UINTN) GetVariableNamePtr (Variable);\r
+  Value += NameSizeOfVariable (Variable);\r
+  Value += GET_PAD_SIZE (NameSizeOfVariable (Variable));\r
+\r
+  return (UINT8 *) Value;\r
+}\r
+\r
+VARIABLE_HEADER *\r
+GetNextVariablePtr (\r
+  IN  VARIABLE_HEADER   *Variable\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  This code gets the pointer to the next variable header.\r
+\r
+Arguments:\r
+\r
+  Variable              Pointer to the Variable Header.\r
+\r
+Returns:\r
+\r
+  VARIABLE_HEADER*      Pointer to next variable header.\r
+\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 (Value);\r
+}\r
+\r
+\r
 STATIC\r
 VARIABLE_STORE_STATUS\r
 EFIAPI\r
@@ -204,6 +386,8 @@ Returns:
 \r
 --*/\r
 {\r
+  VOID  *Point;\r
+\r
   if (VariableName[0] == 0) {\r
     PtrTrack->CurrPtr = Variable;\r
     return EFI_SUCCESS;\r
@@ -218,8 +402,9 @@ Returns:
         (((INT32 *) VendorGuid)[2] == ((INT32 *) &Variable->VendorGuid)[2]) &&\r
         (((INT32 *) VendorGuid)[3] == ((INT32 *) &Variable->VendorGuid)[3])\r
         ) {\r
-      ASSERT (NAMESIZE_OF_VARIABLE (Variable) != 0);\r
-      if (!CompareMem (VariableName, GET_VARIABLE_NAME_PTR (Variable), NAMESIZE_OF_VARIABLE (Variable))) {\r
+      ASSERT (NameSizeOfVariable (Variable) != 0);\r
+      Point = (VOID *) GetVariableNamePtr (Variable);\r
+      if (!CompareMem (VariableName, Point, NameSizeOfVariable (Variable))) {\r
         PtrTrack->CurrPtr = Variable;\r
         return EFI_SUCCESS;\r
       }\r
@@ -288,6 +473,7 @@ Returns:
     for (Count = 0; Count < IndexTable->Length; Count++)\r
     {\r
       MaxIndex = GetVariableByIndex (IndexTable, Count);\r
+\r
       if (CompareWithValidVariable (MaxIndex, VariableName, VendorGuid, PtrTrack) == EFI_SUCCESS) {\r
         PtrTrack->StartPtr  = IndexTable->StartPtr;\r
         PtrTrack->EndPtr    = IndexTable->EndPtr;\r
@@ -323,8 +509,8 @@ Returns:
       //\r
       // Find the variable by walk through non-volatile variable store\r
       //\r
-      IndexTable->StartPtr  = (VARIABLE_HEADER *) (VariableStoreHeader + 1);\r
-      IndexTable->EndPtr    = (VARIABLE_HEADER *) ((UINTN) VariableStoreHeader + VariableStoreHeader->Size);\r
+      IndexTable->StartPtr  = GetStartPointer (VariableStoreHeader);\r
+      IndexTable->EndPtr    = GetEndPointer (VariableStoreHeader);\r
 \r
       //\r
       // Start Pointers for the variable.\r
@@ -426,9 +612,9 @@ Returns:
   //\r
   // Get data size\r
   //\r
-  VarDataSize = DATASIZE_OF_VARIABLE (Variable.CurrPtr);\r
+  VarDataSize = DataSizeOfVariable (Variable.CurrPtr);\r
   if (*DataSize >= VarDataSize) {\r
-    (*PeiServices)->CopyMem (Data, GET_VARIABLE_DATA_PTR (Variable.CurrPtr), VarDataSize);\r
+    (*PeiServices)->CopyMem (Data, GetVariableDataPtr (Variable.CurrPtr), VarDataSize);\r
 \r
     if (Attributes != NULL) {\r
       *Attributes = Variable.CurrPtr->Attributes;\r
@@ -552,11 +738,11 @@ Returns:
   while (!(Variable.CurrPtr >= Variable.EndPtr || Variable.CurrPtr == NULL)) {\r
     if (IsValidVariableHeader (Variable.CurrPtr)) {\r
       if (Variable.CurrPtr->State == VAR_ADDED) {\r
-        ASSERT (NAMESIZE_OF_VARIABLE (Variable.CurrPtr) != 0);\r
+        ASSERT (NameSizeOfVariable (Variable.CurrPtr) != 0);\r
 \r
-        VarNameSize = (UINTN) NAMESIZE_OF_VARIABLE (Variable.CurrPtr);\r
+        VarNameSize = (UINTN) NameSizeOfVariable (Variable.CurrPtr);\r
         if (VarNameSize <= *VariableNameSize) {\r
-          (*PeiServices)->CopyMem (VariableName, GET_VARIABLE_NAME_PTR (Variable.CurrPtr), VarNameSize);\r
+          (*PeiServices)->CopyMem (VariableName, GetVariableNamePtr (Variable.CurrPtr), VarNameSize);\r
 \r
           (*PeiServices)->CopyMem (VendorGuid, &Variable.CurrPtr->VendorGuid, sizeof (EFI_GUID));\r
 \r