\r
**/\r
class SizeTable {\r
- private ArrayList<Integer> al;\r
+ private ArrayList<ArrayList<Integer>> al;\r
private ArrayList<String> alComments;\r
- private String phase;\r
private int len;\r
+ private String phase;\r
\r
public SizeTable (String phase) {\r
- this.phase = phase;\r
- al = new ArrayList<Integer>();\r
+ al = new ArrayList<ArrayList<Integer>>();\r
alComments = new ArrayList<String>();\r
len = 0;\r
+ this.phase = phase;\r
+ }\r
+\r
+ public String getSizeMacro () {\r
+ return String.format(PcdDatabase.SizeTableSizeMacro, phase, getSize());\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
}\r
\r
private ArrayList<String> getInstantiation () {\r
+ final String comma = ",";\r
ArrayList<String> Output = new ArrayList<String>();\r
\r
Output.add("/* SizeTable */");\r
Output.add("\t0");\r
} else {\r
for (int index = 0; index < al.size(); index++) {\r
- Integer n = al.get(index);\r
- String str = "\t" + n.toString();\r
+ ArrayList<Integer> ial = al.get(index);\r
+ \r
+ String str = "\t";\r
+ \r
+ for (int index2 = 0; index2 < ial.size(); index2++) {\r
+ str += " " + ial.get(index2).toString();\r
+ if (index2 != ial.size() - 1) {\r
+ str += comma;\r
+ }\r
+ }\r
\r
+ str += " /* " + alComments.get(index) + " */"; \r
+ \r
if (index != (al.size() - 1)) {\r
- str += ",";\r
+ str += comma;\r
}\r
\r
- str += " /* " + alComments.get(index) + " */"; \r
Output.add(str);\r
\r
}\r
return Output;\r
}\r
\r
- public int add (Token token) {\r
- int index = len;\r
+ public void add (Token token) {\r
\r
- len++; \r
- al.add(token.datumSize);\r
+ //\r
+ // We only have size information for POINTER type PCD entry.\r
+ //\r
+ if (token.datumType != Token.DATUM_TYPE.POINTER) {\r
+ return;\r
+ }\r
+ \r
+ ArrayList<Integer> ial = token.getPointerTypeSize();\r
+ \r
+ len+= ial.size(); \r
+\r
+ al.add(ial);\r
alComments.add(token.getPrimaryKeyString());\r
\r
- return index;\r
+ return;\r
}\r
\r
- public int getTableLen () {\r
- return al.size() == 0 ? 1 : al.size();\r
- }\r
-\r
}\r
\r
/**\r
cCode += String.format(PcdDatabase.GuidTableDeclaration, phase); \r
decl = new CStructTypeDeclaration (\r
name,\r
- 8,\r
+ 4,\r
cCode,\r
true\r
); \r
str += " | PCD_TYPE_VPD";\r
}\r
\r
+ switch (token.datumType) {\r
+ case UINT8:\r
+ case BOOLEAN:\r
+ str += " | PCD_DATUM_TYPE_UINT8";\r
+ break;\r
+ case UINT16:\r
+ str += " | PCD_DATUM_TYPE_UINT16";\r
+ break;\r
+ case UINT32:\r
+ str += " | PCD_DATUM_TYPE_UINT32";\r
+ break;\r
+ case UINT64:\r
+ str += " | PCD_DATUM_TYPE_UINT64";\r
+ break;\r
+ case POINTER:\r
+ str += " | PCD_DATUM_TYPE_POINTER";\r
+ break;\r
+ }\r
+ \r
al.add(str);\r
alComment.add(token.getPrimaryKeyString());\r
\r
public final static String GuidTableDeclaration = "EFI_GUID GuidTable[%s_GUID_TABLE_SIZE];\r\n";\r
public final static String LocalTokenNumberTableDeclaration = "UINT32 LocalTokenNumberTable[%s_LOCAL_TOKEN_NUMBER_TABLE_SIZE];\r\n";\r
public final static String StringTableDeclaration = "UINT16 StringTable[%s_STRING_TABLE_SIZE];\r\n";\r
- public final static String SizeTableDeclaration = "UINT16 SizeTable[%s_LOCAL_TOKEN_NUMBER_TABLE_SIZE];\r\n";\r
+ public final static String SizeTableDeclaration = "SIZE_INFO SizeTable[%s_SIZE_TABLE_SIZE];\r\n";\r
public final static String SkuIdTableDeclaration = "UINT8 SkuIdTable[%s_SKUID_TABLE_SIZE];\r\n";\r
\r
\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 StringTableSizeMacro = "#define %s_STRING_TABLE_SIZE %d\r\n";\r
public final static String SkuIdTableSizeMacro = "#define %s_SKUID_TABLE_SIZE %d\r\n";\r
\r
macroStr += skuIdTable.getSizeMacro();\r
macroStr += localTokenNumberTable.getSizeMacro();\r
macroStr += exMapTable.getSizeMacro();\r
+ macroStr += sizeTable.getSizeMacro();\r
\r
//\r
// Generate existance info Macro for all Tables\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
throws EntityException {\r
\r
}\r
\r
String type = getCType(t);\r
- if ((t.datumType == Token.DATUM_TYPE.POINTER) && (!t.isHiiEnable())) {\r
+ if ((t.datumType == Token.DATUM_TYPE.POINTER) && (!t.isHiiEnable()) && (!t.isUnicodeStringType())) {\r
int bufferSize;\r
if (t.isASCIIStringType()) {\r
//\r
**/\r
public static void main(String argv[]) throws EntityException {\r
CollectPCDAction ca = new CollectPCDAction();\r
- ca.setWorkspacePath("m:/tianocore/edk2");\r
- ca.setFPDFilePath("m:/tianocore/edk2/EdkNt32Pkg/Nt32.fpd");\r
+ String projectDir = "x:/edk2";\r
+ ca.setWorkspacePath(projectDir);\r
+ ca.setFPDFilePath(projectDir + "/EdkNt32Pkg/Nt32.fpd");\r
ca.setActionMessageLevel(ActionMessage.MAX_MESSAGE_LEVEL);\r
GlobalData.initInfo("Tools" + File.separator + "Conf" + File.separator + "FrameworkDatabase.db",\r
- "m:/tianocore/edk2",\r
+ projectDir,\r
"tools_def.txt");\r
+ System.out.println("After initInfo!");\r
FpdParserTask fpt = new FpdParserTask();\r
- fpt.parseFpdFile(new File("m:/tianocore/edk2/EdkNt32Pkg/Nt32.fpd"));\r
+ fpt.parseFpdFile(new File(projectDir + "/EdkNt32Pkg/Nt32.fpd"));\r
ca.execute();\r
}\r
}\r