| /** @file | |
| Guid for Pcd DataBase Signature. | |
| Copyright (c) 2012 - 2018, Intel Corporation. All rights reserved.<BR> | |
| SPDX-License-Identifier: BSD-2-Clause-Patent | |
| **/ | |
| #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 UINT64 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_STRING (0x1U << PCD_TYPE_SHIFT) | |
| #define PCD_TYPE_ALL_SET (PCD_TYPE_DATA | PCD_TYPE_HII | PCD_TYPE_VPD | 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 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. | |
| UINT32 Attributes; // Variable attributes. | |
| UINT16 Property; // Variable property. | |
| UINT16 Reserved; | |
| } 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; // Length of DEFAULT SKU PCD DB | |
| SKU_ID SystemSkuId; // Current SkuId value. | |
| UINT32 LengthForAllSkus; // Length of all SKU PCD DB | |
| 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. | |
| UINT8 Pad[6]; // Pad bytes to satisfy the alignment. | |
| // | |
| // Default initialized external PCD database binary structure | |
| // | |
| // Padding is needed to keep necessary alignment | |
| // | |
| // SKU_ID SkuIdTable[]; // SkuIds system supports. | |
| // 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 | |
| // 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[]; | |
| } 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; | |
| typedef struct { | |
| UINT32 Offset : 24; | |
| UINT32 Value : 8; | |
| } PCD_DATA_DELTA; | |
| typedef struct { | |
| SKU_ID SkuId; | |
| UINT16 DefaultId; | |
| UINT8 Reserved[6]; | |
| } PCD_DEFAULT_INFO; | |
| typedef struct { | |
| // | |
| // Full size, it must be at 8 byte alignment. | |
| // | |
| UINT32 DataSize; | |
| // | |
| // HeaderSize includes HeaderSize fields and DefaultInfo arrays | |
| // | |
| UINT32 HeaderSize; | |
| // | |
| // DefaultInfo arrays those have the same default setting. | |
| // | |
| PCD_DEFAULT_INFO DefaultInfo[1]; | |
| // | |
| // Default data is stored as variable storage or the array of DATA_DELTA. | |
| // | |
| } PCD_DEFAULT_DATA; | |
| #define PCD_NV_STORE_DEFAULT_BUFFER_SIGNATURE SIGNATURE_32('N', 'S', 'D', 'B') | |
| typedef struct { | |
| // | |
| // PCD_NV_STORE_DEFAULT_BUFFER_SIGNATURE | |
| // | |
| UINT32 Signature; | |
| // | |
| // Length of the taken default buffer | |
| // | |
| UINT32 Length; | |
| // | |
| // Length of the total reserved buffer | |
| // | |
| UINT32 MaxLength; | |
| // | |
| // Reserved for 8 byte alignment | |
| // | |
| UINT32 Reserved; | |
| // one or more PCD_DEFAULT_DATA | |
| } PCD_NV_STORE_DEFAULT_BUFFER_HEADER; | |
| // | |
| // NvStoreDefaultValueBuffer layout: | |
| // +-------------------------------------+ | |
| // | PCD_NV_STORE_DEFAULT_BUFFER_HEADER | | |
| // +-------------------------------------+ | |
| // | PCD_DEFAULT_DATA (DEFAULT, Standard)| | |
| // +-------------------------------------+ | |
| // | PCD_DATA_DELTA (DEFAULT, Standard)| | |
| // +-------------------------------------+ | |
| // | ...... | | |
| // +-------------------------------------+ | |
| // | PCD_DEFAULT_DATA (SKU A, Standard) | | |
| // +-------------------------------------+ | |
| // | PCD_DATA_DELTA (SKU A, Standard) | | |
| // +-------------------------------------+ | |
| // | ...... | | |
| // +-------------------------------------+ | |
| // | |
| #pragma pack(1) | |
| typedef struct { | |
| SKU_ID SkuId; | |
| SKU_ID SkuIdCompared; | |
| UINT32 Length; | |
| // PCD_DATA_DELTA DeltaData[] | |
| } PCD_DATABASE_SKU_DELTA; | |
| // | |
| // PCD database layout: | |
| // +---------------------------------+ | |
| // | PCD_DATABASE_INIT (DEFAULT SKU) | | |
| // +---------------------------------+ | |
| // | PCD_DATABASE_SKU_DELTA (SKU A) | | |
| // +---------------------------------+ | |
| // | PCD_DATABASE_SKU_DELTA (SKU B) | | |
| // +---------------------------------+ | |
| // | ...... | | |
| // +---------------------------------+ | |
| // | |
| #pragma pack() | |
| #endif |