]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/GenBuild/org/tianocore/build/pcd/action/CollectPCDAction.java
Add PcdDxe and PcdPEIM to all-arch for EdkModulePkg-All-Archs.fpd
[mirror_edk2.git] / Tools / Source / GenBuild / org / tianocore / build / pcd / action / CollectPCDAction.java
index cf94885847058374f4a0fb5fa4a099795c76f5ae..6686de9f1d8592387800cd5f09a849b3d09bc549 100644 (file)
@@ -23,20 +23,36 @@ import java.io.FileReader;
 import java.io.IOException;\r
 import java.math.BigInteger;\r
 import java.util.ArrayList;\r
+import java.util.Collections;\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;\r
 import org.tianocore.DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions;\r
+import org.tianocore.DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData;\r
+import org.tianocore.DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions.PcdBuildData.SkuInfo;\r
 import org.tianocore.FrameworkModulesDocument;\r
-import org.tianocore.FrameworkPlatformDescriptionDocument;\r
+import org.tianocore.PcdDeclarationsDocument;\r
+import org.tianocore.PlatformSurfaceAreaDocument;\r
+import org.tianocore.PcdBuildDefinitionDocument;\r
+import org.tianocore.PlatformSurfaceAreaDocument.PlatformSurfaceArea;\r
 import org.tianocore.ModuleSADocument;\r
+import org.tianocore.ModuleSADocument.ModuleSA;\r
+import org.tianocore.PackageSurfaceAreaDocument;\r
 import org.tianocore.PcdBuildDefinitionDocument.PcdBuildDefinition;\r
+import org.tianocore.build.autogen.CommonDefinition;\r
 import org.tianocore.build.global.GlobalData;\r
 import org.tianocore.build.global.SurfaceAreaQuery;\r
+import org.tianocore.build.id.FpdModuleIdentification;\r
 import org.tianocore.build.pcd.action.ActionMessage;\r
 import org.tianocore.build.pcd.entity.DynamicTokenValue;\r
 import org.tianocore.build.pcd.entity.MemoryDatabaseManager;\r
@@ -44,6 +60,7 @@ import org.tianocore.build.pcd.entity.SkuInstance;
 import org.tianocore.build.pcd.entity.Token;\r
 import org.tianocore.build.pcd.entity.UsageInstance;\r
 import org.tianocore.build.pcd.exception.EntityException;\r
+import org.tianocore.logger.EdkLog;\r
 import org.tianocore.ModuleTypeDef;\r
 \r
 class CStructTypeDeclaration {\r
@@ -107,7 +124,7 @@ class StringTable {
         // If we have a empty StringTable\r
         //\r
         if (al.size() == 0) {\r
-            cDeclCode += tab + String.format("UINT16             %s[1]; /* StringTable is Empty */", stringTable) + newLine; \r
+            cDeclCode += String.format("%-20s%s[1]; /* StringTable is empty */", "UINT16", stringTable) + newLine; \r
             decl = new CStructTypeDeclaration (\r
                                                 stringTable,\r
                                                 2,\r
@@ -116,7 +133,7 @@ class StringTable {
                                         );  \r
             declaList.add(decl);\r
 \r
-            cInstCode = " { 0 } " + String.format("/* %s */", stringTable);\r
+            cInstCode = String.format("/* %s */", stringTable) + newLine + tab + "{ 0 }";\r
             instTable.put(stringTable, cInstCode);\r
         } else {\r
 \r
@@ -137,7 +154,7 @@ class StringTable {
                     stringTableName = String.format("%s_%d", stringTable, i);\r
                     cDeclCode += tab;\r
                 }\r
-                cDeclCode += String.format("UINT16              %s[%d]; /* %s */", stringTableName, str.length() + 1, alComments.get(i)) + newLine;\r
+                cDeclCode += String.format("%-20s%s[%d]; /* %s */", "UINT16", stringTableName, str.length() + 1, alComments.get(i)) + newLine;\r
                 \r
                 if (i == 0) {\r
                     cInstCode = "/* StringTable */" + newLine;\r
@@ -295,7 +312,7 @@ class SizeTable {
         Output.add("/* SizeTable */");\r
         Output.add("{");\r
         if (al.size() == 0) {\r
-            Output.add("0");\r
+            Output.add("\t0");\r
         } else {\r
             for (int index = 0; index < al.size(); index++) {\r
                 Integer n = al.get(index);\r
@@ -387,7 +404,7 @@ class GuidTable {
 \r
         guidStrArray =(uuid.toString()).split("-");\r
 \r
-        return String.format("{ 0x%s, 0x%s, 0x%s, { 0x%s, 0x%s, 0x%s, 0x%s, 0x%s, 0x%s, 0x%s, 0x%s } }",\r
+        return String.format("{0x%s, 0x%s, 0x%s, {0x%s, 0x%s, 0x%s, 0x%s, 0x%s, 0x%s, 0x%s, 0x%s}}",\r
                                          guidStrArray[0],\r
                                          guidStrArray[1],\r
                                          guidStrArray[2],\r
@@ -407,8 +424,9 @@ class GuidTable {
 \r
         Output.add("/* GuidTable */");\r
         Output.add("{");\r
+\r
         if (al.size() == 0) {\r
-            Output.add(getUuidCString(new UUID(0, 0)));\r
+            Output.add("\t" + getUuidCString(new UUID(0, 0)));\r
         }\r
         \r
         for (int i = 0; i < al.size(); i++) {\r
@@ -505,7 +523,7 @@ class SkuIdTable {
             decl = new CStructTypeDeclaration (\r
                                                 "SystemSkuId",\r
                                                 1,\r
-                                                "SKU_ID          SystemSkuId;\r\n",\r
+                                                String.format("%-20sSystemSkuId;\r\n", "SKU_ID"),\r
                                                 true\r
                                               );\r
             declaList.add(decl);\r
@@ -662,7 +680,7 @@ class LocalTokenNumberTable {
         output.add("{");\r
 \r
         if (al.size() == 0) {\r
-            output.add("0");\r
+            output.add("\t0");\r
         }\r
         \r
         for (int index = 0; index < al.size(); index++) {\r
@@ -864,12 +882,12 @@ class PcdDatabase {
     private final String        newLine                         = "\r\n";\r
     private final String        commaNewLine                    = ",\r\n";\r
     private final String        tab                             = "\t";\r
-    public final static String ExMapTableDeclaration            = "DYNAMICEX_MAPPING ExMapTable[%s_EXMAPPING_TABLE_SIZE];\r\n";\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 SkuIdTableDeclaration            = "UINT8             SkuIdTable[%s_SKUID_TABLE_SIZE];\r\n";\r
+    public final static String ExMapTableDeclaration            = "DYNAMICEX_MAPPING   ExMapTable[%s_EXMAPPING_TABLE_SIZE];\r\n";\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 SkuIdTableDeclaration            = "UINT8               SkuIdTable[%s_SKUID_TABLE_SIZE];\r\n";\r
 \r
 \r
     public final static String ExMapTableSizeMacro              = "#define %s_EXMAPPING_TABLE_SIZE  %d\r\n";\r
@@ -990,6 +1008,30 @@ class PcdDatabase {
         }\r
     }\r
     \r
+    private int getHiiPtrTypeAlignmentSize(Token token) {\r
+        switch (token.datumType) {\r
+        case UINT8:\r
+            return 1;\r
+        case UINT16:\r
+            return 2;\r
+        case UINT32:\r
+            return 4;\r
+        case UINT64:\r
+            return 8;\r
+        case POINTER:\r
+            if (token.isHiiEnable()) {\r
+                if (token.isHiiDefaultValueUnicodeStringType()) {\r
+                    return 2;\r
+                }\r
+            }\r
+            return 1;\r
+        case BOOLEAN:\r
+            return 1;\r
+        default:\r
+            return 1;\r
+        }\r
+    }\r
+    \r
     private int getAlignmentSize (Token token) {\r
         if (token.getDefaultSku().type == DynamicTokenValue.VALUE_TYPE.HII_TYPE) {\r
             return 2;\r
@@ -1071,7 +1113,7 @@ class PcdDatabase {
             // Add a mapping if this dynamic PCD entry is a EX type\r
             //\r
             if (t.isDynamicEx()) {\r
-                exMapTable.add(t.tokenNumber, \r
+                exMapTable.add((int)t.tokenNumber, \r
                                 t.dynamicExTokenNumber, \r
                                 guidTable.add(t.tokenSpaceName, t.getPrimaryKeyString()), \r
                                 t.getPrimaryKeyString()\r
@@ -1206,7 +1248,8 @@ class PcdDatabase {
                 //\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
-                // remove the last "," in the C structure instantiation string.\r
+                // remove the last "," in the C structure instantiation string. Luckily,\r
+                // this is true as both data structure has SKUID_TABLE anyway.\r
                 //\r
                 if ((align == 1) && (i == declaListBasedOnAlignment.size() - 1)) {\r
                     initInstStr += newLine;\r
@@ -1228,7 +1271,7 @@ class PcdDatabase {
         }\r
         \r
         if (uinitDatabaseEmpty) {\r
-            uninitDeclStr += tab + "   UINT8        dummy; /* PCD_DATABASE_UNINIT is emptry */\r\n";\r
+            uninitDeclStr += tab + String.format("%-20sdummy; /* PCD_DATABASE_UNINIT is emptry */\r\n", "UINT8");\r
         }\r
         \r
         initDeclStr += String.format("} %s_PCD_DATABASE_INIT;", phase) + newLine + newLine;\r
@@ -1475,7 +1518,7 @@ class PcdDatabase {
     }\r
 \r
     private String getSkuEnabledTypeDeclaration (Token token) {\r
-        return String.format("SKU_HEAD %s;\r\n", token.getPrimaryKeyString());\r
+        return String.format("%-20s%s;\r\n", "SKU_HEAD", token.getPrimaryKeyString());\r
     }\r
 \r
     private String getSkuEnabledTypeInstantiaion (Token token, int SkuTableIdx) {\r
@@ -1580,21 +1623,27 @@ class PcdDatabase {
             privateGlobalName = t.getPrimaryKeyString();\r
         }\r
 \r
-        if (t.isUnicodeStringType()) {\r
-            privateGlobalCCode = String.format("STRING_HEAD              %s[%d];\r\n", t.getPrimaryKeyString(), t.getSkuIdCount());\r
-        } else {\r
-            String type = getCType(t);\r
-            if (t.datumType == Token.DATUM_TYPE.POINTER) {\r
-                privateGlobalCCode = String.format("%s              %s[%d][%d];\r\n", type, privateGlobalName, t.getSkuIdCount(), t.datumSize);\r
+        String type = getCType(t);\r
+        if ((t.datumType == Token.DATUM_TYPE.POINTER) && (!t.isHiiEnable())) {\r
+            int bufferSize;\r
+            if (t.isASCIIStringType()) {\r
+                //\r
+                // Build tool will add a NULL string at the end of the ASCII string\r
+                //\r
+                bufferSize = t.datumSize + 1;\r
             } else {\r
-                privateGlobalCCode = String.format("%s              %s[%d];\r\n", type, privateGlobalName, t.getSkuIdCount());\r
+                bufferSize = t.datumSize;\r
             }\r
+            privateGlobalCCode = String.format("%-20s%s[%d][%d];\r\n", type, privateGlobalName, t.getSkuIdCount(), bufferSize);\r
+        } else {\r
+            privateGlobalCCode = String.format("%-20s%s[%d];\r\n", type, privateGlobalName, t.getSkuIdCount());\r
         }\r
     }\r
     \r
-    private String getDataTypeDeclarationForVariableDefault_new (Token token, String cName, int skuId) {\r
+    private String getDataTypeDeclarationForVariableDefault_new (Token token, String cName, int skuId) \r
+    throws EntityException {\r
 \r
-        String typeStr = "";\r
+        String typeStr;\r
 \r
         if (token.datumType == Token.DATUM_TYPE.UINT8) {\r
             typeStr = "UINT8";\r
@@ -1607,11 +1656,30 @@ class PcdDatabase {
         } else if (token.datumType == Token.DATUM_TYPE.BOOLEAN) {\r
             typeStr = "BOOLEAN";\r
         } else if (token.datumType == Token.DATUM_TYPE.POINTER) {\r
-            return String.format("UINT8 %s[%d]", cName, token.datumSize);\r
+            int size;\r
+            if (token.isHiiDefaultValueUnicodeStringType()) {\r
+                typeStr = "UINT16";\r
+                //\r
+                // Include the NULL charactor\r
+                //\r
+                size = token.datumSize / 2 + 1;\r
+            } else {\r
+                typeStr = "UINT8";\r
+                if (token.isHiiDefaultValueASCIIStringType()) {\r
+                    //\r
+                    // Include the NULL charactor\r
+                    //\r
+                    size = token.datumSize + 1;\r
+                } else {\r
+                    size = token.datumSize;\r
+                }\r
+            }\r
+            return String.format("%-20s%s[%d];\r\n", typeStr, cName, size);\r
         } else {\r
+            throw new EntityException("Unknown DATUM_TYPE type in when generating code for VARIABLE_ENABLED PCD entry");\r
         }\r
 \r
-        return String.format("%s             %s;\r\n", typeStr, cName);\r
+        return String.format("%-20s%s;\r\n", typeStr, cName);\r
     }\r
     \r
     private String getDataTypeDeclaration (Token token) {\r
@@ -1649,7 +1717,7 @@ class PcdDatabase {
         s += tab + "{" + newLine;\r
 \r
         for (i = 0; i < t.skuData.size(); i++) {\r
-            if (t.isUnicodeStringType() && !t.isHiiEnable()) {\r
+            if (t.isUnicodeStringType()) {\r
                 s += tab + tab + String.format("{ %d }", stringTable.add(t.skuData.get(i).value.value, t));\r
             } else if (t.isHiiEnable()) {\r
                 /* VPD_HEAD definition\r
@@ -1657,6 +1725,7 @@ class PcdDatabase {
                       UINT16  GuidTableIndex;   // Offset in Guid Table in units of GUID.\r
                       UINT16  StringIndex;      // Offset in String Table in units of UINT16.\r
                       UINT16  Offset;           // Offset in Variable\r
+                      UINT16  DefaultValueOffset; // Offset of the Default Value\r
                     } VARIABLE_HEAD  ;\r
                  */\r
                 String variableDefaultName = String.format("%s_VariableDefault_%d", t.getPrimaryKeyString(), i); \r
@@ -1671,7 +1740,7 @@ class PcdDatabase {
                 // the instantiation for the default value.\r
                 //\r
                 CStructTypeDeclaration decl = new CStructTypeDeclaration (variableDefaultName,\r
-                                                        getDataTypeAlignmentSize(t),\r
+                                                        getHiiPtrTypeAlignmentSize(t),\r
                                                         getDataTypeDeclarationForVariableDefault_new(t, variableDefaultName, i),\r
                                                         true\r
                                                         ); \r
@@ -1684,7 +1753,14 @@ class PcdDatabase {
                     */\r
                 s += tab + tab + String.format("{ %s }", t.skuData.get(i).value.vpdOffset);\r
             } else {\r
-                s += tab + tab + String.format("{ %s }", t.skuData.get(i).value.value);\r
+                if (t.isByteStreamType()) {\r
+                    //\r
+                    // Byte stream type input has their own "{" "}", so we won't help to insert.\r
+                    //\r
+                    s += tab + tab + String.format(" %s ", t.skuData.get(i).value.value);\r
+                } else {\r
+                    s += tab + tab + String.format("{ %s }", t.skuData.get(i).value.value);\r
+                }\r
             }\r
             \r
             if (i != t.skuData.size() - 1) {\r
@@ -1806,12 +1882,25 @@ class PcdDatabase {
 }\r
 \r
 class ModuleInfo {\r
-    public ModuleSADocument.ModuleSA module;\r
-    public ModuleTypeDef.Enum        type;\r
+    private String                  type;\r
+    private FpdModuleIdentification moduleId;\r
+    private PcdBuildDefinitionDocument.PcdBuildDefinition pcdBuildDef;\r
+    \r
+    \r
 \r
-    public ModuleInfo (ModuleSADocument.ModuleSA module, ModuleTypeDef.Enum type) {\r
-        this.module = module;\r
+    public ModuleInfo (FpdModuleIdentification moduleId, String type, XmlObject pcdDef) {\r
+        this.moduleId = moduleId;\r
         this.type   = type;\r
+        this.pcdBuildDef = ((PcdBuildDefinitionDocument)pcdDef).getPcdBuildDefinition();\r
+    }\r
+    public String getModuleType (){\r
+       return this.type;\r
+    }\r
+    public FpdModuleIdentification getModuleId (){\r
+       return this.moduleId;\r
+    }\r
+    public PcdBuildDefinitionDocument.PcdBuildDefinition getPcdBuildDef(){\r
+       return this.pcdBuildDef;\r
     }\r
 }\r
 \r
@@ -1833,8 +1922,11 @@ public class CollectPCDAction {
     private int                   originalMessageLevel;\r
 \r
     /// Cache the fpd docment instance for private usage.\r
-    private FrameworkPlatformDescriptionDocument fpdDocInstance;\r
-\r
+    private PlatformSurfaceAreaDocument fpdDocInstance;\r
+    \r
+    /// xmlObject name\r
+    private static String xmlObjectName = "PcdBuildDefinition"; \r
+       \r
     /**\r
       Set WorkspacePath parameter for this action class.\r
 \r
@@ -1901,7 +1993,7 @@ public class CollectPCDAction {
       @throws  EntityException Exception indicate failed to execute this action.\r
       \r
     **/\r
-    private void execute() throws EntityException {\r
+    public void execute() throws EntityException {\r
         //\r
         // Get memoryDatabaseManager instance from GlobalData.\r
         // The memoryDatabaseManager should be initialized for whatever build\r
@@ -1970,14 +2062,13 @@ public class CollectPCDAction {
         List<ModuleInfo>            allModules  = new ArrayList<ModuleInfo>();\r
         ModuleInfo                  current     = null;\r
         int                         index       = 0;\r
-        org.tianocore.Components    components  = null;\r
         FrameworkModulesDocument.FrameworkModules fModules = null;\r
         ModuleSADocument.ModuleSA[]               modules  = null;\r
         HashMap<String, XmlObject>                map      = new HashMap<String, XmlObject>();\r
 \r
         if (fpdDocInstance == null) {\r
             try {\r
-                fpdDocInstance = (FrameworkPlatformDescriptionDocument)XmlObject.Factory.parse(new File(fpdFilePath));\r
+                fpdDocInstance = (PlatformSurfaceAreaDocument)XmlObject.Factory.parse(new File(fpdFilePath));\r
             } catch(IOException ioE) {\r
                 throw new EntityException("File IO error for xml file:" + fpdFilePath + "\n" + ioE.getMessage());\r
             } catch(XmlException xmlE) {\r
@@ -1986,13 +2077,12 @@ public class CollectPCDAction {
 \r
         }\r
 \r
-        map.put("FrameworkPlatformDescription", fpdDocInstance);\r
-        SurfaceAreaQuery.setDoc(map); \r
-        modules = SurfaceAreaQuery.getFpdModuleSAs();\r
-        for (index = 0; index < modules.length; index ++) {\r
-            SurfaceAreaQuery.setDoc(GlobalData.getDoc(modules[index].getModuleName()));\r
-            allModules.add(new ModuleInfo(modules[index], \r
-                                          ModuleTypeDef.Enum.forString(SurfaceAreaQuery.getModuleType())));\r
+        Map<FpdModuleIdentification,XmlObject>pcdBuildDef = GlobalData.getFpdModuleSaXmlObject(CollectPCDAction.xmlObjectName);\r
+        Set<FpdModuleIdentification> pcdBuildKeySet = pcdBuildDef.keySet();\r
+        Iterator item = pcdBuildKeySet.iterator();\r
+        while (item.hasNext()){\r
+            FpdModuleIdentification id = (FpdModuleIdentification)item.next();\r
+            allModules.add(new ModuleInfo(id, id.getModule().getModuleType(),pcdBuildDef.get(id)));    \r
         }\r
         \r
         return allModules;\r
@@ -2027,10 +2117,11 @@ public class CollectPCDAction {
         boolean                             isDuplicate       = false;\r
         Token.PCD_TYPE                      pcdType           = Token.PCD_TYPE.UNKNOWN;\r
         Token.DATUM_TYPE                    datumType         = Token.DATUM_TYPE.UNKNOWN;\r
-        int                                 tokenNumber       = 0;\r
+        long                                tokenNumber       = 0;\r
         String                              moduleName        = null;\r
         String                              datum             = null;\r
         int                                 maxDatumSize      = 0;\r
+        String[]                            tokenSpaceStrRet  = null;\r
 \r
         //\r
         // ----------------------------------------------\r
@@ -2055,17 +2146,17 @@ public class CollectPCDAction {
                 // BUGBUG: For transition schema, we can *not* get module's version from \r
                 // <ModuleSAs>, It is work around code.\r
                 // \r
-                primaryKey1 = UsageInstance.getPrimaryKey(modules.get(index).module.getModuleName(), \r
+                primaryKey1 = UsageInstance.getPrimaryKey(modules.get(index).getModuleId().getModule().getName(), \r
+                                                          null,\r
                                                           null,\r
                                                           null, \r
-                                                          null, \r
-                                                          modules.get(index).module.getArch().toString(),\r
+                                                          modules.get(index).getModuleId().getArch(),\r
                                                           null);\r
-                primaryKey2 = UsageInstance.getPrimaryKey(modules.get(index2).module.getModuleName(), \r
+                primaryKey2 = UsageInstance.getPrimaryKey(modules.get(index2).getModuleId().getModule().getName(), \r
                                                           null, \r
                                                           null, \r
                                                           null, \r
-                                                          modules.get(index2).module.getArch().toString(), \r
+                                                          modules.get(index2).getModuleId().getArch(), \r
                                                           null);\r
                 if (primaryKey1.equalsIgnoreCase(primaryKey2)) {\r
                     isDuplicate = true;\r
@@ -2080,13 +2171,13 @@ public class CollectPCDAction {
            //\r
            // It is legal for a module does not contains ANY pcd build definitions.\r
            // \r
-           if (modules.get(index).module.getPcdBuildDefinition() == null) {\r
+           if (modules.get(index).getPcdBuildDef() == null) {\r
                 continue;\r
            }\r
     \r
-            pcdBuildDataArray = modules.get(index).module.getPcdBuildDefinition().getPcdDataList();\r
+            pcdBuildDataArray = modules.get(index).getPcdBuildDef().getPcdDataList();\r
 \r
-            moduleName = modules.get(index).module.getModuleName();\r
+            moduleName = modules.get(index).getModuleId().getModule().getName();\r
 \r
             //\r
             // ----------------------------------------------------------------------\r
@@ -2095,11 +2186,22 @@ public class CollectPCDAction {
             // \r
             for (pcdIndex = 0; pcdIndex < pcdBuildDataArray.size(); pcdIndex ++) {\r
                 pcdBuildData = pcdBuildDataArray.get(pcdIndex);\r
+                \r
+                try {\r
+                    tokenSpaceStrRet = GlobalData.getGuidInfoFromCname(pcdBuildData.getTokenSpaceGuidCName());\r
+                } catch ( Exception e ) {\r
+                    throw new EntityException ("Faile get Guid for token " + pcdBuildData.getCName() + ":" + e.getMessage());\r
+                }\r
+\r
+                if (tokenSpaceStrRet == null) {\r
+                    throw new EntityException ("Fail to get Token space guid for token" + pcdBuildData.getCName());\r
+                } \r
+\r
                 primaryKey   = Token.getPrimaryKeyString(pcdBuildData.getCName(),\r
-                                                         translateSchemaStringToUUID(pcdBuildData.getTokenSpaceGuid()));\r
+                                                         translateSchemaStringToUUID(tokenSpaceStrRet[1]));\r
                 pcdType      = Token.getpcdTypeFromString(pcdBuildData.getItemType().toString());\r
                 datumType    = Token.getdatumTypeFromString(pcdBuildData.getDatumType().toString());\r
-                tokenNumber  = Integer.decode(pcdBuildData.getToken().toString());\r
+                tokenNumber  = Long.decode(pcdBuildData.getToken().toString());\r
                 if (pcdBuildData.getValue() != null) {\r
                     datum = pcdBuildData.getValue().toString();\r
                 } else {\r
@@ -2116,17 +2218,6 @@ public class CollectPCDAction {
                     throw new EntityException(exceptionString);\r
                 }\r
 \r
-                //\r
-                // Check <TokenSpaceGuid> is exist? In future, because all schema verification will tools\r
-                // will check that, following checking code could be removed.\r
-                // \r
-                if (pcdBuildData.getTokenSpaceGuid() == null) {\r
-                    exceptionString = String.format("[FPD file error] There is no <TokenSpaceGuid> for PCD %s in module %s! This is required!",\r
-                                                    pcdBuildData.getCName(),\r
-                                                    moduleName);\r
-                    throw new EntityException(exceptionString);\r
-                }\r
-\r
                 //\r
                 // -------------------------------------------------------------------------------------------\r
                 // 2.1.1), Do some necessary checking work for FixedAtBuild, FeatureFlag and PatchableInModule\r
@@ -2236,8 +2327,18 @@ public class CollectPCDAction {
                     // If the token is not in database, create a new token instance and add\r
                     // a usage instance into this token in database.\r
                     // \r
+                    try {\r
+                        tokenSpaceStrRet = GlobalData.getGuidInfoFromCname(pcdBuildData.getTokenSpaceGuidCName());\r
+                    } catch (Exception e) {\r
+                        throw new EntityException("Fail to get token space guid for token " + token.cName);\r
+                    }\r
+\r
+                    if (tokenSpaceStrRet == null) {\r
+                        throw new EntityException("Fail to get token space guid for token " + token.cName);\r
+                    }\r
+\r
                     token = new Token(pcdBuildData.getCName(), \r
-                                      translateSchemaStringToUUID(pcdBuildData.getTokenSpaceGuid()));\r
+                                      translateSchemaStringToUUID(tokenSpaceStrRet[1]));\r
     \r
                     token.datumType     = datumType;\r
                     token.tokenNumber   = tokenNumber;\r
@@ -2275,9 +2376,9 @@ public class CollectPCDAction {
                                                   null,\r
                                                   null,\r
                                                   null,\r
-                                                  modules.get(index).type\r
+                                                  CommonDefinition.getModuleType(modules.get(index).getModuleType())\r
                                                   pcdType,\r
-                                                  modules.get(index).module.getArch().toString(), \r
+                                                  modules.get(index).getModuleId().getArch(), \r
                                                   null,\r
                                                   datum,\r
                                                   maxDatumSize);\r
@@ -2630,21 +2731,22 @@ public class CollectPCDAction {
         String dynamicPrimaryKey = null;\r
         DynamicPcdBuildDefinitions                    dynamicPcdBuildDefinitions = null;\r
         List<DynamicPcdBuildDefinitions.PcdBuildData> dynamicPcdBuildDataArray   = null;\r
+        String[]                                      tokenSpaceStrRet           = null;\r
 \r
         //\r
         // If FPD document is not be opened, open and initialize it.\r
         // \r
         if (fpdDocInstance == null) {\r
             try {\r
-                fpdDocInstance = (FrameworkPlatformDescriptionDocument)XmlObject.Factory.parse(new File(fpdFilePath));\r
+                fpdDocInstance = (PlatformSurfaceAreaDocument)XmlObject.Factory.parse(new File(fpdFilePath));\r
             } catch(IOException ioE) {\r
                 throw new EntityException("File IO error for xml file:" + fpdFilePath + "\n" + ioE.getMessage());\r
             } catch(XmlException xmlE) {\r
                 throw new EntityException("Can't parse the FPD xml fle:" + fpdFilePath + "\n" + xmlE.getMessage());\r
             }\r
         }\r
-\r
-        dynamicPcdBuildDefinitions = fpdDocInstance.getFrameworkPlatformDescription().getDynamicPcdBuildDefinitions();\r
+        \r
+        dynamicPcdBuildDefinitions = fpdDocInstance.getPlatformSurfaceArea().getDynamicPcdBuildDefinitions();\r
         if (dynamicPcdBuildDefinitions == null) {\r
             exceptionString = String.format("[FPD file error] There are no <PcdDynamicBuildDescriptions> in FPD file but contains Dynamic type "+\r
                                             "PCD entry %s in module %s!",\r
@@ -2655,18 +2757,20 @@ public class CollectPCDAction {
 \r
         dynamicPcdBuildDataArray = dynamicPcdBuildDefinitions.getPcdBuildDataList();\r
         for (index = 0; index < dynamicPcdBuildDataArray.size(); index ++) {\r
-            //\r
-            // Check <TokenSpaceGuid> is exist? In future, because all schema verification will tools\r
-            // will check that, following checking code could be removed.\r
-            // \r
-            if (dynamicPcdBuildDataArray.get(index).getTokenSpaceGuid() == null) {\r
-                exceptionString = String.format("[FPD file error] There is no <TokenSpaceGuid> for PCD %s in <DynamicPcdBuildDefinitions>! This is required!",\r
-                                                dynamicPcdBuildDataArray.get(index).getCName());\r
-                throw new EntityException(exceptionString);\r
+            //String tokenSpaceGuidString = GlobalData.getGuidInfoFromCname(dynamicPcdBuildDataArray.get(index).getTokenSpaceGuidCName())[1];\r
+            String tokenSpaceGuidString = null;\r
+            try {\r
+                tokenSpaceStrRet = GlobalData.getGuidInfoFromCname(dynamicPcdBuildDataArray.get(index).getTokenSpaceGuidCName());\r
+            } catch (Exception e) {\r
+                throw new EntityException ("Fail to get token space guid for token " + dynamicPcdBuildDataArray.get(index).getCName());\r
+            }\r
+            \r
+            if (tokenSpaceStrRet == null) {\r
+                throw new EntityException ("Fail to get token space guid for token " + dynamicPcdBuildDataArray.get(index).getCName());\r
             }\r
 \r
             dynamicPrimaryKey = Token.getPrimaryKeyString(dynamicPcdBuildDataArray.get(index).getCName(),\r
-                                                          translateSchemaStringToUUID(dynamicPcdBuildDataArray.get(index).getTokenSpaceGuid()));\r
+                                                          translateSchemaStringToUUID(tokenSpaceStrRet[1]));\r
             if (dynamicPrimaryKey.equalsIgnoreCase(token.getPrimaryKeyString())) {\r
                 return dynamicPcdBuildDataArray.get(index);\r
             }\r
@@ -2701,7 +2805,7 @@ public class CollectPCDAction {
         String              temp;\r
         boolean             hasSkuId0       = false;\r
         Token.PCD_TYPE      pcdType         = Token.PCD_TYPE.UNKNOWN;\r
-        int                 tokenNumber     = 0;\r
+        long                tokenNumber     = 0;\r
         String              hiiDefaultValue = null;\r
         String[]            variableGuidString = null;\r
 \r
@@ -2739,7 +2843,7 @@ public class CollectPCDAction {
                                             dynamicInfo.getMaxDatumSize());\r
             throw new EntityException(exceptionString);\r
         }\r
-        tokenNumber = Integer.decode(dynamicInfo.getToken().toString());\r
+        tokenNumber = Long.decode(dynamicInfo.getToken().toString());\r
         if (tokenNumber != token.tokenNumber) {\r
             exceptionString = String.format("[FPD file error] For dynamic PCD %s, the token number in module %s is 0x%x, but"+\r
                                             "in <DynamicPcdBuildDefinictions>, the token number is 0x%x, they are not match!",\r
@@ -2861,14 +2965,22 @@ public class CollectPCDAction {
                 //\r
                 // Get variable guid string according to the name of guid which will be mapped into a GUID in SPD file.\r
                 // \r
-                variableGuidString = GlobalData.getGuidInfoGuid(skuInfoList.get(index).getVariableGuid().toString());\r
+                variableGuidString = GlobalData.getGuidInfoFromCname(skuInfoList.get(index).getVariableGuid().toString());\r
                 if (variableGuidString == null) {\r
                     throw new EntityException(String.format("[GUID Error] For dynamic PCD %s,  the variable guid %s can be found in all SPD file!",\r
                                                             token.cName, \r
                                                             skuInfoList.get(index).getVariableGuid().toString()));\r
                 }\r
-\r
-                skuInstance.value.setHiiData(skuInfoList.get(index).getVariableName(),\r
+                String variableStr = skuInfoList.get(index).getVariableName();\r
+                Pattern pattern = Pattern.compile("0x([a-fA-F0-9]){4}");\r
+                Matcher matcher = pattern.matcher(variableStr);\r
+                List<String> varNameList = new ArrayList<String>();\r
+                while (matcher.find()){\r
+                       String str = variableStr.substring(matcher.start(),matcher.end());\r
+                       varNameList.add(str);\r
+                }\r
+                \r
+                skuInstance.value.setHiiData(varNameList,\r
                                              translateSchemaStringToUUID(variableGuidString[1]),\r
                                              skuInfoList.get(index).getVariableOffset(),\r
                                              skuInfoList.get(index).getHiiDefaultValue().toString());\r
@@ -3025,8 +3137,8 @@ public class CollectPCDAction {
         ca.setWorkspacePath("m:/tianocore/edk2");\r
         ca.setFPDFilePath("m:/tianocore/edk2/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
-        ca.execute();\r
+//        GlobalData.initInfo("Tools" + File.separator + "Conf" + File.separator + "FrameworkDatabase.db",\r
+//                            "m:/tianocore/edk2");\r
+//        ca.execute();\r
     }\r
 }\r