\r
\r
//\r
-// VARSTORE ID of 0 for Buffer Storage Type Storage is reserved in UEFI IFR form. But VARSTORE ID\r
-// 0 in Framework IFR is the default VarStore ID for storage without explicit declaration. So we have\r
-// to reseved 0x0001 in UEFI VARSTORE ID to represetn default storage id in Framework IFR.\r
-// Framework VFR has to be ported or pre-processed to change the default VARSTORE to a VARSTORE\r
-// with ID equal to 0x0001.\r
+// VARSTORE ID of 0 for Buffer Storage Type Storage is defined as invalid in UEFI 2.1 HII. VARSTORE ID\r
+// 0 is the default VarStore ID for storage without explicit declaration in Framework HII 0.92. EDK II UEFI VFR compiler\r
+// in compatible mode will assign 0x0001 as UEFI VARSTORE ID to this default storage id in Framework VFR without\r
+// VARSTORE declaration.\r
+// \r
+// In addition, the Name of Default VarStore is assumed to be L"Setup" for those storage without explicit VARSTORE declaration in the formset\r
+// by Framework HII. EDK II UEFI VFR compiler in compatible mode hard-coded L"Setup" as VARSTORE name.\r
//\r
#define FRAMEWORK_RESERVED_VARSTORE_ID 0x0001\r
+#define FRAMEWORK_RESERVED_VARSTORE_NAME L"Setup"\r
\r
\r
#pragma pack (1)\r
\r
**/\r
\r
-\r
-#include <FrameworkDxe.h>\r
-\r
-#include <Protocol/FrameworkHii.h>\r
-#include <Protocol/HiiDatabase.h>\r
-\r
-#include <Library/BaseLib.h>\r
-#include <Library/BaseMemoryLib.h>\r
-#include <Library/DebugLib.h>\r
-#include <Library/MemoryAllocationLib.h>\r
-#include <Library/UefiBootServicesTableLib.h>\r
-\r
#include "HiiDatabase.h"\r
#include "UefiIfrParser.h"\r
#include "UefiIfrDefault.h"\r
extern CONST EFI_HII_STRING_PROTOCOL *mHiiStringProtocol;\r
extern CONST EFI_HII_CONFIG_ROUTING_PROTOCOL *mHiiConfigRoutingProtocol;\r
\r
+CHAR16 FrameworkReservedVarstoreName[] = FRAMEWORK_RESERVED_VARSTORE_NAME;\r
+\r
/**\r
Set the data position at Offset with Width in Node->Buffer based \r
the value passed in.\r
\r
if (Node->DefaultId == DefaultId) {\r
Size += Node->Size;\r
- Size += StrSize (Node->Name);\r
+ if ((Node->StoreId == UefiFormSetDefaultVarStoreId) && (StrCmp (FrameworkReservedVarstoreName, Node->Name) != 0)) {\r
+ // The name of default VARSTORE with a Explicit declaration statement will be updated to L"Setup" to make sure\r
+ // the Framework HII Setup module will run correctly. Framework HII Setup module always assumed that default\r
+ // VARSTORE to have L"Setup" as name, Formset GUID as GUID. \r
+ Size += StrSize (FrameworkReservedVarstoreName);\r
+ } else {\r
+ Size += StrSize (Node->Name);\r
+ }\r
\r
Count++;\r
}\r
Size = 0; \r
if (Node->DefaultId == DefaultId) {\r
Size += Node->Size;\r
- Size += StrSize (Node->Name);\r
Size += sizeof (EFI_HII_VARIABLE_PACK); \r
\r
//\r
// So the default storage of Var Store in VFR from a Framework module \r
// should be translated to the default Varstore ID.\r
//\r
- if (Node->StoreId == UefiFormSetDefaultVarStoreId) {\r
+ if (Node->StoreId == UefiFormSetDefaultVarStoreId && (StrCmp (FrameworkReservedVarstoreName, Node->Name) != 0)) {\r
+ // The name of default VARSTORE with a Explicit declaration statement will be updated to L"Setup" to make sure\r
+ // the Framework HII Setup module will run correctly. Framework HII Setup module always assumed that default\r
+ // VARSTORE to have L"Setup" as name, Formset GUID as GUID. \r
Pack->VariableId = 0;\r
+ Pack->VariableNameLength = (UINT32) StrSize (FrameworkReservedVarstoreName);\r
+ CopyMem ((UINT8 *) Pack + sizeof (EFI_HII_VARIABLE_PACK), FrameworkReservedVarstoreName, StrSize (FrameworkReservedVarstoreName));\r
+ DEBUG ((EFI_D_INFO, "VarstoreID: %x; Name: %s -> %s.\n", UefiFormSetDefaultVarStoreId, Node->Name, FrameworkReservedVarstoreName));\r
} else {\r
Pack->VariableId = Node->StoreId;\r
+ Pack->VariableNameLength = (UINT32) StrSize (Node->Name);\r
+ CopyMem ((UINT8 *) Pack + sizeof (EFI_HII_VARIABLE_PACK), Node->Name, StrSize (Node->Name));\r
}\r
+\r
+ Size += Pack->VariableNameLength;\r
//\r
// Initialize EFI_HII_VARIABLE_PACK\r
//\r
Pack->Header.Type = 0;\r
Pack->Header.Length = (UINT32) Size;\r
- Pack->VariableNameLength = (UINT32) StrSize (Node->Name);\r
CopyMem (&Pack->VariableGuid, &Node->Guid, sizeof (EFI_GUID));\r
\r
- CopyMem ((UINT8 *) Pack + sizeof (EFI_HII_VARIABLE_PACK), Node->Name, StrSize (Node->Name));\r
CopyMem ((UINT8 *) Pack + sizeof (EFI_HII_VARIABLE_PACK) + Pack->VariableNameLength, Node->Buffer, Node->Size);\r
\r
Size += sizeof (EFI_HII_VARIABLE_PACK_LIST);\r
while (!IsNull (&FormSet->StorageListHead, StorageList)) {\r
Storage = FORMSET_STORAGE_FROM_LINK (StorageList);\r
\r
- DEBUG ((EFI_D_INFO, "FormSet %g: Found Varstore ID %x\n", &FormSet->Guid, Storage->VarStoreId));\r
+ DEBUG ((EFI_D_INFO, "FormSet %g: Found Varstore ID %x Name %s Size 0x%x\n", &FormSet->Guid, Storage->VarStoreId, Storage->Name, Storage->Size));\r
\r
if (Storage->VarStoreId == FRAMEWORK_RESERVED_VARSTORE_ID) {\r
+ //\r
+ // 1) If VarStore ID of FRAMEWORK_RESERVED_VARSTORE_ID (0x01) is found, Var Store ID is used.\r
+ //\r
FormSet->DefaultVarStoreId = FRAMEWORK_RESERVED_VARSTORE_ID;\r
break;\r
}\r
}\r
\r
if (FormSet->DefaultVarStoreId != FRAMEWORK_RESERVED_VARSTORE_ID) {\r
+ //\r
+ // \r
+ // 2) If VarStore ID of FRAMEWORK_RESERVED_VARSTORE_ID is not found, First Var Store ID is used \r
+ // as the default Var Store ID.\r
+ //\r
StorageList = GetFirstNode (&FormSet->StorageListHead);\r
if (!IsNull (&FormSet->StorageListHead, StorageList)) {\r
Storage = FORMSET_STORAGE_FROM_LINK (StorageList);\r