]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Include/Guid/PcdDataBaseSignatureGuid.h
MdeModulePkg: Update PCD driver to support the optimized PcdDataBase
[mirror_edk2.git] / MdeModulePkg / Include / Guid / PcdDataBaseSignatureGuid.h
CommitLineData
419db80b
BF
1/** @file\r
2 Guid for Pcd DataBase Signature.\r
3\r
b6e89910 4Copyright (c) 2012 - 2016, Intel Corporation. All rights reserved.<BR>\r
23f3e119
SZ
5This program and the accompanying materials are licensed and made available under\r
6the terms and conditions of the BSD License that accompanies this distribution.\r
419db80b 7The full text of the license may be found at\r
23f3e119 8http://opensource.org/licenses/bsd-license.php.\r
419db80b 9\r
23f3e119 10THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
419db80b
BF
11WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12\r
13**/\r
14\r
15#ifndef _PCD_DATABASE_SIGNATURE_GUID_H_\r
16#define _PCD_DATABASE_SIGNATURE_GUID_H_\r
17\r
18#define PCD_DATA_BASE_SIGNATURE_GUID \\r
19{ 0x3c7d193c, 0x682c, 0x4c14, { 0xa6, 0x8f, 0x55, 0x2d, 0xea, 0x4f, 0x43, 0x7e } }\r
20\r
21extern EFI_GUID gPcdDataBaseSignatureGuid;\r
22\r
23//\r
24// Common definitions\r
25//\r
b6e89910 26typedef UINT64 SKU_ID;\r
419db80b
BF
27\r
28#define PCD_TYPE_SHIFT 28\r
29\r
30#define PCD_TYPE_DATA (0x0U << PCD_TYPE_SHIFT)\r
31#define PCD_TYPE_HII (0x8U << PCD_TYPE_SHIFT)\r
32#define PCD_TYPE_VPD (0x4U << PCD_TYPE_SHIFT)\r
33#define PCD_TYPE_SKU_ENABLED (0x2U << PCD_TYPE_SHIFT)\r
34#define PCD_TYPE_STRING (0x1U << PCD_TYPE_SHIFT)\r
35\r
36#define PCD_TYPE_ALL_SET (PCD_TYPE_DATA | PCD_TYPE_HII | PCD_TYPE_VPD | PCD_TYPE_SKU_ENABLED | PCD_TYPE_STRING)\r
37\r
38#define PCD_DATUM_TYPE_SHIFT 24\r
39\r
40#define PCD_DATUM_TYPE_POINTER (0x0U << PCD_DATUM_TYPE_SHIFT)\r
41#define PCD_DATUM_TYPE_UINT8 (0x1U << PCD_DATUM_TYPE_SHIFT)\r
42#define PCD_DATUM_TYPE_UINT16 (0x2U << PCD_DATUM_TYPE_SHIFT)\r
43#define PCD_DATUM_TYPE_UINT32 (0x4U << PCD_DATUM_TYPE_SHIFT)\r
44#define PCD_DATUM_TYPE_UINT64 (0x8U << PCD_DATUM_TYPE_SHIFT)\r
45\r
46#define PCD_DATUM_TYPE_ALL_SET (PCD_DATUM_TYPE_POINTER | \\r
47 PCD_DATUM_TYPE_UINT8 | \\r
48 PCD_DATUM_TYPE_UINT16 | \\r
49 PCD_DATUM_TYPE_UINT32 | \\r
50 PCD_DATUM_TYPE_UINT64)\r
51\r
52#define PCD_DATUM_TYPE_SHIFT2 20\r
53\r
54#define PCD_DATUM_TYPE_UINT8_BOOLEAN (0x1U << PCD_DATUM_TYPE_SHIFT2)\r
55\r
56#define PCD_DATABASE_OFFSET_MASK (~(PCD_TYPE_ALL_SET | PCD_DATUM_TYPE_ALL_SET | PCD_DATUM_TYPE_UINT8_BOOLEAN))\r
57\r
58typedef struct {\r
59 UINT32 ExTokenNumber;\r
60 UINT16 TokenNumber; // Token Number for Dynamic-Ex PCD.\r
61 UINT16 ExGuidIndex; // Index of GuidTable in units of GUID.\r
62} DYNAMICEX_MAPPING;\r
63\r
419db80b
BF
64typedef struct {\r
65 UINT32 StringIndex; // Offset in String Table in units of UINT8.\r
66 UINT32 DefaultValueOffset; // Offset of the Default Value.\r
67 UINT16 GuidTableIndex; // Offset in Guid Table in units of GUID.\r
68 UINT16 Offset; // Offset in Variable.\r
23f3e119
SZ
69 UINT32 Attributes; // Variable attributes.\r
70 UINT16 Property; // Variable property.\r
71 UINT16 Reserved;\r
419db80b
BF
72} VARIABLE_HEAD;\r
73\r
74typedef struct {\r
75 UINT32 Offset;\r
76} VPD_HEAD;\r
77\r
78typedef UINT32 STRING_HEAD;\r
79\r
80typedef UINT16 SIZE_INFO;\r
81\r
82typedef struct {\r
83 UINT32 TokenSpaceCNameIndex; // Offset in String Table in units of UINT8.\r
84 UINT32 PcdCNameIndex; // Offset in String Table in units of UINT8.\r
85} PCD_NAME_INDEX;\r
86\r
87typedef UINT32 TABLE_OFFSET;\r
88\r
89typedef struct {\r
90 GUID Signature; // PcdDataBaseGuid.\r
91 UINT32 BuildVersion;\r
7c736265 92 UINT32 Length; // Length of DEFAULT SKU PCD DB\r
b6e89910 93 SKU_ID SystemSkuId; // Current SkuId value.\r
7c736265 94 UINT32 LengthForAllSkus; // Length of all SKU PCD DB\r
419db80b
BF
95 UINT32 UninitDataBaseSize; // Total size for PCD those default value with 0.\r
96 TABLE_OFFSET LocalTokenNumberTableOffset;\r
97 TABLE_OFFSET ExMapTableOffset;\r
98 TABLE_OFFSET GuidTableOffset;\r
99 TABLE_OFFSET StringTableOffset;\r
100 TABLE_OFFSET SizeTableOffset;\r
101 TABLE_OFFSET SkuIdTableOffset;\r
102 TABLE_OFFSET PcdNameTableOffset;\r
103 UINT16 LocalTokenCount; // LOCAL_TOKEN_NUMBER for all.\r
104 UINT16 ExTokenCount; // EX_TOKEN_NUMBER for DynamicEx.\r
105 UINT16 GuidTableCount; // The Number of Guid in GuidTable.\r
7c736265 106 UINT8 Pad[6]; // Pad bytes to satisfy the alignment.\r
419db80b
BF
107\r
108 //\r
109 // Default initialized external PCD database binary structure\r
110 //\r
111 // Padding is needed to keep necessary alignment\r
112 //\r
b6e89910 113 //SKU_ID SkuIdTable[]; // SkuIds system supports.\r
419db80b
BF
114 //UINT64 ValueUint64[];\r
115 //UINT32 ValueUint32[];\r
116 //VPD_HEAD VpdHead[]; // VPD Offset\r
117 //DYNAMICEX_MAPPING ExMapTable[]; // DynamicEx PCD mapped to LocalIndex in LocalTokenNumberTable. It can be accessed by the ExMapTableOffset.\r
118 //UINT32 LocalTokenNumberTable[]; // Offset | DataType | PCD Type. It can be accessed by LocalTokenNumberTableOffset.\r
119 //GUID GuidTable[]; // GUID for DynamicEx and HII PCD variable Guid. It can be accessed by the GuidTableOffset.\r
23f3e119 120 //STRING_HEAD StringHead[]; // String PCD\r
419db80b
BF
121 //PCD_NAME_INDEX PcdNameTable[]; // PCD name index info. It can be accessed by the PcdNameTableOffset.\r
122 //VARIABLE_HEAD VariableHead[]; // HII PCD\r
23f3e119 123 //UINT8 StringTable[]; // String for String PCD value and HII PCD Variable Name. It can be accessed by StringTableOffset.\r
419db80b
BF
124 //SIZE_INFO SizeTable[]; // MaxSize and CurSize for String PCD. It can be accessed by SizeTableOffset.\r
125 //UINT16 ValueUint16[];\r
126 //UINT8 ValueUint8[];\r
127 //BOOLEAN ValueBoolean[];\r
419db80b
BF
128\r
129} PCD_DATABASE_INIT;\r
130\r
131//\r
132// PEI and DXE Pcd driver use the same PCD database\r
133//\r
134typedef PCD_DATABASE_INIT PEI_PCD_DATABASE;\r
135typedef PCD_DATABASE_INIT DXE_PCD_DATABASE;\r
136\r
137\r
138typedef struct {\r
139 PEI_PCD_DATABASE *PeiDb;\r
140 DXE_PCD_DATABASE *DxeDb;\r
141} PCD_DATABASE;\r
142\r
fef4cfa7
LG
143typedef struct {\r
144 UINT32 Offset:24;\r
145 UINT32 Value:8;\r
146} PCD_DATA_DELTA;\r
147\r
148typedef struct {\r
149 SKU_ID SkuId;\r
150 UINT16 DefaultId;\r
151 UINT8 Reserved[6];\r
152} PCD_DEFAULT_INFO;\r
153\r
154typedef struct {\r
155 //\r
156 // Full size, it must be at 8 byte alignment.\r
157 //\r
158 UINT32 DataSize;\r
159 //\r
160 // HeaderSize includes HeaderSize fields and DefaultInfo arrays\r
161 //\r
162 UINT32 HeaderSize;\r
163 //\r
164 // DefaultInfo arrays those have the same default setting.\r
165 //\r
166 PCD_DEFAULT_INFO DefaultInfo[1];\r
167 //\r
168 // Default data is stored as variable storage or the array of DATA_DELTA.\r
169 //\r
170} PCD_DEFAULT_DATA;\r
171\r
172#define PCD_NV_STORE_DEFAULT_BUFFER_SIGNATURE SIGNATURE_32('N', 'S', 'D', 'B')\r
173\r
174typedef struct {\r
175 //\r
176 // PCD_NV_STORE_DEFAULT_BUFFER_SIGNATURE\r
177 //\r
178 UINT32 Signature;\r
179 //\r
180 // Length of the taken default buffer\r
181 //\r
182 UINT32 Length;\r
183 //\r
184 // Length of the total reserved buffer\r
185 //\r
186 UINT32 MaxLength;\r
187 //\r
188 // Reserved for 8 byte alignment\r
189 //\r
190 UINT32 Reserved;\r
191 // one or more PCD_DEFAULT_DATA\r
192} PCD_NV_STORE_DEFAULT_BUFFER_HEADER;\r
193\r
194//\r
195// NvStoreDefaultValueBuffer layout:\r
196// +-------------------------------------+\r
197// | PCD_NV_STORE_DEFAULT_BUFFER_HEADER |\r
198// +-------------------------------------+\r
199// | PCD_DEFAULT_DATA (DEFAULT, Standard)|\r
200// +-------------------------------------+\r
201// | PCD_DATA_DELTA (DEFAULT, Standard)|\r
202// +-------------------------------------+\r
203// | ...... |\r
204// +-------------------------------------+\r
205// | PCD_DEFAULT_DATA (SKU A, Standard) |\r
206// +-------------------------------------+\r
207// | PCD_DATA_DELTA (SKU A, Standard) |\r
208// +-------------------------------------+\r
209// | ...... |\r
210// +-------------------------------------+\r
211//\r
419db80b 212\r
7c736265
LG
213#pragma pack(1)\r
214typedef struct {\r
215 SKU_ID SkuId;\r
216 SKU_ID SkuIdCompared;\r
217 UINT32 Length;\r
218 // PCD_DATA_DELTA DeltaData[]\r
219} PCD_DATABASE_SKU_DELTA;\r
220\r
221//\r
222// PCD database layout:\r
223// +---------------------------------+\r
224// | PCD_DATABASE_INIT (DEFAULT SKU) |\r
225// +---------------------------------+\r
226// | PCD_DATABASE_SKU_DELTA (SKU A) |\r
227// +---------------------------------+\r
228// | PCD_DATABASE_SKU_DELTA (SKU B) |\r
229// +---------------------------------+\r
230// | ...... |\r
231// +---------------------------------+\r
232//\r
233#pragma pack()\r
234\r
419db80b 235#endif\r