are licensed and made available under the terms and conditions of the BSD License\r
which accompanies this distribution. The full text of the license may be found at\r
http://opensource.org/licenses/bsd-license.php\r
- \r
+\r
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
\r
**/\r
package org.tianocore.build.pcd.action;\r
\r
-import java.io.BufferedReader; \r
+import java.io.BufferedReader;\r
import java.io.File;\r
import java.io.FileReader;\r
-import java.io.IOException;\r
-import java.math.BigInteger;\r
import java.util.ArrayList;\r
import java.util.Comparator;\r
import java.util.HashMap;\r
-import java.util.Iterator;\r
import java.util.List;\r
import java.util.Map;\r
-import java.util.Set;\r
import java.util.UUID;\r
-import java.util.regex.Matcher;\r
-import java.util.regex.Pattern;\r
-\r
-import org.apache.xmlbeans.XmlException;\r
-import org.apache.xmlbeans.XmlObject;\r
-import org.tianocore.DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions;\r
-import org.tianocore.FrameworkModulesDocument;\r
-import org.tianocore.ModuleSADocument;\r
-import org.tianocore.PcdBuildDefinitionDocument;\r
-import org.tianocore.PcdBuildDefinitionDocument.PcdBuildDefinition;\r
-import org.tianocore.PlatformSurfaceAreaDocument;\r
-import org.tianocore.build.fpd.FpdParserTask;\r
import org.tianocore.build.global.GlobalData;\r
-import org.tianocore.build.id.FpdModuleIdentification;\r
-import org.tianocore.build.id.ModuleIdentification;\r
-import org.tianocore.pcd.action.ActionMessage;\r
-import org.tianocore.pcd.entity.CommonDefinition;\r
import org.tianocore.pcd.entity.DynamicTokenValue;\r
-import org.tianocore.pcd.entity.MemoryDatabaseManager;\r
-import org.tianocore.pcd.entity.SkuInstance;\r
import org.tianocore.pcd.entity.Token;\r
-import org.tianocore.pcd.entity.UsageIdentification;\r
-import org.tianocore.pcd.entity.UsageInstance;\r
import org.tianocore.pcd.exception.EntityException;\r
\r
/**\r
- CStructTypeDeclaration \r
- \r
+ CStructTypeDeclaration\r
+\r
This class is used to store the declaration string, such as\r
- "UINT32 PcdPlatformFlashBaseAddress", of \r
+ "UINT32 PcdPlatformFlashBaseAddress", of\r
each memember in the C structure, which is a standard C language\r
feature used to implement a simple and efficient database for\r
dynamic(ex) type PCD entry.\r
int alignmentSize;\r
String cCode;\r
boolean initTable;\r
- \r
+\r
public CStructTypeDeclaration (String key, int alignmentSize, String cCode, boolean initTable) {\r
this.key = key;\r
this.alignmentSize = alignmentSize;\r
}\r
\r
/**\r
- StringTable \r
- \r
+ StringTable\r
+\r
This class is used to store the String in a PCD database.\r
- \r
+\r
**/\r
class StringTable {\r
- private ArrayList<String> al; \r
+ private ArrayList<String> al;\r
private ArrayList<String> alComments;\r
private String phase;\r
- int len; \r
+ int len;\r
\r
public StringTable (String phase) {\r
this.phase = phase;\r
public String getExistanceMacro () {\r
return String.format(PcdDatabase.StringTableExistenceMacro, phase, (al.size() == 0)? "TRUE":"FALSE");\r
}\r
- \r
+\r
public void genCode (ArrayList<CStructTypeDeclaration> declaList, HashMap<String, String> instTable) {\r
final String stringTable = "StringTable";\r
final String tab = "\t";\r
final String newLine = "\r\n";\r
final String commaNewLine = ",\r\n";\r
- \r
+\r
CStructTypeDeclaration decl;\r
\r
String cDeclCode = "";\r
// If we have a empty StringTable\r
//\r
if (al.size() == 0) {\r
- cDeclCode += String.format("%-20s%s[1]; /* StringTable is empty */", "UINT16", stringTable) + newLine; \r
+ cDeclCode += String.format("%-20s%s[1]; /* StringTable is empty */", "UINT16", stringTable) + newLine;\r
decl = new CStructTypeDeclaration (\r
stringTable,\r
2,\r
cDeclCode,\r
true\r
- ); \r
+ );\r
declaList.add(decl);\r
\r
cInstCode = String.format("/* %s */", stringTable) + newLine + tab + "{ 0 }";\r
for (int i = 0; i < al.size(); i++) {\r
String str = al.get(i);\r
String stringTableName;\r
- \r
+\r
if (i == 0) {\r
//\r
// StringTable is a well-known name in the PCD DXE driver\r
//\r
stringTableName = stringTable;\r
- \r
+\r
} else {\r
stringTableName = String.format("%s_%d", stringTable, i);\r
cDeclCode += tab;\r
}\r
- cDeclCode += String.format("%-20s%s[%d]; /* %s */", "UINT16", \r
- stringTableName, str.length() + 1, \r
- alComments.get(i)) \r
+ cDeclCode += String.format("%-20s%s[%d]; /* %s */", "UINT16",\r
+ stringTableName, str.length() + 1,\r
+ alComments.get(i))\r
+ newLine;\r
- \r
+\r
if (i == 0) {\r
cInstCode = "/* StringTable */" + newLine;\r
}\r
- \r
+\r
cInstCode += tab + String.format("L\"%s\" /* %s */", al.get(i), alComments.get(i));\r
if (i != al.size() - 1) {\r
cInstCode += commaNewLine;\r
}\r
}\r
- \r
+\r
decl = new CStructTypeDeclaration (\r
stringTable,\r
2,\r
cDeclCode,\r
true\r
- ); \r
+ );\r
declaList.add(decl);\r
- \r
+\r
instTable.put(stringTable, cInstCode);\r
}\r
}\r
int pos;\r
\r
String str = inputStr;\r
- \r
+\r
//\r
// The input can be two types:\r
- // "L\"Bootmode\"" or "Bootmode". \r
- // We drop the L\" and \" for the first type. \r
+ // "L\"Bootmode\"" or "Bootmode".\r
+ // We drop the L\" and \" for the first type.\r
if (str.startsWith("L\"") && str.endsWith("\"")) {\r
str = str.substring(2, str.length() - 1);\r
}\r
}\r
pos = s.length() + 1;\r
}\r
- \r
+\r
i = len;\r
//\r
// Include the NULL character at the end of String\r
//\r
- len += str.length() + 1; \r
+ len += str.length() + 1;\r
al.add(str);\r
alComments.add(token.getPrimaryKeyString());\r
\r
}\r
\r
/**\r
- SizeTable \r
- \r
+ SizeTable\r
+\r
This class is used to store the Size information for\r
POINTER TYPE PCD entry in a PCD database.\r
\r
private ArrayList<String> alComments;\r
private int len;\r
private String phase;\r
- \r
+\r
public SizeTable (String phase) {\r
al = new ArrayList<ArrayList<Integer>>();\r
alComments = new ArrayList<String>();\r
public String getSizeMacro () {\r
return String.format(PcdDatabase.SizeTableSizeMacro, phase, getSize());\r
}\r
- \r
+\r
private int getSize() {\r
return len == 0 ? 1 : len;\r
}\r
\r
public void genCode (ArrayList<CStructTypeDeclaration> declaList, HashMap<String, String> instTable, String phase) {\r
final String name = "SizeTable";\r
- \r
+\r
CStructTypeDeclaration decl;\r
String cCode;\r
\r
- cCode = String.format(PcdDatabase.SizeTableDeclaration, phase); \r
+ cCode = String.format(PcdDatabase.SizeTableDeclaration, phase);\r
decl = new CStructTypeDeclaration (\r
name,\r
2,\r
cCode,\r
true\r
- ); \r
+ );\r
declaList.add(decl);\r
\r
\r
} else {\r
for (int index = 0; index < al.size(); index++) {\r
ArrayList<Integer> ial = al.get(index);\r
- \r
+\r
String str = "\t";\r
- \r
+\r
for (int index2 = 0; index2 < ial.size(); index2++) {\r
str += " " + ial.get(index2).toString();\r
if (index2 != ial.size() - 1) {\r
}\r
}\r
\r
- str += " /* " + alComments.get(index) + " */"; \r
- \r
+ str += " /* " + alComments.get(index) + " */";\r
+\r
if (index != (al.size() - 1)) {\r
str += comma;\r
}\r
\r
Output.add(str);\r
- \r
+\r
}\r
}\r
Output.add("}");\r
if (token.datumType != Token.DATUM_TYPE.POINTER) {\r
return;\r
}\r
- \r
+\r
ArrayList<Integer> ial = token.getPointerTypeSize();\r
- \r
- len+= ial.size(); \r
+\r
+ len+= ial.size();\r
\r
al.add(ial);\r
alComments.add(token.getPrimaryKeyString());\r
\r
return;\r
}\r
- \r
+\r
}\r
\r
/**\r
- GuidTable \r
- \r
+ GuidTable\r
+\r
This class is used to store the GUIDs in a PCD database.\r
**/\r
class GuidTable {\r
\r
public void genCode (ArrayList<CStructTypeDeclaration> declaList, HashMap<String, String> instTable, String phase) {\r
final String name = "GuidTable";\r
- \r
+\r
CStructTypeDeclaration decl;\r
String cCode = "";\r
\r
- cCode += String.format(PcdDatabase.GuidTableDeclaration, phase); \r
+ cCode += String.format(PcdDatabase.GuidTableDeclaration, phase);\r
decl = new CStructTypeDeclaration (\r
name,\r
4,\r
cCode,\r
true\r
- ); \r
+ );\r
declaList.add(decl);\r
\r
\r
if (al.size() == 0) {\r
Output.add("\t" + getUuidCString(new UUID(0, 0)));\r
}\r
- \r
+\r
for (int i = 0; i < al.size(); i++) {\r
String str = "\t" + getUuidCString(al.get(i));\r
\r
return i;\r
}\r
}\r
- \r
- len++; \r
+\r
+ len++;\r
al.add(uuid);\r
alComments.add(name);\r
\r
}\r
\r
/**\r
- SkuIdTable \r
- \r
+ SkuIdTable\r
+\r
This class is used to store the SKU IDs in a PCD database.\r
\r
**/\r
\r
public void genCode (ArrayList<CStructTypeDeclaration> declaList, HashMap<String, String> instTable, String phase) {\r
final String name = "SkuIdTable";\r
- \r
+\r
CStructTypeDeclaration decl;\r
String cCode = "";\r
\r
- cCode += String.format(PcdDatabase.SkuIdTableDeclaration, phase); \r
+ cCode += String.format(PcdDatabase.SkuIdTableDeclaration, phase);\r
decl = new CStructTypeDeclaration (\r
name,\r
1,\r
cCode,\r
true\r
- ); \r
+ );\r
declaList.add(decl);\r
\r
\r
true\r
);\r
declaList.add(decl);\r
- \r
+\r
instTable.put("SystemSkuId", "0");\r
}\r
\r
if (al.size() == 0) {\r
Output.add("\t0");\r
}\r
- \r
+\r
for (int index = 0; index < al.size(); index++) {\r
String str;\r
\r
\r
int index;\r
int pos;\r
- \r
+\r
//\r
// Check if this SKU_ID Array is already in the table\r
//\r
\r
index = len;\r
\r
- len += skuIds.length; \r
+ len += skuIds.length;\r
al.add(skuIds);\r
alComment.add(token.getPrimaryKeyString());\r
\r
\r
public void genCode (ArrayList<CStructTypeDeclaration> declaList, HashMap<String, String> instTable, String phase) {\r
final String name = "LocalTokenNumberTable";\r
- \r
+\r
CStructTypeDeclaration decl;\r
String cCode = "";\r
\r
- cCode += String.format(PcdDatabase.LocalTokenNumberTableDeclaration, phase); \r
+ cCode += String.format(PcdDatabase.LocalTokenNumberTableDeclaration, phase);\r
decl = new CStructTypeDeclaration (\r
name,\r
4,\r
cCode,\r
true\r
- ); \r
+ );\r
declaList.add(decl);\r
\r
cCode = PcdDatabase.genInstantiationStr(getInstantiation());\r
if (al.size() == 0) {\r
output.add("\t0");\r
}\r
- \r
+\r
for (int index = 0; index < al.size(); index++) {\r
String str;\r
\r
int index = len;\r
String str;\r
\r
- len++; \r
+ len++;\r
\r
str = String.format(PcdDatabase.offsetOfStrTemplate, phase, token.hasDefaultValue() ? "Init" : "Uninit", token.getPrimaryKeyString());\r
\r
if (token.getDefaultSku().type == DynamicTokenValue.VALUE_TYPE.VPD_TYPE) {\r
str += " | PCD_TYPE_VPD";\r
}\r
- \r
+\r
switch (token.datumType) {\r
case UINT8:\r
case BOOLEAN:\r
str += " | PCD_DATUM_TYPE_POINTER";\r
break;\r
}\r
- \r
+\r
al.add(str);\r
alComment.add(token.getPrimaryKeyString());\r
\r
}\r
\r
/**\r
- ExMapTable \r
- \r
+ ExMapTable\r
+\r
This class is used to store the table of mapping information\r
between DynamicEX ID pair(Guid, TokenNumber) and\r
the local token number assigned by PcdDatabase class.\r
class ExMapTable {\r
\r
/**\r
- ExTriplet \r
- \r
+ ExTriplet\r
+\r
This class is used to store the mapping information\r
between DynamicEX ID pair(Guid, TokenNumber) and\r
the local token number assigned by PcdDatabase class.\r
public Integer guidTableIdx;\r
public Long exTokenNumber;\r
public Long localTokenIdx;\r
- \r
+\r
public ExTriplet (int guidTableIdx, long exTokenNumber, long localTokenIdx) {\r
this.guidTableIdx = new Integer(guidTableIdx);\r
this.exTokenNumber = new Long(exTokenNumber);\r
private String phase;\r
private int len;\r
private int bodyLineNum;\r
- \r
+\r
public ExMapTable (String phase) {\r
this.phase = phase;\r
al = new ArrayList<ExTriplet>();\r
\r
public void genCode (ArrayList<CStructTypeDeclaration> declaList, HashMap<String, String> instTable, String phase) {\r
final String exMapTableName = "ExMapTable";\r
- \r
+\r
sortTable();\r
- \r
+\r
CStructTypeDeclaration decl;\r
String cCode = "";\r
\r
- cCode += String.format(PcdDatabase.ExMapTableDeclaration, phase); \r
+ cCode += String.format(PcdDatabase.ExMapTableDeclaration, phase);\r
decl = new CStructTypeDeclaration (\r
exMapTableName,\r
4,\r
cCode,\r
true\r
- ); \r
+ );\r
declaList.add(decl);\r
\r
\r
cCode = PcdDatabase.genInstantiationStr(getInstantiation());\r
instTable.put(exMapTableName, cCode);\r
}\r
- \r
+\r
private ArrayList<String> getInstantiation () {\r
ArrayList<String> Output = new ArrayList<String>();\r
\r
if (al.size() == 0) {\r
Output.add("\t{0, 0, 0}");\r
}\r
- \r
+\r
int index;\r
for (index = 0; index < al.size(); index++) {\r
String str;\r
int index = len;\r
\r
len++;\r
- ExTriplet et = new ExTriplet(guidTableIdx, exTokenNum, localTokenIdx); \r
+ ExTriplet et = new ExTriplet(guidTableIdx, exTokenNum, localTokenIdx);\r
\r
al.add(et);\r
alComment.put(et, name);\r
// following order:\r
// 1) ExGuid\r
// 2) ExTokenNumber\r
- // \r
+ //\r
class ExTripletComp implements Comparator<ExTriplet> {\r
public int compare (ExTriplet a, ExTriplet b) {\r
if (a.guidTableIdx == b.guidTableIdx ) {\r
return -1;\r
}\r
}\r
- \r
+\r
return a.guidTableIdx - b.guidTableIdx;\r
}\r
}\r
}\r
\r
/**\r
- PcdDatabase \r
- \r
+ PcdDatabase\r
+\r
This class is used to generate C code for Autogen.h and Autogen.c of\r
a PCD service DXE driver and PCD service PEIM.\r
**/\r
\r
public final static String ExMapTableSizeMacro = "#define %s_EXMAPPING_TABLE_SIZE %d\r\n";\r
public final static String ExTokenNumber = "#define %s_EX_TOKEN_NUMBER %d\r\n";\r
- public final static String GuidTableSizeMacro = "#define %s_GUID_TABLE_SIZE %d\r\n"; \r
+ public final static String GuidTableSizeMacro = "#define %s_GUID_TABLE_SIZE %d\r\n";\r
public final static String LocalTokenNumberTableSizeMacro = "#define %s_LOCAL_TOKEN_NUMBER_TABLE_SIZE %d\r\n";\r
public final static String LocalTokenNumberSizeMacro = "#define %s_LOCAL_TOKEN_NUMBER %d\r\n";\r
public final static String SizeTableSizeMacro = "#define %s_SIZE_TABLE_SIZE %d\r\n";\r
public final static String SkuIdTableSizeMacro = "#define %s_SKUID_TABLE_SIZE %d\r\n";\r
\r
\r
- public final static String ExMapTableExistenceMacro = "#define %s_EXMAP_TABLE_EMPTY %s\r\n"; \r
+ public final static String ExMapTableExistenceMacro = "#define %s_EXMAP_TABLE_EMPTY %s\r\n";\r
public final static String GuidTableExistenceMacro = "#define %s_GUID_TABLE_EMPTY %s\r\n";\r
public final static String DatabaseExistenceMacro = "#define %s_DATABASE_EMPTY %s\r\n";\r
public final static String StringTableExistenceMacro = "#define %s_STRING_TABLE_EMPTY %s\r\n";\r
public final static String offsetOfSkuHeadStrTemplate = "offsetof(%s_PCD_DATABASE, %s.%s_SkuDataTable)";\r
public final static String offsetOfVariableEnabledDefault = "offsetof(%s_PCD_DATABASE, %s.%s_VariableDefault_%d)";\r
public final static String offsetOfStrTemplate = "offsetof(%s_PCD_DATABASE, %s.%s)";\r
- \r
+\r
private final static String skuDataTableTemplate = "SkuDataTable";\r
\r
\r
private ArrayList<Token> alTokens;\r
private String phase;\r
private int assignedTokenNumber;\r
- \r
+\r
//\r
// Use two class global variable to store\r
- // temperary \r
+ // temperary\r
//\r
private String privateGlobalName;\r
private String privateGlobalCCode;\r
private String cString;\r
\r
/**\r
- Constructor for PcdDatabase class. \r
- \r
+ Constructor for PcdDatabase class.\r
+\r
<p>We have two PCD dynamic(ex) database for the Framework implementation. One\r
for PEI phase and the other for DXE phase. </p>\r
- \r
+\r
@param alTokens A ArrayList of Dynamic(EX) PCD entry.\r
@param exePhase The phase to generate PCD database for: valid input\r
is "PEI" or "DXE".\r
localTokenNumberTable = new LocalTokenNumberTable(phase);\r
skuIdTable = new SkuIdTable(phase);\r
sizeTable = new SizeTable(phase);\r
- exMapTable = new ExMapTable(phase); \r
+ exMapTable = new ExMapTable(phase);\r
\r
//\r
// Local token number 0 is reserved for INVALID_TOKEN_NUMBER.\r
- // So we will increment 1 for the startLen passed from the \r
+ // So we will increment 1 for the startLen passed from the\r
// constructor.\r
//\r
assignedTokenNumber = startLen + 1;\r
return 1;\r
}\r
}\r
- \r
+\r
private int getHiiPtrTypeAlignmentSize(Token token) {\r
switch (token.datumType) {\r
case UINT8:\r
return 1;\r
}\r
}\r
- \r
+\r
private int getAlignmentSize (Token token) {\r
if (token.getDefaultSku().type == DynamicTokenValue.VALUE_TYPE.HII_TYPE) {\r
return 2;\r
if (token.isUnicodeStringType()) {\r
return 2;\r
}\r
- \r
+\r
return getDataTypeAlignmentSize(token);\r
}\r
\r
public String getHString () {\r
return hString;\r
}\r
- \r
+\r
private void genCodeWorker(Token t,\r
ArrayList<CStructTypeDeclaration> declaList,\r
HashMap<String, String> instTable, String phase)\r
declaList.add(decl);\r
\r
if (t.hasDefaultValue()) {\r
- instTable.put(privateGlobalName, \r
+ instTable.put(privateGlobalName,\r
getTypeInstantiation(t, declaList, instTable, phase)\r
);\r
}\r
\r
}\r
\r
- private void ProcessTokens (List<Token> tokens, \r
+ private void ProcessTokens (List<Token> tokens,\r
ArrayList<CStructTypeDeclaration> cStructDeclList,\r
HashMap<String, String> cStructInstTable,\r
String phase\r
- ) \r
+ )\r
throws EntityException {\r
- \r
+\r
for (int idx = 0; idx < tokens.size(); idx++) {\r
Token t = tokens.get(idx);\r
- \r
+\r
genCodeWorker (t, cStructDeclList, cStructInstTable, phase);\r
- \r
+\r
sizeTable.add(t);\r
localTokenNumberTable.add(t);\r
t.tokenNumber = assignedTokenNumber++;\r
- \r
+\r
//\r
// Add a mapping if this dynamic PCD entry is a EX type\r
//\r
if (t.isDynamicEx()) {\r
- exMapTable.add((int)t.tokenNumber, \r
- t.dynamicExTokenNumber, \r
- guidTable.add(translateSchemaStringToUUID(t.tokenSpaceName), t.getPrimaryKeyString()), \r
+ exMapTable.add((int)t.tokenNumber,\r
+ t.dynamicExTokenNumber,\r
+ guidTable.add(translateSchemaStringToUUID(t.tokenSpaceName), t.getPrimaryKeyString()),\r
t.getPrimaryKeyString()\r
);\r
}\r
}\r
\r
}\r
- \r
+\r
public void genCode () throws EntityException {\r
- \r
+\r
ArrayList<CStructTypeDeclaration> cStructDeclList = new ArrayList<CStructTypeDeclaration>();\r
HashMap<String, String> cStructInstTable = new HashMap<String, String>();\r
- \r
+\r
List<Token> nexTokens = new ArrayList<Token> ();\r
List<Token> exTokens = new ArrayList<Token> ();\r
\r
\r
//\r
// We have to process Non-Ex type PCD entry first. The reason is\r
- // that our optimization assumes that the Token Number of Non-Ex \r
+ // that our optimization assumes that the Token Number of Non-Ex\r
// PCD entry start from 1 (for PEI phase) and grows continously upwards.\r
- // \r
+ //\r
// EX type token number starts from the last Non-EX PCD entry and\r
// grows continously upwards.\r
//\r
ProcessTokens (nexTokens, cStructDeclList, cStructInstTable, phase);\r
ProcessTokens (exTokens, cStructDeclList, cStructInstTable, phase);\r
- \r
+\r
stringTable.genCode(cStructDeclList, cStructInstTable);\r
skuIdTable.genCode(cStructDeclList, cStructInstTable, phase);\r
exMapTable.genCode(cStructDeclList, cStructInstTable, phase);\r
localTokenNumberTable.genCode(cStructDeclList, cStructInstTable, phase);\r
sizeTable.genCode(cStructDeclList, cStructInstTable, phase);\r
guidTable.genCode(cStructDeclList, cStructInstTable, phase);\r
- \r
+\r
hString = genCMacroCode ();\r
- \r
+\r
HashMap <String, String> result;\r
- \r
- result = genCStructCode(cStructDeclList, \r
- cStructInstTable, \r
+\r
+ result = genCStructCode(cStructDeclList,\r
+ cStructInstTable,\r
phase\r
);\r
- \r
+\r
hString += result.get("initDeclStr");\r
hString += result.get("uninitDeclStr");\r
- \r
+\r
hString += String.format("#define PCD_%s_SERVICE_DRIVER_VERSION %d", phase, version);\r
- \r
+\r
cString = newLine + newLine + result.get("initInstStr");\r
- \r
+\r
}\r
- \r
+\r
private String genCMacroCode () {\r
String macroStr = "";\r
\r
macroStr += exMapTable.getExistanceMacro();\r
\r
macroStr += newLine;\r
- \r
+\r
return macroStr;\r
}\r
- \r
+\r
private HashMap <String, String> genCStructCode(\r
- ArrayList<CStructTypeDeclaration> declaList, \r
- HashMap<String, String> instTable, \r
+ ArrayList<CStructTypeDeclaration> declaList,\r
+ HashMap<String, String> instTable,\r
String phase\r
) {\r
- \r
+\r
int i;\r
HashMap <String, String> result = new HashMap<String, String>();\r
HashMap <Integer, ArrayList<String>> alignmentInitDecl = new HashMap<Integer, ArrayList<String>>();\r
HashMap <Integer, ArrayList<String>> alignmentUninitDecl = new HashMap<Integer, ArrayList<String>>();\r
HashMap <Integer, ArrayList<String>> alignmentInitInst = new HashMap<Integer, ArrayList<String>>();\r
- \r
+\r
//\r
// Initialize the storage for each alignment\r
//\r
alignmentInitInst.put(new Integer(i), new ArrayList<String>());\r
alignmentUninitDecl.put(new Integer(i), new ArrayList<String>());\r
}\r
- \r
+\r
String initDeclStr = "typedef struct {" + newLine;\r
String initInstStr = String.format("%s_PCD_DATABASE_INIT g%sPcdDbInit = { ", phase.toUpperCase(), phase.toUpperCase()) + newLine;\r
String uninitDeclStr = "typedef struct {" + newLine;\r
\r
//\r
- // Sort all C declaration and instantiation base on Alignment Size \r
+ // Sort all C declaration and instantiation base on Alignment Size\r
//\r
for (Object d : declaList) {\r
CStructTypeDeclaration decl = (CStructTypeDeclaration) d;\r
- \r
+\r
if (decl.initTable) {\r
alignmentInitDecl.get(new Integer(decl.alignmentSize)).add(decl.cCode);\r
alignmentInitInst.get(new Integer(decl.alignmentSize)).add(instTable.get(decl.key));\r
for (i = 0; i < declaListBasedOnAlignment.size(); i++) {\r
initDeclStr += tab + declaListBasedOnAlignment.get(i);\r
initInstStr += tab + instListBasedOnAlignment.get(i);\r
- \r
+\r
//\r
// We made a assumption that both PEI_PCD_DATABASE and DXE_PCD_DATABASE\r
// has a least one data memember with alignment size of 1. So we can\r
initInstStr += commaNewLine;\r
}\r
}\r
- \r
+\r
declaListBasedOnAlignment = alignmentUninitDecl.get(new Integer(align));\r
- \r
+\r
if (declaListBasedOnAlignment.size() != 0) {\r
uinitDatabaseEmpty = false;\r
}\r
- \r
+\r
for (Object d : declaListBasedOnAlignment) {\r
String s = (String)d;\r
uninitDeclStr += tab + s;\r
}\r
}\r
- \r
+\r
if (uinitDatabaseEmpty) {\r
uninitDeclStr += tab + String.format("%-20sdummy; /* PCD_DATABASE_UNINIT is emptry */\r\n", "UINT8");\r
}\r
- \r
+\r
initDeclStr += String.format("} %s_PCD_DATABASE_INIT;", phase) + newLine + newLine;\r
initInstStr += "};" + newLine;\r
uninitDeclStr += String.format("} %s_PCD_DATABASE_UNINIT;", phase) + newLine + newLine;\r
- \r
+\r
result.put("initDeclStr", initDeclStr);\r
result.put("initInstStr", initInstStr);\r
result.put("uninitDeclStr", uninitDeclStr);\r
return String.format("%s /* %s */", token.skuData.get(skuId).value.hiiDefaultValue, cName);\r
}\r
\r
- private String getCType (Token t) \r
+ private String getCType (Token t)\r
throws EntityException {\r
- \r
+\r
if (t.isHiiEnable()) {\r
return "VARIABLE_HEAD";\r
}\r
- \r
+\r
if (t.isVpdEnable()) {\r
return "VPD_HEAD";\r
}\r
- \r
+\r
if (t.isUnicodeStringType()) {\r
return "STRING_HEAD";\r
}\r
- \r
+\r
switch (t.datumType) {\r
case UINT64:\r
return "UINT64";\r
throw new EntityException("Unknown type in getDataTypeCDeclaration");\r
}\r
}\r
- \r
+\r
//\r
// privateGlobalName and privateGlobalCCode is used to pass output to caller of getCDeclarationString\r
//\r
- private void getCDeclarationString(Token t) \r
+ private void getCDeclarationString(Token t)\r
throws EntityException {\r
- \r
+\r
if (t.isSkuEnable()) {\r
privateGlobalName = String.format("%s_%s", t.getPrimaryKeyString(), skuDataTableTemplate);\r
} else {\r
privateGlobalCCode = String.format("%-20s%s[%d];\r\n", type, privateGlobalName, t.getSkuIdCount());\r
}\r
}\r
- \r
- private String getDataTypeDeclarationForVariableDefault (Token token, String cName, int skuId) \r
+\r
+ private String getDataTypeDeclarationForVariableDefault (Token token, String cName, int skuId)\r
throws EntityException {\r
\r
String typeStr;\r
\r
return String.format("%-20s%s;\r\n", typeStr, cName);\r
}\r
- \r
+\r
private String getTypeInstantiation (Token t, ArrayList<CStructTypeDeclaration> declaList, HashMap<String, String> instTable, String phase) throws EntityException {\r
- \r
+\r
int i;\r
\r
String s;\r
UINT16 DefaultValueOffset; // Offset of the Default Value\r
} VARIABLE_HEAD ;\r
*/\r
- String variableDefaultName = String.format("%s_VariableDefault_%d", t.getPrimaryKeyString(), i); \r
- \r
+ String variableDefaultName = String.format("%s_VariableDefault_%d", t.getPrimaryKeyString(), i);\r
+\r
s += tab + tab + String.format("{ %d, %d, %s, %s }", guidTable.add(t.skuData.get(i).value.variableGuid, t.getPrimaryKeyString()),\r
stringTable.add(t.skuData.get(i).value.getStringOfVariableName(), t),\r
t.skuData.get(i).value.variableOffset,\r
getHiiPtrTypeAlignmentSize(t),\r
getDataTypeDeclarationForVariableDefault(t, variableDefaultName, i),\r
true\r
- ); \r
+ );\r
declaList.add(decl);\r
instTable.put(variableDefaultName, getDataTypeInstantiationForVariableDefault (t, variableDefaultName, i));\r
} else if (t.isVpdEnable()) {\r
s += tab + tab + String.format("{ %s }", t.skuData.get(i).value.value);\r
}\r
}\r
- \r
+\r
if (i != t.skuData.size() - 1) {\r
s += commaNewLine;\r
} else {\r
}\r
\r
}\r
- \r
+\r
s += tab + "}";\r
- \r
+\r
return s;\r
}\r
- \r
- public static String getPcdDatabaseCommonDefinitions () \r
+\r
+ public static String getPcdDatabaseCommonDefinitions ()\r
throws EntityException {\r
\r
String retStr = "";\r
try {\r
- File file = new File(GlobalData.getWorkspacePath() + File.separator + \r
- "Tools" + File.separator + \r
+ File file = new File(GlobalData.getWorkspacePath() + File.separator +\r
+ "Tools" + File.separator +\r
"Conf" + File.separator +\r
"Pcd" + File.separator +\r
"PcdDatabaseCommonDefinitions.sample");\r
return retStr;\r
}\r
\r
- public static String getPcdDxeDatabaseDefinitions () \r
+ public static String getPcdDxeDatabaseDefinitions ()\r
throws EntityException {\r
\r
String retStr = "";\r
try {\r
- File file = new File(GlobalData.getWorkspacePath() + File.separator + \r
- "Tools" + File.separator + \r
+ File file = new File(GlobalData.getWorkspacePath() + File.separator +\r
+ "Tools" + File.separator +\r
"Conf" + File.separator +\r
"Pcd" + File.separator +\r
"PcdDatabaseDxeDefinitions.sample");\r
return retStr;\r
}\r
\r
- public static String getPcdPeiDatabaseDefinitions () \r
+ public static String getPcdPeiDatabaseDefinitions ()\r
throws EntityException {\r
\r
String retStr = "";\r
try {\r
- File file = new File(GlobalData.getWorkspacePath() + File.separator + \r
- "Tools" + File.separator + \r
+ File file = new File(GlobalData.getWorkspacePath() + File.separator +\r
+ "Tools" + File.separator +\r
"Conf" + File.separator +\r
"Pcd" + File.separator +\r
"PcdDatabasePeiDefinitions.sample");\r
\r
/**\r
Translate the schema string to UUID instance.\r
- \r
+\r
In schema, the string of UUID is defined as following two types string:\r
1) GuidArrayType: pattern = 0x[a-fA-F0-9]{1,8},( )*0x[a-fA-F0-9]{1,4},(\r
)*0x[a-fA-F0-9]{1,4}(,( )*\{)?(,?( )*0x[a-fA-F0-9]{1,2}){8}( )*(\})?\r
- \r
+\r
2) GuidNamingConvention: pattern =\r
[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\r
- \r
+\r
This function will convert string and create uuid instance.\r
- \r
+\r
@param uuidString UUID string in XML file\r
- \r
+\r
@return UUID UUID instance\r
**/\r
- private UUID translateSchemaStringToUUID(String uuidString) \r
+ private UUID translateSchemaStringToUUID(String uuidString)\r
throws EntityException {\r
String temp;\r
String[] splitStringArray;\r
uuidString = uuidString.replaceAll("\\}", "");\r
\r
//\r
- // If the UUID schema string is GuidArrayType type then need translate \r
+ // If the UUID schema string is GuidArrayType type then need translate\r
// to GuidNamingConvention type at first.\r
- // \r
+ //\r
if ((uuidString.charAt(0) == '0') && ((uuidString.charAt(1) == 'x') || (uuidString.charAt(1) == 'X'))) {\r
splitStringArray = uuidString.split("," );\r
if (splitStringArray.length != 11) {\r
\r
//\r
// Remove blank space from these string and remove header string "0x"\r
- // \r
+ //\r
for (index = 0; index < 11; index ++) {\r
splitStringArray[index] = splitStringArray[index].trim();\r
splitStringArray[index] = splitStringArray[index].substring(2, splitStringArray[index].length());\r
\r
//\r
// Add heading '0' to normalize the string length\r
- // \r
+ //\r
for (index = 3; index < 11; index ++) {\r
chLen = splitStringArray[index].length();\r
for (chIndex = 0; chIndex < 2 - chLen; chIndex ++) {\r
\r
//\r
// construct the final GuidNamingConvention string\r
- // \r
+ //\r
temp = String.format("%s-%s-%s-%s%s-%s%s%s%s%s%s",\r
splitStringArray[0],\r
splitStringArray[1],\r