From 419db80bef66edff583a0a5f406e801d70f11344 Mon Sep 17 00:00:00 2001 From: Bob C Feng Date: Mon, 18 Nov 2013 07:45:49 +0000 Subject: MdePkg and MdeModulePkg Pcd: Implement PCD Driver for External PCD Database and SKU enable Feature. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Bob C Feng Reviewed-by: Liming Gao Reviewed-by: Star Zeng git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14857 6f19259b-4bc3-4df7-8a09-765794883524 --- .../Include/Guid/PcdDataBaseSignatureGuid.h | 147 +++++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 MdeModulePkg/Include/Guid/PcdDataBaseSignatureGuid.h (limited to 'MdeModulePkg/Include') diff --git a/MdeModulePkg/Include/Guid/PcdDataBaseSignatureGuid.h b/MdeModulePkg/Include/Guid/PcdDataBaseSignatureGuid.h new file mode 100644 index 0000000000..22c0d95f60 --- /dev/null +++ b/MdeModulePkg/Include/Guid/PcdDataBaseSignatureGuid.h @@ -0,0 +1,147 @@ +/** @file + Guid for Pcd DataBase Signature. + +Copyright (c) 2012 - 2013, Intel Corporation. All rights reserved.
+This program and the accompanying materials are licensed and made available under +the terms and conditions of the BSD License that accompanies this distribution. +The full text of the license may be found at +http://opensource.org/licenses/bsd-license.php. + +THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +#ifndef _PCD_DATABASE_SIGNATURE_GUID_H_ +#define _PCD_DATABASE_SIGNATURE_GUID_H_ + +#define PCD_DATA_BASE_SIGNATURE_GUID \ +{ 0x3c7d193c, 0x682c, 0x4c14, { 0xa6, 0x8f, 0x55, 0x2d, 0xea, 0x4f, 0x43, 0x7e } } + +extern EFI_GUID gPcdDataBaseSignatureGuid; + +// +// Common definitions +// +typedef UINT8 SKU_ID; + +#define PCD_TYPE_SHIFT 28 + +#define PCD_TYPE_DATA (0x0U << PCD_TYPE_SHIFT) +#define PCD_TYPE_HII (0x8U << PCD_TYPE_SHIFT) +#define PCD_TYPE_VPD (0x4U << PCD_TYPE_SHIFT) +#define PCD_TYPE_SKU_ENABLED (0x2U << PCD_TYPE_SHIFT) +#define PCD_TYPE_STRING (0x1U << PCD_TYPE_SHIFT) + +#define PCD_TYPE_ALL_SET (PCD_TYPE_DATA | PCD_TYPE_HII | PCD_TYPE_VPD | PCD_TYPE_SKU_ENABLED | PCD_TYPE_STRING) + +#define PCD_DATUM_TYPE_SHIFT 24 + +#define PCD_DATUM_TYPE_POINTER (0x0U << PCD_DATUM_TYPE_SHIFT) +#define PCD_DATUM_TYPE_UINT8 (0x1U << PCD_DATUM_TYPE_SHIFT) +#define PCD_DATUM_TYPE_UINT16 (0x2U << PCD_DATUM_TYPE_SHIFT) +#define PCD_DATUM_TYPE_UINT32 (0x4U << PCD_DATUM_TYPE_SHIFT) +#define PCD_DATUM_TYPE_UINT64 (0x8U << PCD_DATUM_TYPE_SHIFT) + +#define PCD_DATUM_TYPE_ALL_SET (PCD_DATUM_TYPE_POINTER | \ + PCD_DATUM_TYPE_UINT8 | \ + PCD_DATUM_TYPE_UINT16 | \ + PCD_DATUM_TYPE_UINT32 | \ + PCD_DATUM_TYPE_UINT64) + +#define PCD_DATUM_TYPE_SHIFT2 20 + +#define PCD_DATUM_TYPE_UINT8_BOOLEAN (0x1U << PCD_DATUM_TYPE_SHIFT2) + +#define PCD_DATABASE_OFFSET_MASK (~(PCD_TYPE_ALL_SET | PCD_DATUM_TYPE_ALL_SET | PCD_DATUM_TYPE_UINT8_BOOLEAN)) + +typedef struct { + UINT32 ExTokenNumber; + UINT16 TokenNumber; // Token Number for Dynamic-Ex PCD. + UINT16 ExGuidIndex; // Index of GuidTable in units of GUID. +} DYNAMICEX_MAPPING; + +typedef struct { + UINT32 SkuDataStartOffset; // Offset(with TYPE info) from the PCD_DB. + UINT32 SkuIdTableOffset; // Offset from the PCD_DB. +} SKU_HEAD; + +typedef struct { + UINT32 StringIndex; // Offset in String Table in units of UINT8. + UINT32 DefaultValueOffset; // Offset of the Default Value. + UINT16 GuidTableIndex; // Offset in Guid Table in units of GUID. + UINT16 Offset; // Offset in Variable. +} VARIABLE_HEAD; + +typedef struct { + UINT32 Offset; +} VPD_HEAD; + +typedef UINT32 STRING_HEAD; + +typedef UINT16 SIZE_INFO; + +typedef struct { + UINT32 TokenSpaceCNameIndex; // Offset in String Table in units of UINT8. + UINT32 PcdCNameIndex; // Offset in String Table in units of UINT8. +} PCD_NAME_INDEX; + +typedef UINT32 TABLE_OFFSET; + +typedef struct { + GUID Signature; // PcdDataBaseGuid. + UINT32 BuildVersion; + UINT32 Length; + UINT32 UninitDataBaseSize; // Total size for PCD those default value with 0. + TABLE_OFFSET LocalTokenNumberTableOffset; + TABLE_OFFSET ExMapTableOffset; + TABLE_OFFSET GuidTableOffset; + TABLE_OFFSET StringTableOffset; + TABLE_OFFSET SizeTableOffset; + TABLE_OFFSET SkuIdTableOffset; + TABLE_OFFSET PcdNameTableOffset; + UINT16 LocalTokenCount; // LOCAL_TOKEN_NUMBER for all. + UINT16 ExTokenCount; // EX_TOKEN_NUMBER for DynamicEx. + UINT16 GuidTableCount; // The Number of Guid in GuidTable. + SKU_ID SystemSkuId; // Current SkuId value. + UINT8 Pad; // Pad bytes to satisfy the alignment. + + // + // Default initialized external PCD database binary structure + // + // Padding is needed to keep necessary alignment + // + //UINT64 ValueUint64[]; + //UINT32 ValueUint32[]; + //VPD_HEAD VpdHead[]; // VPD Offset + //DYNAMICEX_MAPPING ExMapTable[]; // DynamicEx PCD mapped to LocalIndex in LocalTokenNumberTable. It can be accessed by the ExMapTableOffset. + //UINT32 LocalTokenNumberTable[]; // Offset | DataType | PCD Type. It can be accessed by LocalTokenNumberTableOffset. + //GUID GuidTable[]; // GUID for DynamicEx and HII PCD variable Guid. It can be accessed by the GuidTableOffset. + //STRING_HEAD StringHead[]; // String PCD + //PCD_NAME_INDEX PcdNameTable[]; // PCD name index info. It can be accessed by the PcdNameTableOffset. + //VARIABLE_HEAD VariableHead[]; // HII PCD + //SKU_HEAD SkuHead[]; // Store SKU info for each PCD with SKU enable. + //UINT8 StringTable[]; // String for String PCD value and HII PCD Variable Name. It can be accessed by StringTableOffset. + //SIZE_INFO SizeTable[]; // MaxSize and CurSize for String PCD. It can be accessed by SizeTableOffset. + //UINT16 ValueUint16[]; + //UINT8 ValueUint8[]; + //BOOLEAN ValueBoolean[]; + //UINT8 SkuIdTable[]; // SkuIds system supports. + //UINT8 SkuIndexTable[]; // SkuIds for each PCD with SKU enable. + +} PCD_DATABASE_INIT; + +// +// PEI and DXE Pcd driver use the same PCD database +// +typedef PCD_DATABASE_INIT PEI_PCD_DATABASE; +typedef PCD_DATABASE_INIT DXE_PCD_DATABASE; + + +typedef struct { + PEI_PCD_DATABASE *PeiDb; + DXE_PCD_DATABASE *DxeDb; +} PCD_DATABASE; + + +#endif -- cgit v1.2.3