]>
git.proxmox.com Git - mirror_edk2.git/blob - Tools/Source/GenBuild/org/tianocore/build/pcd/entity/UsageInstance.java
1a843968dfc44f62eeef3402f6ca581209605d30
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.
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
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.
18 package org
.tianocore
.build
.pcd
.entity
;
21 import java
.util
.UUID
;
23 import org
.tianocore
.build
.autogen
.CommonDefinition
;
24 import org
.tianocore
.build
.pcd
.action
.ActionMessage
;
25 import org
.tianocore
.build
.pcd
.exception
.EntityException
;
28 This class indicate an usage instance for a PCD token. This instance maybe a module
29 or platform setting. When a module produce or cosume a PCD token, then this module
30 is an usage instance for this PCD token.
32 public class UsageInstance
{
34 /// The module type of usage instance.
36 public enum MODULE_TYPE
{SEC
, PEI_CORE
, PEIM
, DXE_CORE
, DXE_DRIVERS
, OTHER_COMPONENTS
}
39 /// This parent that this usage instance belongs to.
41 public Token parentToken
;
44 /// The name of the module who contains this PCD.
46 public String moduleName
;
49 /// The GUID of the module who contains this PCD.
51 public UUID moduleGUID
;
54 /// The name of the package whose module contains this PCD.
56 public String packageName
;
59 /// The GUID of the package whose module contains this PCD.
61 public UUID packageGUID
;
64 /// The PCD type defined for module
66 public Token
.PCD_TYPE modulePcdType
;
69 /// The arch string of module contains this PCD
74 /// The version of module contains this PCD
76 public String version
;
79 /// The module type for this usage instance.
81 public MODULE_TYPE moduleType
;
84 /// The value of the PCD in this usage instance.
89 /// The maxDatumSize could be different for same PCD in different module
90 /// But this case is allow for FeatureFlag, FixedAtBuild, PatchableInModule
93 public int maxDatumSize
;
96 /// Autogen string for header file.
98 public String hAutogenStr
;
101 /// Auotgen string for C code file.
103 public String cAutogenStr
;
106 Constructure function
108 @param parentToken Member variable.
109 @param moduleName Member variable.
110 @param moduleGUID Member variable.
111 @param packageName Member variable.
112 @param packageGUID Member variable.
113 @param moduleType Member variable.
114 @param modulePcdType Member variable.
115 @param arch Member variable.
116 @param version Member variable.
117 @param value Member variable.
118 @param maxDatumSize Member variable.
120 public UsageInstance (Token parentToken
,
125 MODULE_TYPE moduleType
,
126 Token
.PCD_TYPE modulePcdType
,
131 this.parentToken
= parentToken
;
132 this.moduleName
= moduleName
;
133 this.moduleGUID
= moduleGUID
;
134 this.packageName
= packageName
;
135 this.packageGUID
= packageGUID
;
136 this.moduleType
= moduleType
;
137 this.modulePcdType
= modulePcdType
;
139 this.version
= version
;
141 this.maxDatumSize
= maxDatumSize
;
145 Get the primary key for usage instance array for every token.
147 @param moduleName the name of module
148 @param moduleGUID the GUID name of module
149 @param packageName the name of package who contains this module
150 @param packageGUID the GUID name of package
151 @param arch the archtecture string
152 @param version the version of this module
154 @return String primary key
156 public static String
getPrimaryKey(String moduleName
,
163 // Because currently transition schema not require write moduleGuid, package Name, Packge GUID in
164 // <ModuleSA> section, So currently no expect all paramter must be valid.
165 return(moduleName
+ "_" +
166 ((moduleGUID
!= null) ? moduleGUID
.toString() : "NullModuleGuid") + "_" +
167 ((packageName
!= null) ? packageName
: "NullPackageName") + "_" +
168 ((packageGUID
!= null) ? packageGUID
.toString() : "NullPackageGuid") + "_" +
169 ((arch
!= null) ? arch
: "NullArch") + "_" +
170 ((version
!= null) ? version
: "NullVersion"));
174 Get primary key string for this usage instance
176 @return String primary key string
178 public String
getPrimaryKey() {
179 return UsageInstance
.getPrimaryKey(moduleName
, moduleGUID
, packageName
, packageGUID
, arch
, version
);
183 Judget whether current module is PEI driver
187 public boolean isPeiPhaseComponent() {
188 if ((moduleType
== MODULE_TYPE
.PEI_CORE
) ||
189 (moduleType
== MODULE_TYPE
.PEIM
)) {
196 Generate autogen string for header file and C code file.
198 @throws EntityException Fail to generate.
200 @param isBuildUsedLibrary whether the autogen is for library.
202 public void generateAutoGen(boolean isBuildUsedLibrary
)
203 throws EntityException
{
204 String guidStringArray
[] = null;
205 String guidString
= null;
206 boolean isByteArray
= false;
207 String printDatum
= null;
212 if (this.modulePcdType
== Token
.PCD_TYPE
.DYNAMIC_EX
) {
213 hAutogenStr
+= String
.format("#define _PCD_LOCAL_TOKEN_%s 0x%016x\r\n",
214 parentToken
.cName
, parentToken
.tokenNumber
);
215 hAutogenStr
+= String
.format("#define _PCD_TOKEN_%s 0x%016x\r\n",
216 parentToken
.cName
, parentToken
.dynamicExTokenNumber
);
218 hAutogenStr
+= String
.format("#define _PCD_TOKEN_%s 0x%016x\r\n",
219 parentToken
.cName
, parentToken
.tokenNumber
);
222 if (!isBuildUsedLibrary
&& !parentToken
.isDynamicPCD
) {
223 if (datum
.trim().charAt(0) == '{') {
228 if (parentToken
.datumType
== Token
.DATUM_TYPE
.UINT64
) {
229 printDatum
= this.datum
+ "ULL";
231 printDatum
= this.datum
;
234 switch (modulePcdType
) {
236 if (isBuildUsedLibrary
) {
237 hAutogenStr
+= String
.format("extern const BOOLEAN _gPcd_FixedAtBuild_%s;\r\n",
239 hAutogenStr
+= String
.format("#define _PCD_MODE_%s_%s _gPcd_FixedAtBuild_%s\r\n",
240 parentToken
.GetAutogenDefinedatumTypeString(parentToken
.datumType
),
244 hAutogenStr
+= String
.format("#define _PCD_VALUE_%s %s\r\n",
247 hAutogenStr
+= String
.format("extern const BOOLEAN _gPcd_FixedAtBuild_%s;\r\n",
249 cAutogenStr
+= String
.format("GLOBAL_REMOVE_IF_UNREFERENCED const BOOLEAN _gPcd_FixedAtBuild_%s = _PCD_VALUE_%s;\r\n",
252 hAutogenStr
+= String
.format("#define _PCD_MODE_%s_%s _PCD_VALUE_%s\r\n",
253 Token
.GetAutogenDefinedatumTypeString(parentToken
.datumType
),
259 if (isBuildUsedLibrary
) {
260 hAutogenStr
+= String
.format("extern const %s _gPcd_FixedAtBuild_%s;\r\n",
261 Token
.getAutogendatumTypeString(parentToken
.datumType
),
263 hAutogenStr
+= String
.format("#define _PCD_MODE_%s_%s _gPcd_FixedAtBuild_%s\r\n",
264 Token
.GetAutogenDefinedatumTypeString(parentToken
.datumType
),
268 hAutogenStr
+= String
.format("#define _PCD_VALUE_%s %s\r\n",
272 cAutogenStr
+= String
.format("GLOBAL_REMOVE_IF_UNREFERENCED const UINT8 _gPcd_FixedAtBuild_%s[] = _PCD_VALUE_%s;\r\n",
275 hAutogenStr
+= String
.format("extern const UINT8 _gPcd_FixedAtBuild_%s[];\r\n",
277 hAutogenStr
+= String
.format("#define _PCD_MODE_%s_%s &_gPcd_FixedAtBuild_%s\r\n",
278 Token
.GetAutogenDefinedatumTypeString(parentToken
.datumType
),
282 cAutogenStr
+= String
.format("GLOBAL_REMOVE_IF_UNREFERENCED const %s _gPcd_FixedAtBuild_%s = _PCD_VALUE_%s;\r\n",
283 Token
.getAutogendatumTypeString(parentToken
.datumType
),
286 hAutogenStr
+= String
.format("extern const %s _gPcd_FixedAtBuild_%s;\r\n",
287 Token
.getAutogendatumTypeString(parentToken
.datumType
),
289 hAutogenStr
+= String
.format("#define _PCD_MODE_%s_%s _PCD_VALUE_%s\r\n",
290 Token
.GetAutogenDefinedatumTypeString(parentToken
.datumType
),
296 case PATCHABLE_IN_MODULE
:
297 if (isBuildUsedLibrary
) {
298 hAutogenStr
+= String
.format("extern %s _gPcd_BinaryPatch_%s;\r\n",
299 Token
.getAutogendatumTypeString(parentToken
.datumType
),
301 hAutogenStr
+= String
.format("#define _PCD_MODE_%s_%s _gPcd_BinaryPatch_%s\r\n",
302 Token
.GetAutogenDefinedatumTypeString(parentToken
.datumType
),
306 hAutogenStr
+= String
.format("#define _PCD_VALUE_%s %s\r\n",
310 cAutogenStr
+= String
.format("GLOBAL_REMOVE_IF_UNREFERENCED UINT8 _gPcd_BinaryPatch_%s[] = _PCD_VALUE_%s;\r\n",
313 hAutogenStr
+= String
.format("extern UINT8 _gPcd_BinaryPatch_%s[];\r\n",
315 hAutogenStr
+= String
.format("#define _PCD_MODE_%s_%s &_gPcd_BinaryPatch_%s\r\n",
316 Token
.GetAutogenDefinedatumTypeString(parentToken
.datumType
),
320 cAutogenStr
+= String
.format("GLOBAL_REMOVE_IF_UNREFERENCED %s _gPcd_BinaryPatch_%s = _PCD_VALUE_%s;\r\n",
321 Token
.getAutogendatumTypeString(parentToken
.datumType
),
324 hAutogenStr
+= String
.format("extern %s _gPcd_BinaryPatch_%s;\r\n",
325 Token
.getAutogendatumTypeString(parentToken
.datumType
),
327 hAutogenStr
+= String
.format("#define _PCD_MODE_%s_%s _gPcd_BinaryPatch_%s\r\n",
328 Token
.GetAutogenDefinedatumTypeString(parentToken
.datumType
),
336 hAutogenStr
+= String
.format("#define _PCD_MODE_%s_%s LibPcdGet%s(_PCD_TOKEN_%s)\r\n",
337 Token
.GetAutogenDefinedatumTypeString(parentToken
.datumType
),
339 Token
.getAutogenLibrarydatumTypeString(parentToken
.datumType
),
343 guidStringArray
= parentToken
.tokenSpaceName
.toString().split("-");
344 guidString
= String
.format("{ 0x%s, 0x%s, 0x%s, {0x%s, 0x%s, 0x%s, 0x%s, 0x%s, 0x%s, 0x%s, 0x%s}}",
348 (guidStringArray
[3].substring(0, 2)),
349 (guidStringArray
[3].substring(2, 4)),
350 (guidStringArray
[4].substring(0, 2)),
351 (guidStringArray
[4].substring(2, 4)),
352 (guidStringArray
[4].substring(4, 6)),
353 (guidStringArray
[4].substring(6, 8)),
354 (guidStringArray
[4].substring(8, 10)),
355 (guidStringArray
[4].substring(10, 12)));
357 hAutogenStr
+= String
.format("extern EFI_GUID _gPcd_DynamicEx_TokenSpaceGuid_%s;\r\n",
359 hAutogenStr
+= String
.format("#define _PCD_MODE_%s_%s LibPcdGet%s(_PCD_LOCAL_TOKEN_%s)\r\n",
360 Token
.GetAutogenDefinedatumTypeString(parentToken
.datumType
),
362 Token
.getAutogenLibrarydatumTypeString(parentToken
.datumType
),
366 if (!isBuildUsedLibrary
) {
367 cAutogenStr
+= String
.format("GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID _gPcd_DynamicEx_TokenSpaceGuid_%s = %s;\r\n",
376 Get the autogen string for header file.
378 @return The string of header file.
380 public String
getHAutogenStr() {
385 Get the autogen string for C code file.
387 @return The string of C Code file.
389 public String
getCAutogenStr() {