+/** @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
+The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php. \r
+\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
+#ifndef _PCD_DATABASE_SIGNATURE_GUID_H_\r
+#define _PCD_DATABASE_SIGNATURE_GUID_H_\r
+\r
+#define PCD_DATA_BASE_SIGNATURE_GUID \\r
+{ 0x3c7d193c, 0x682c, 0x4c14, { 0xa6, 0x8f, 0x55, 0x2d, 0xea, 0x4f, 0x43, 0x7e } }\r
+\r
+extern EFI_GUID gPcdDataBaseSignatureGuid;\r
+\r
+//\r
+// Common definitions\r
+//\r
+typedef UINT8 SKU_ID;\r
+\r
+#define PCD_TYPE_SHIFT 28\r
+\r
+#define PCD_TYPE_DATA (0x0U << PCD_TYPE_SHIFT)\r
+#define PCD_TYPE_HII (0x8U << PCD_TYPE_SHIFT)\r
+#define PCD_TYPE_VPD (0x4U << PCD_TYPE_SHIFT)\r
+#define PCD_TYPE_SKU_ENABLED (0x2U << PCD_TYPE_SHIFT)\r
+#define PCD_TYPE_STRING (0x1U << PCD_TYPE_SHIFT)\r
+\r
+#define PCD_TYPE_ALL_SET (PCD_TYPE_DATA | PCD_TYPE_HII | PCD_TYPE_VPD | PCD_TYPE_SKU_ENABLED | PCD_TYPE_STRING)\r
+\r
+#define PCD_DATUM_TYPE_SHIFT 24\r
+\r
+#define PCD_DATUM_TYPE_POINTER (0x0U << PCD_DATUM_TYPE_SHIFT)\r
+#define PCD_DATUM_TYPE_UINT8 (0x1U << PCD_DATUM_TYPE_SHIFT)\r
+#define PCD_DATUM_TYPE_UINT16 (0x2U << PCD_DATUM_TYPE_SHIFT)\r
+#define PCD_DATUM_TYPE_UINT32 (0x4U << PCD_DATUM_TYPE_SHIFT)\r
+#define PCD_DATUM_TYPE_UINT64 (0x8U << PCD_DATUM_TYPE_SHIFT)\r
+\r
+#define PCD_DATUM_TYPE_ALL_SET (PCD_DATUM_TYPE_POINTER | \\r
+ PCD_DATUM_TYPE_UINT8 | \\r
+ PCD_DATUM_TYPE_UINT16 | \\r
+ PCD_DATUM_TYPE_UINT32 | \\r
+ PCD_DATUM_TYPE_UINT64)\r
+\r
+#define PCD_DATUM_TYPE_SHIFT2 20\r
+\r
+#define PCD_DATUM_TYPE_UINT8_BOOLEAN (0x1U << PCD_DATUM_TYPE_SHIFT2)\r
+\r
+#define PCD_DATABASE_OFFSET_MASK (~(PCD_TYPE_ALL_SET | PCD_DATUM_TYPE_ALL_SET | PCD_DATUM_TYPE_UINT8_BOOLEAN))\r
+\r
+typedef struct {\r
+ UINT32 ExTokenNumber;\r
+ UINT16 TokenNumber; // Token Number for Dynamic-Ex PCD.\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
+} VARIABLE_HEAD;\r
+\r
+typedef struct {\r
+ UINT32 Offset;\r
+} VPD_HEAD;\r
+\r
+typedef UINT32 STRING_HEAD;\r
+\r
+typedef UINT16 SIZE_INFO;\r
+\r
+typedef struct {\r
+ UINT32 TokenSpaceCNameIndex; // Offset in String Table in units of UINT8.\r
+ UINT32 PcdCNameIndex; // Offset in String Table in units of UINT8.\r
+} PCD_NAME_INDEX;\r
+\r
+typedef UINT32 TABLE_OFFSET;\r
+\r
+typedef struct {\r
+ GUID Signature; // PcdDataBaseGuid.\r
+ UINT32 BuildVersion;\r
+ UINT32 Length;\r
+ UINT32 UninitDataBaseSize; // Total size for PCD those default value with 0.\r
+ TABLE_OFFSET LocalTokenNumberTableOffset;\r
+ TABLE_OFFSET ExMapTableOffset;\r
+ TABLE_OFFSET GuidTableOffset;\r
+ TABLE_OFFSET StringTableOffset;\r
+ TABLE_OFFSET SizeTableOffset;\r
+ TABLE_OFFSET SkuIdTableOffset;\r
+ TABLE_OFFSET PcdNameTableOffset;\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
+\r
+ //\r
+ // Default initialized external PCD database binary structure\r
+ //\r
+ // Padding is needed to keep necessary alignment\r
+ //\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
+ //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
+//\r
+// PEI and DXE Pcd driver use the same PCD database\r
+//\r
+typedef PCD_DATABASE_INIT PEI_PCD_DATABASE;\r
+typedef PCD_DATABASE_INIT DXE_PCD_DATABASE;\r
+\r
+\r
+typedef struct {\r
+ PEI_PCD_DATABASE *PeiDb;\r
+ DXE_PCD_DATABASE *DxeDb;\r
+} PCD_DATABASE;\r
+\r
+\r
+#endif\r