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