/** @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
//\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
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
//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
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