/** @file\r
Guid for Pcd DataBase Signature.\r
\r
-Copyright (c) 2012 - 2013, 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
+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
-http://opensource.org/licenses/bsd-license.php. \r
+http://opensource.org/licenses/bsd-license.php.\r
\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
\r
**/\r
//\r
// Common definitions\r
//\r
-typedef UINT8 SKU_ID;\r
+typedef UINT64 SKU_ID;\r
\r
#define PCD_TYPE_SHIFT 28\r
\r
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
UINT16 GuidTableIndex; // Offset in Guid Table in units of GUID.\r
UINT16 Offset; // Offset in Variable.\r
+ UINT32 Attributes; // Variable attributes.\r
+ UINT16 Property; // Variable property.\r
+ UINT16 Reserved;\r
} VARIABLE_HEAD;\r
\r
typedef struct {\r
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
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
//DYNAMICEX_MAPPING ExMapTable[]; // DynamicEx PCD mapped to LocalIndex in LocalTokenNumberTable. It can be accessed by the ExMapTableOffset.\r
//UINT32 LocalTokenNumberTable[]; // Offset | DataType | PCD Type. It can be accessed by LocalTokenNumberTableOffset.\r
//GUID GuidTable[]; // GUID for DynamicEx and HII PCD variable Guid. It can be accessed by the GuidTableOffset.\r
- //STRING_HEAD StringHead[]; // String PCD \r
+ //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
+ //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
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