]> git.proxmox.com Git - mirror_edk2.git/blob - Tools/Source/GenBuild/org/tianocore/build/pcd/entity/UsageInstance.java
Remove the dead files.
[mirror_edk2.git] / Tools / Source / GenBuild / org / tianocore / build / pcd / entity / UsageInstance.java
1 /** @file
2 UsageInstance class.
3
4 This class indicate an usage instance for a PCD token. This instance maybe a module
5 or platform setting. When a module produce or cosume a PCD token, then this module
6 is an usage instance for this PCD token.
7
8 Copyright (c) 2006, Intel Corporation
9 All rights reserved. This program and the accompanying materials
10 are licensed and made available under the terms and conditions of the BSD License
11 which accompanies this distribution. The full text of the license may be found at
12 http://opensource.org/licenses/bsd-license.php
13
14 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
15 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
16
17 **/
18 package org.tianocore.build.pcd.entity;
19
20
21 import java.util.UUID;
22 import org.tianocore.ModuleTypeDef;
23 import org.tianocore.build.pcd.exception.EntityException;
24
25 /**
26 This class indicate an usage instance for a PCD token. This instance maybe a module
27 or platform setting. When a module produce or cosume a PCD token, then this module
28 is an usage instance for this PCD token.
29 **/
30 public class UsageInstance {
31 ///
32 /// This parent that this usage instance belongs to.
33 ///
34 public Token parentToken;
35
36 ///
37 /// The name of the module who contains this PCD.
38 ///
39 public String moduleName;
40
41 ///
42 /// The GUID of the module who contains this PCD.
43 ///
44 public UUID moduleGUID;
45
46 ///
47 /// The name of the package whose module contains this PCD.
48 ///
49 public String packageName;
50
51 ///
52 /// The GUID of the package whose module contains this PCD.
53 ///
54 public UUID packageGUID;
55
56 ///
57 /// The PCD type defined for module
58 ///
59 public Token.PCD_TYPE modulePcdType;
60
61 ///
62 /// The arch string of module contains this PCD
63 ///
64 public String arch;
65
66 ///
67 /// The version of module contains this PCD
68 ///
69 public String version;
70
71 ///
72 /// The module type for this usage instance.
73 ///
74 public ModuleTypeDef.Enum moduleType;
75
76 ///
77 /// The value of the PCD in this usage instance.
78 ///
79 public String datum;
80
81 ///
82 /// The maxDatumSize could be different for same PCD in different module
83 /// But this case is allow for FeatureFlag, FixedAtBuild, PatchableInModule
84 /// type.
85 ///
86 public int maxDatumSize;
87
88 ///
89 /// Autogen string for header file.
90 ///
91 public String hAutogenStr;
92
93 ///
94 /// Auotgen string for C code file.
95 ///
96 public String cAutogenStr;
97
98 /**
99 Constructure function
100
101 @param parentToken Member variable.
102 @param moduleName Member variable.
103 @param moduleGUID Member variable.
104 @param packageName Member variable.
105 @param packageGUID Member variable.
106 @param moduleType Member variable.
107 @param modulePcdType Member variable.
108 @param arch Member variable.
109 @param version Member variable.
110 @param value Member variable.
111 @param maxDatumSize Member variable.
112 */
113 public UsageInstance (Token parentToken,
114 String moduleName,
115 UUID moduleGUID,
116 String packageName,
117 UUID packageGUID,
118 ModuleTypeDef.Enum moduleType,
119 Token.PCD_TYPE modulePcdType,
120 String arch,
121 String version,
122 String value,
123 int maxDatumSize) {
124 this.parentToken = parentToken;
125 this.moduleName = moduleName;
126 this.moduleGUID = moduleGUID;
127 this.packageName = packageName;
128 this.packageGUID = packageGUID;
129 this.moduleType = moduleType;
130 this.modulePcdType = modulePcdType;
131 this.arch = arch;
132 this.version = version;
133 this.datum = value;
134 this.maxDatumSize = maxDatumSize;
135 }
136
137 /**
138 Get the primary key for usage instance array for every token.
139
140 @param moduleName the name of module
141 @param moduleGUID the GUID name of module
142 @param packageName the name of package who contains this module
143 @param packageGUID the GUID name of package
144 @param arch the archtecture string
145 @param version the version of this module
146
147 @return String primary key
148 */
149 public static String getPrimaryKey(String moduleName,
150 UUID moduleGUID,
151 String packageName,
152 UUID packageGUID,
153 String arch,
154 String version) {
155 //
156 // Because currently transition schema not require write moduleGuid, package Name, Packge GUID in
157 // <ModuleSA> section, So currently no expect all paramter must be valid.
158 return(moduleName + "_" +
159 ((moduleGUID != null) ? moduleGUID.toString() : "NullModuleGuid") + "_" +
160 ((packageName != null) ? packageName : "NullPackageName") + "_" +
161 ((packageGUID != null) ? packageGUID.toString() : "NullPackageGuid") + "_" +
162 ((arch != null) ? arch : "NullArch") + "_" +
163 ((version != null) ? version : "NullVersion"));
164 }
165
166 /**
167 Get primary key string for this usage instance
168
169 @return String primary key string
170 **/
171 public String getPrimaryKey() {
172 return UsageInstance.getPrimaryKey(moduleName, moduleGUID, packageName, packageGUID, arch, version);
173 }
174
175 /**
176 Judget whether current module is PEI driver
177
178 @return boolean
179 */
180 public boolean isPeiPhaseComponent() {
181 if ((moduleType == ModuleTypeDef.PEI_CORE) ||
182 (moduleType == ModuleTypeDef.PEIM)) {
183 return true;
184 }
185 return false;
186 }
187
188 public boolean isDxePhaseComponent() {
189 //
190 // BugBug: May need confirmation on which type of module can
191 // make use of Dynamic(EX) PCD entry.
192 //
193 if ((moduleType == ModuleTypeDef.DXE_DRIVER) ||
194 (moduleType == ModuleTypeDef.DXE_RUNTIME_DRIVER) ||
195 (moduleType == ModuleTypeDef.DXE_SAL_DRIVER) ||
196 (moduleType == ModuleTypeDef.DXE_SMM_DRIVER) ||
197 (moduleType == ModuleTypeDef.UEFI_DRIVER) ||
198 (moduleType == ModuleTypeDef.UEFI_APPLICATION)
199 ) {
200 return true;
201 }
202 return false;
203 }
204
205 /**
206 Generate autogen string for header file and C code file.
207
208 @throws EntityException Fail to generate.
209
210 @param isBuildUsedLibrary whether the autogen is for library.
211 */
212 public void generateAutoGen(boolean isBuildUsedLibrary)
213 throws EntityException {
214 String guidStringCName = null;
215 boolean isByteArray = false;
216 String printDatum = null;
217
218 hAutogenStr = "";
219 cAutogenStr = "";
220
221 if (this.modulePcdType == Token.PCD_TYPE.DYNAMIC_EX) {
222 hAutogenStr += String.format("#define _PCD_TOKEN_%s 0x%016x\r\n",
223 parentToken.cName, parentToken.dynamicExTokenNumber);
224 } else {
225 hAutogenStr += String.format("#define _PCD_TOKEN_%s 0x%016x\r\n",
226 parentToken.cName, parentToken.tokenNumber);
227 }
228
229 if (!isBuildUsedLibrary && !parentToken.isDynamicPCD) {
230 if (datum.trim().charAt(0) == '{') {
231 isByteArray = true;
232 }
233 }
234
235 if (parentToken.datumType == Token.DATUM_TYPE.UINT64) {
236 printDatum = this.datum + "ULL";
237 } else {
238 printDatum = this.datum;
239 }
240
241 switch (modulePcdType) {
242 case FEATURE_FLAG:
243 hAutogenStr += String.format("extern const BOOLEAN _gPcd_FixedAtBuild_%s;\r\n",
244 parentToken.cName);
245 hAutogenStr += String.format("#define _PCD_MODE_%s_%s _gPcd_FixedAtBuild_%s\r\n",
246 parentToken.GetAutogenDefinedatumTypeString(parentToken.datumType),
247 parentToken.cName,
248 parentToken.cName);
249
250 if (!isBuildUsedLibrary) {
251 hAutogenStr += String.format("#define _PCD_VALUE_%s %s\r\n",
252 parentToken.cName,
253 printDatum);
254 cAutogenStr += String.format("GLOBAL_REMOVE_IF_UNREFERENCED const BOOLEAN _gPcd_FixedAtBuild_%s = _PCD_VALUE_%s;\r\n",
255 parentToken.cName,
256 parentToken.cName);
257 }
258 break;
259 case FIXED_AT_BUILD:
260 if (isByteArray) {
261 hAutogenStr += String.format("extern const UINT8 _gPcd_FixedAtBuild_%s[];\r\n",
262 parentToken.cName);
263 hAutogenStr += String.format("#define _PCD_MODE_%s_%s &_gPcd_FixedAtBuild_%s\r\n",
264 Token.GetAutogenDefinedatumTypeString(parentToken.datumType),
265 parentToken.cName,
266 parentToken.cName);
267 } else {
268 hAutogenStr += String.format("extern const %s _gPcd_FixedAtBuild_%s;\r\n",
269 Token.getAutogendatumTypeString(parentToken.datumType),
270 parentToken.cName);
271 hAutogenStr += String.format("#define _PCD_MODE_%s_%s _gPcd_FixedAtBuild_%s\r\n",
272 Token.GetAutogenDefinedatumTypeString(parentToken.datumType),
273 parentToken.cName,
274 parentToken.cName);
275 }
276
277 if (!isBuildUsedLibrary) {
278 hAutogenStr += String.format("#define _PCD_VALUE_%s %s\r\n",
279 parentToken.cName,
280 printDatum);
281 if (isByteArray) {
282 cAutogenStr += String.format("GLOBAL_REMOVE_IF_UNREFERENCED const UINT8 _gPcd_FixedAtBuild_%s[] = _PCD_VALUE_%s;\r\n",
283 parentToken.cName,
284 parentToken.cName);
285 } else {
286 cAutogenStr += String.format("GLOBAL_REMOVE_IF_UNREFERENCED const %s _gPcd_FixedAtBuild_%s = _PCD_VALUE_%s;\r\n",
287 Token.getAutogendatumTypeString(parentToken.datumType),
288 parentToken.cName,
289 parentToken.cName);
290 }
291 }
292 break;
293 case PATCHABLE_IN_MODULE:
294 if (isByteArray) {
295 hAutogenStr += String.format("extern UINT8 _gPcd_BinaryPatch_%s[];\r\n",
296 parentToken.cName);
297 hAutogenStr += String.format("#define _PCD_MODE_%s_%s &_gPcd_BinaryPatch_%s\r\n",
298 Token.GetAutogenDefinedatumTypeString(parentToken.datumType),
299 parentToken.cName,
300 parentToken.cName);
301 } else {
302 hAutogenStr += String.format("extern %s _gPcd_BinaryPatch_%s;\r\n",
303 Token.getAutogendatumTypeString(parentToken.datumType),
304 parentToken.cName);
305 hAutogenStr += String.format("#define _PCD_MODE_%s_%s _gPcd_BinaryPatch_%s\r\n",
306 Token.GetAutogenDefinedatumTypeString(parentToken.datumType),
307 parentToken.cName,
308 parentToken.cName);
309 }
310
311 if (!isBuildUsedLibrary) {
312 hAutogenStr += String.format("#define _PCD_VALUE_%s %s\r\n",
313 parentToken.cName,
314 printDatum);
315 if (isByteArray) {
316 cAutogenStr += String.format("GLOBAL_REMOVE_IF_UNREFERENCED UINT8 _gPcd_BinaryPatch_%s[] = _PCD_VALUE_%s;\r\n",
317 parentToken.cName,
318 parentToken.cName);
319 } else {
320 cAutogenStr += String.format("GLOBAL_REMOVE_IF_UNREFERENCED %s _gPcd_BinaryPatch_%s = _PCD_VALUE_%s;\r\n",
321 Token.getAutogendatumTypeString(parentToken.datumType),
322 parentToken.cName,
323 parentToken.cName);
324 }
325 }
326
327 break;
328 case DYNAMIC:
329 hAutogenStr += String.format("#define _PCD_MODE_%s_%s LibPcdGet%s(_PCD_TOKEN_%s)\r\n",
330 Token.GetAutogenDefinedatumTypeString(parentToken.datumType),
331 parentToken.cName,
332 Token.getAutogenLibrarydatumTypeString(parentToken.datumType),
333 parentToken.cName);
334 break;
335 case DYNAMIC_EX:
336 guidStringCName = "_gPcd_TokenSpaceGuid_" +
337 parentToken.tokenSpaceName.toString().replaceAll("-", "_");
338
339 hAutogenStr += String.format("#define _PCD_MODE_%s_%s LibPcdGetEx%s(&%s, _PCD_TOKEN_%s)\r\n",
340 Token.GetAutogenDefinedatumTypeString(parentToken.datumType),
341 parentToken.cName,
342 Token.getAutogenLibrarydatumTypeString(parentToken.datumType),
343 guidStringCName,
344 parentToken.cName);
345
346 break;
347 }
348 }
349
350 /**
351 Get the autogen string for header file.
352
353 @return The string of header file.
354 **/
355 public String getHAutogenStr() {
356 return hAutogenStr;
357 }
358
359 /**
360 Get the autogen string for C code file.
361
362 @return The string of C Code file.
363 **/
364 public String getCAutogenStr() {
365 return cAutogenStr;
366 }
367 }
368