]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Include/Guid/PcdDataBaseSignatureGuid.h
MdeModulePkg: Update PCD driver to support the optimized PcdDataBase
[mirror_edk2.git] / MdeModulePkg / Include / Guid / PcdDataBaseSignatureGuid.h
index ac95f7e21ae8712a04c64252cc64a1199a7da374..d670af14e909c3859a58a223f5db80c50e7e73d2 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Guid for Pcd DataBase Signature.\r
 \r
-Copyright (c) 2012 - 2015, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2012 - 2016, Intel Corporation. All rights reserved.<BR>\r
 This program and the accompanying materials are licensed and made available under\r
 the terms and conditions of the BSD License that accompanies this distribution.\r
 The full text of the license may be found at\r
@@ -23,7 +23,7 @@ extern EFI_GUID gPcdDataBaseSignatureGuid;
 //\r
 // Common definitions\r
 //\r
-typedef UINT8 SKU_ID;\r
+typedef UINT64 SKU_ID;\r
 \r
 #define PCD_TYPE_SHIFT        28\r
 \r
@@ -61,11 +61,6 @@ typedef struct  {
   UINT16  ExGuidIndex;          // Index of GuidTable in units of GUID.\r
 } DYNAMICEX_MAPPING;\r
 \r
-typedef struct {\r
-  UINT32  SkuDataStartOffset;   // Offset(with TYPE info) from the PCD_DB.\r
-  UINT32  SkuIdTableOffset;     // Offset from the PCD_DB.\r
-} SKU_HEAD;\r
-\r
 typedef struct {\r
   UINT32  StringIndex;          // Offset in String Table in units of UINT8.\r
   UINT32  DefaultValueOffset;   // Offset of the Default Value.\r
@@ -94,7 +89,9 @@ typedef UINT32 TABLE_OFFSET;
 typedef struct {\r
     GUID                  Signature;            // PcdDataBaseGuid.\r
     UINT32                BuildVersion;\r
-    UINT32                Length;\r
+    UINT32                Length;               // Length of DEFAULT SKU PCD DB\r
+    SKU_ID                SystemSkuId;          // Current SkuId value.\r
+    UINT32                LengthForAllSkus;     // Length of all SKU PCD DB\r
     UINT32                UninitDataBaseSize;   // Total size for PCD those default value with 0.\r
     TABLE_OFFSET          LocalTokenNumberTableOffset;\r
     TABLE_OFFSET          ExMapTableOffset;\r
@@ -106,14 +103,14 @@ typedef struct {
     UINT16                LocalTokenCount;      // LOCAL_TOKEN_NUMBER for all.\r
     UINT16                ExTokenCount;         // EX_TOKEN_NUMBER for DynamicEx.\r
     UINT16                GuidTableCount;       // The Number of Guid in GuidTable.\r
-    SKU_ID                SystemSkuId;          // Current SkuId value.\r
-    UINT8                 Pad;                  // Pad bytes to satisfy the alignment.\r
+    UINT8                 Pad[6];               // Pad bytes to satisfy the alignment.\r
 \r
     //\r
     // Default initialized external PCD database binary structure\r
     //\r
     // Padding is needed to keep necessary alignment\r
     //\r
+    //SKU_ID                         SkuIdTable[];            // SkuIds system supports.\r
     //UINT64                         ValueUint64[];\r
     //UINT32                         ValueUint32[];\r
     //VPD_HEAD                       VpdHead[];               // VPD Offset\r
@@ -123,14 +120,11 @@ typedef struct {
     //STRING_HEAD                    StringHead[];            // String PCD\r
     //PCD_NAME_INDEX                 PcdNameTable[];          // PCD name index info. It can be accessed by the PcdNameTableOffset.\r
     //VARIABLE_HEAD                  VariableHead[];          // HII PCD\r
-    //SKU_HEAD                       SkuHead[];               // Store SKU info for each PCD with SKU enable.\r
     //UINT8                          StringTable[];           // String for String PCD value and HII PCD Variable Name. It can be accessed by StringTableOffset.\r
     //SIZE_INFO                      SizeTable[];             // MaxSize and CurSize for String PCD. It can be accessed by SizeTableOffset.\r
     //UINT16                         ValueUint16[];\r
     //UINT8                          ValueUint8[];\r
     //BOOLEAN                        ValueBoolean[];\r
-    //UINT8                          SkuIdTable[];            // SkuIds system supports.\r
-    //UINT8                          SkuIndexTable[];         // SkuIds for each PCD with SKU enable.\r
 \r
 } PCD_DATABASE_INIT;\r
 \r
@@ -146,5 +140,96 @@ typedef struct {
   DXE_PCD_DATABASE  *DxeDb;\r
 } PCD_DATABASE;\r
 \r
+typedef struct {\r
+  UINT32 Offset:24;\r
+  UINT32 Value:8;\r
+} PCD_DATA_DELTA;\r
+\r
+typedef struct {\r
+  SKU_ID SkuId;\r
+  UINT16 DefaultId;\r
+  UINT8  Reserved[6];\r
+} PCD_DEFAULT_INFO;\r
+\r
+typedef struct {\r
+  //\r
+  // Full size, it must be at 8 byte alignment.\r
+  //\r
+  UINT32 DataSize;\r
+  //\r
+  // HeaderSize includes HeaderSize fields and DefaultInfo arrays\r
+  //\r
+  UINT32 HeaderSize;\r
+  //\r
+  // DefaultInfo arrays those have the same default setting.\r
+  //\r
+  PCD_DEFAULT_INFO DefaultInfo[1];\r
+  //\r
+  // Default data is stored as variable storage or the array of DATA_DELTA.\r
+  //\r
+} PCD_DEFAULT_DATA;\r
+\r
+#define PCD_NV_STORE_DEFAULT_BUFFER_SIGNATURE SIGNATURE_32('N', 'S', 'D', 'B')\r
+\r
+typedef struct {\r
+  //\r
+  // PCD_NV_STORE_DEFAULT_BUFFER_SIGNATURE\r
+  //\r
+  UINT32    Signature;\r
+  //\r
+  // Length of the taken default buffer\r
+  //\r
+  UINT32    Length;\r
+  //\r
+  // Length of the total reserved buffer\r
+  //\r
+  UINT32    MaxLength;\r
+  //\r
+  // Reserved for 8 byte alignment\r
+  //\r
+  UINT32    Reserved;\r
+  // one or more PCD_DEFAULT_DATA\r
+} PCD_NV_STORE_DEFAULT_BUFFER_HEADER;\r
+\r
+//\r
+// NvStoreDefaultValueBuffer layout:\r
+// +-------------------------------------+\r
+// | PCD_NV_STORE_DEFAULT_BUFFER_HEADER  |\r
+// +-------------------------------------+\r
+// | PCD_DEFAULT_DATA (DEFAULT, Standard)|\r
+// +-------------------------------------+\r
+// | PCD_DATA_DELTA   (DEFAULT, Standard)|\r
+// +-------------------------------------+\r
+// | ......                              |\r
+// +-------------------------------------+\r
+// | PCD_DEFAULT_DATA (SKU A, Standard)  |\r
+// +-------------------------------------+\r
+// | PCD_DATA_DELTA   (SKU A, Standard)  |\r
+// +-------------------------------------+\r
+// | ......                              |\r
+// +-------------------------------------+\r
+//\r
+\r
+#pragma pack(1)\r
+typedef struct {\r
+  SKU_ID    SkuId;\r
+  SKU_ID    SkuIdCompared;\r
+  UINT32    Length;\r
+  // PCD_DATA_DELTA   DeltaData[]\r
+} PCD_DATABASE_SKU_DELTA;\r
+\r
+//\r
+// PCD database layout:\r
+// +---------------------------------+\r
+// | PCD_DATABASE_INIT (DEFAULT SKU) |\r
+// +---------------------------------+\r
+// | PCD_DATABASE_SKU_DELTA (SKU A)  |\r
+// +---------------------------------+\r
+// | PCD_DATABASE_SKU_DELTA (SKU B)  |\r
+// +---------------------------------+\r
+// | ......                          |\r
+// +---------------------------------+\r
+//\r
+#pragma pack()\r
 \r
 #endif\r