]> git.proxmox.com Git - mirror_edk2.git/blobdiff - DuetPkg/FSVariable/FSVariable.c
1. delete Include/Guid/VariableInfo.h
[mirror_edk2.git] / DuetPkg / FSVariable / FSVariable.c
index 041369106776f3bf7acaca6b9e00aaca491777c1..d20b3a78e3ed4598c9ed2500b67c792b57c2767e 100644 (file)
@@ -22,7 +22,7 @@ Abstract:
 #include "FSVariable.h"\r
 \r
 VARIABLE_STORE_HEADER mStoreHeaderTemplate = {\r
-  VARIABLE_STORE_SIGNATURE,\r
+  gEfiVariableGuid,\r
   VOLATILE_VARIABLE_STORE_SIZE,\r
   VARIABLE_STORE_FORMATTED,\r
   VARIABLE_STORE_HEALTHY,\r
@@ -35,15 +35,13 @@ VARIABLE_STORE_HEADER mStoreHeaderTemplate = {
 //\r
 VARIABLE_GLOBAL  *mGlobal;\r
 \r
-STATIC\r
 VOID\r
 EFIAPI\r
-OnVirtualAddressChange (\r
+OnVirtualAddressChangeFsv (\r
   IN EFI_EVENT        Event,\r
   IN VOID             *Context\r
   );\r
 \r
-STATIC\r
 VOID\r
 EFIAPI\r
 OnSimpleFileSystemInstall (\r
@@ -51,7 +49,6 @@ OnSimpleFileSystemInstall (
   IN VOID             *Context\r
   );\r
 \r
-STATIC\r
 BOOLEAN\r
 IsValidVariableHeader (\r
   IN  VARIABLE_HEADER   *Variable\r
@@ -73,7 +70,7 @@ Returns:
 {\r
   if (Variable == NULL ||\r
       Variable->StartId != VARIABLE_DATA ||\r
-      (sizeof (VARIABLE_HEADER) + Variable->NameSize + Variable->DataSize) > MAX_VARIABLE_SIZE\r
+      (sizeof (VARIABLE_HEADER) + Variable->NameSize + Variable->DataSize) > FixedPcdGet32(PcdMaxVariableSize)\r
       ) {\r
     return FALSE;\r
   }\r
@@ -81,7 +78,6 @@ Returns:
   return TRUE;\r
 }\r
 \r
-STATIC\r
 VARIABLE_STORE_STATUS\r
 GetVariableStoreStatus (\r
   IN VARIABLE_STORE_HEADER *VarStoreHeader\r
@@ -104,15 +100,18 @@ Returns:
 \r
 --*/\r
 {\r
-  if ((VarStoreHeader->Signature == mStoreHeaderTemplate.Signature) &&\r
+  if (CompareGuid (&VarStoreHeader->Signature, &mStoreHeaderTemplate.Signature) &&\r
       (VarStoreHeader->Format == mStoreHeaderTemplate.Format) &&\r
       (VarStoreHeader->State == mStoreHeaderTemplate.State)\r
      ) {\r
     return EfiValid;\r
-  } else if (VarStoreHeader->Signature == VAR_DEFAULT_VALUE_32 &&\r
-           VarStoreHeader->Size == VAR_DEFAULT_VALUE_32 &&\r
-           VarStoreHeader->Format == VAR_DEFAULT_VALUE &&\r
-           VarStoreHeader->State == VAR_DEFAULT_VALUE\r
+  } else if (((UINT32 *)(&VarStoreHeader->Signature))[0] == VAR_DEFAULT_VALUE_32 &&\r
+             ((UINT32 *)(&VarStoreHeader->Signature))[1] == VAR_DEFAULT_VALUE_32 &&\r
+             ((UINT32 *)(&VarStoreHeader->Signature))[2] == VAR_DEFAULT_VALUE_32 &&\r
+             ((UINT32 *)(&VarStoreHeader->Signature))[3] == VAR_DEFAULT_VALUE_32 &&\r
+             VarStoreHeader->Size == VAR_DEFAULT_VALUE_32 &&\r
+             VarStoreHeader->Format == VAR_DEFAULT_VALUE &&\r
+             VarStoreHeader->State == VAR_DEFAULT_VALUE\r
           ) {\r
 \r
     return EfiRaw;\r
@@ -121,7 +120,6 @@ Returns:
   }\r
 }\r
 \r
-STATIC\r
 UINT8 *\r
 GetVariableDataPtr (\r
   IN  VARIABLE_HEADER   *Variable\r
@@ -148,7 +146,6 @@ Returns:
   return (UINT8 *) ((UINTN) GET_VARIABLE_NAME_PTR (Variable) + Variable->NameSize + GET_PAD_SIZE (Variable->NameSize));\r
 }\r
 \r
-STATIC\r
 VARIABLE_HEADER *\r
 GetNextVariablePtr (\r
   IN  VARIABLE_HEADER   *Variable\r
@@ -178,7 +175,6 @@ Returns:
   return (VARIABLE_HEADER *) ((UINTN) GetVariableDataPtr (Variable) + Variable->DataSize + GET_PAD_SIZE (Variable->DataSize));\r
 }\r
 \r
-STATIC\r
 VARIABLE_HEADER *\r
 GetEndPointer (\r
   IN VARIABLE_STORE_HEADER       *VarStoreHeader\r
@@ -250,7 +246,6 @@ Returns:
   return FALSE;\r
 }\r
 \r
-STATIC\r
 EFI_STATUS\r
 Reclaim (\r
   IN  VARIABLE_STORAGE_TYPE StorageType,\r
@@ -300,7 +295,7 @@ Returns:
   Status = gBS->AllocatePool (\r
                   EfiBootServicesData,\r
                   ValidBufferSize,\r
-                  &ValidBuffer\r
+                  (VOID**) &ValidBuffer\r
                   );\r
   if (EFI_ERROR (Status)) {\r
     return Status;\r
@@ -374,7 +369,6 @@ Returns:
   return Status;\r
 }\r
 \r
-STATIC\r
 EFI_STATUS\r
 FindVariable (\r
   IN  CHAR16                  *VariableName,\r
@@ -676,8 +670,6 @@ Returns:
 \r
     Variable.CurrPtr = GetNextVariablePtr (Variable.CurrPtr);\r
   }\r
-\r
-  return EFI_NOT_FOUND;\r
 }\r
 \r
 EFI_STATUS\r
@@ -743,33 +735,23 @@ Returns:
     return EFI_INVALID_PARAMETER;\r
   }\r
   \r
-#if (EFI_SPECIFICATION_VERSION >= 0x0002000A)\r
   //\r
   //  The size of the VariableName, including the Unicode Null in bytes plus\r
-  //  the DataSize is limited to maximum size of MAX_HARDWARE_ERROR_VARIABLE_SIZE (32K)\r
-  //  bytes for HwErrRec, and MAX_VARIABLE_SIZE (1024) bytes for the others.\r
+  //  the DataSize is limited to maximum size of FixedPcdGet32(PcdMaxHardwareErrorVariableSize)\r
+  //  bytes for HwErrRec, and FixedPcdGet32(PcdMaxVariableSize) bytes for the others.\r
   //\r
   if ((Attributes & EFI_VARIABLE_HARDWARE_ERROR_RECORD) == EFI_VARIABLE_HARDWARE_ERROR_RECORD) {\r
-    if ((DataSize > MAX_HARDWARE_ERROR_VARIABLE_SIZE) ||                                                       \r
-        (sizeof (VARIABLE_HEADER) + StrSize (VariableName) + DataSize > MAX_HARDWARE_ERROR_VARIABLE_SIZE)) {\r
+    if ((DataSize > FixedPcdGet32(PcdMaxHardwareErrorVariableSize)) ||                                                       \r
+        (sizeof (VARIABLE_HEADER) + StrSize (VariableName) + DataSize > FixedPcdGet32(PcdMaxHardwareErrorVariableSize))) {\r
       return EFI_INVALID_PARAMETER;\r
     }    \r
   } else {\r
-    if ((DataSize > MAX_VARIABLE_SIZE) ||\r
-        (sizeof (VARIABLE_HEADER) + StrSize (VariableName) + DataSize > MAX_VARIABLE_SIZE)) {\r
+    if ((DataSize > FixedPcdGet32(PcdMaxVariableSize)) ||\r
+        (sizeof (VARIABLE_HEADER) + StrSize (VariableName) + DataSize > FixedPcdGet32(PcdMaxVariableSize))) {\r
       return EFI_INVALID_PARAMETER;\r
     }  \r
   }  \r
-#else  \r
-  //\r
-  //  The size of the VariableName, including the Unicode Null in bytes plus\r
-  //  the DataSize is limited to maximum size of MAX_VARIABLE_SIZE (1024) bytes.\r
-  //\r
-  if ((DataSize > MAX_VARIABLE_SIZE) ||\r
-      (sizeof (VARIABLE_HEADER) + StrSize (VariableName) + DataSize > MAX_VARIABLE_SIZE)) {\r
-    return EFI_INVALID_PARAMETER;\r
-  }  \r
-#endif\r
+\r
   //\r
   // Check whether the input variable is already existed\r
   //\r
@@ -984,7 +966,6 @@ Returns:
   return EFI_SUCCESS;\r
 }\r
 \r
-#if (EFI_SPECIFICATION_VERSION >= 0x00020000)\r
 EFI_STATUS\r
 EFIAPI\r
 QueryVariableInfo (\r
@@ -1028,21 +1009,12 @@ Returns:
     return EFI_INVALID_PARAMETER;\r
   }\r
   \r
-#if (EFI_SPECIFICATION_VERSION >= 0x0002000A)  \r
   if((Attributes & (EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_HARDWARE_ERROR_RECORD)) == 0) {\r
     //\r
     // Make sure the Attributes combination is supported by the platform.\r
     //\r
     return EFI_UNSUPPORTED;  \r
   }  \r
-#else\r
-  if((Attributes & (EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS)) == 0) {\r
-    //\r
-    // Make sure the Attributes combination is supported by the platform.\r
-    //\r
-    return EFI_UNSUPPORTED;  \r
-  } \r
-#endif  \r
   else if ((Attributes & (EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS)) == EFI_VARIABLE_RUNTIME_ACCESS) {\r
     //\r
     // Make sure if runtime bit is set, boot service bit is set also.\r
@@ -1066,18 +1038,16 @@ Returns:
   *RemainingVariableStorageSize = VariableStoreHeader->Size - sizeof (VARIABLE_STORE_HEADER);\r
 \r
   //\r
-  // Let *MaximumVariableSize be MAX_VARIABLE_SIZE with the exception of the variable header size.\r
+  // Let *MaximumVariableSize be FixedPcdGet32(PcdMaxVariableSize) with the exception of the variable header size.\r
   //\r
-  *MaximumVariableSize = MAX_VARIABLE_SIZE - sizeof (VARIABLE_HEADER);\r
+  *MaximumVariableSize = FixedPcdGet32(PcdMaxVariableSize) - sizeof (VARIABLE_HEADER);\r
 \r
-#if (EFI_SPECIFICATION_VERSION >= 0x0002000A)\r
   //\r
   // Harware error record variable needs larger size.\r
   //\r
   if ((Attributes & EFI_VARIABLE_HARDWARE_ERROR_RECORD) == EFI_VARIABLE_HARDWARE_ERROR_RECORD) {\r
-    *MaximumVariableSize = MAX_HARDWARE_ERROR_VARIABLE_SIZE - sizeof (VARIABLE_HEADER);\r
+    *MaximumVariableSize = FixedPcdGet32(PcdMaxHardwareErrorVariableSize) - sizeof (VARIABLE_HEADER);\r
   }\r
-#endif\r
   \r
   //\r
   // Point to the starting address of the variables.\r
@@ -1124,7 +1094,6 @@ Returns:
 \r
   return EFI_SUCCESS;\r
 }\r
-#endif\r
 \r
 EFI_STATUS\r
 EFIAPI\r
@@ -1154,12 +1123,11 @@ Returns:
   EFI_STATUS                      Status;\r
   EFI_HANDLE                      NewHandle;\r
   VS_DEV                          *Dev;\r
-  VOID                            *HobList;\r
+  EFI_PEI_HOB_POINTERS            GuidHob;\r
   VARIABLE_HEADER                 *NextVariable;\r
   VARIABLE_STORE_HEADER           *VariableStoreHeader;\r
   EFI_FLASH_MAP_FS_ENTRY_DATA     *FlashMapEntryData;\r
   EFI_FLASH_SUBAREA_ENTRY         VariableStoreEntry;\r
-  VOID                            *Buffer;\r
   UINT64                          BaseAddress;\r
   UINT64                          Length;\r
   EFI_GCD_MEMORY_SPACE_DESCRIPTOR GcdDescriptor;\r
@@ -1167,38 +1135,33 @@ Returns:
   Status = gBS->AllocatePool (\r
                   EfiRuntimeServicesData,\r
                   (UINTN) sizeof (VARIABLE_GLOBAL),\r
-                  &mGlobal\r
+                  (VOID**) &mGlobal\r
                   );\r
   if (EFI_ERROR (Status)) {\r
     return Status;\r
   }\r
 \r
-  Status = EfiGetSystemConfigurationTable (&gEfiHobListGuid, &HobList);\r
-\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  \r
-  for (FlashMapEntryData = NULL; ;) {\r
-    Buffer = GetNextGuidHob (&gEfiFlashMapHobGuid, &HobList);\r
-\r
-    FlashMapEntryData = (EFI_FLASH_MAP_FS_ENTRY_DATA *) Buffer;\r
-\r
-    //\r
-    // Get the variable store area\r
-    //\r
+  GuidHob.Raw = GetHobList ();\r
+  FlashMapEntryData = NULL;\r
+  while ((GuidHob.Raw = GetNextGuidHob (&gEfiFlashMapHobGuid, GuidHob.Raw)) != NULL) {\r
+    FlashMapEntryData = (EFI_FLASH_MAP_FS_ENTRY_DATA *) GET_GUID_HOB_DATA (GuidHob.Guid);\r
     if (FlashMapEntryData->AreaType == EFI_FLASH_AREA_EFI_VARIABLES) {\r
       break;\r
     }\r
+    GuidHob.Raw = GET_NEXT_HOB (GuidHob); \r
   }\r
 \r
-  if (EFI_ERROR (Status) || FlashMapEntryData == NULL) {\r
+  if (FlashMapEntryData == NULL) {\r
+    DEBUG ((EFI_D_ERROR, "FSVariable: Could not find flash area for variable!\n"));\r
     Status = EFI_NOT_FOUND;\r
     return Status;\r
   }\r
-\r
-  VariableStoreEntry = FlashMapEntryData->Entries[0];\r
+  \r
+  CopyMem(\r
+    (VOID*)&VariableStoreEntry,\r
+    (VOID*)&FlashMapEntryData->Entries[0],\r
+    sizeof(EFI_FLASH_SUBAREA_ENTRY)\r
+    );\r
 \r
   //\r
   // Mark the variable storage region of the FLASH as RUNTIME\r
@@ -1220,7 +1183,7 @@ Returns:
     Status = EFI_UNSUPPORTED;\r
     return Status;\r
   }\r
-  \r
+\r
   Status = FileStorageConstructor (\r
              &mGlobal->VariableStore[NonVolatile], \r
              &mGlobal->GoVirtualChildEvent[NonVolatile],\r
@@ -1309,9 +1272,7 @@ Returns:
   SystemTable->RuntimeServices->GetNextVariableName = GetNextVariableName;\r
   SystemTable->RuntimeServices->SetVariable         = SetVariable;\r
 \r
-#if (EFI_SPECIFICATION_VERSION >= 0x00020000)\r
   SystemTable->RuntimeServices->QueryVariableInfo   = QueryVariableInfo;\r
-#endif\r
 \r
   //\r
   // Now install the Variable Runtime Architectural Protocol on a new handle\r
@@ -1336,10 +1297,9 @@ Returns:
 \r
 \r
 \r
-STATIC\r
 VOID\r
 EFIAPI\r
-OnVirtualAddressChange (\r
+OnVirtualAddressChangeFsv (\r
   IN EFI_EVENT        Event,\r
   IN VOID             *Context\r
   )\r
@@ -1348,9 +1308,9 @@ OnVirtualAddressChange (
 \r
   for (Index = 0; Index < MaxType; Index++) {\r
     mGlobal->GoVirtualChildEvent[Index] (Event, mGlobal->VariableStore[Index]);\r
-    EfiConvertPointer (0, &mGlobal->VariableStore[Index]);\r
+    EfiConvertPointer (0, (VOID**) &mGlobal->VariableStore[Index]);\r
     EfiConvertPointer (0, &mGlobal->VariableBase[Index]);\r
   }\r
   EfiConvertPointer (0, &mGlobal->Scratch);\r
-  EfiConvertPointer (0, &mGlobal);\r
+  EfiConvertPointer (0, (VOID**) &mGlobal);\r
 }\r