]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/GenBuild/org/tianocore/build/pcd/entity/Token.java
Remove unused PCD file.
[mirror_edk2.git] / Tools / Source / GenBuild / org / tianocore / build / pcd / entity / Token.java
index bce2ec9ad21ecea6119a3d6e1a5de986b5b67b5e..2a29b0c7f33a489f54c5df396906495a6674dca2 100644 (file)
@@ -22,7 +22,6 @@ import java.util.List;
 import java.util.Map;\r
 import java.util.UUID;\r
 \r
-import org.tianocore.build.pcd.action.ActionMessage;\r
 import org.tianocore.build.pcd.exception.EntityException;\r
 \r
 /** This class is to descript a PCD token object. The information of a token mainly \r
@@ -65,10 +64,15 @@ public class Token {
 \r
     ///\r
     /// tokenNumber is allocated by platform. tokenNumber indicate an index for this token in\r
-    /// platform token space.\r
-    /// tokenNumber is defined in SPD, FPD.\r
+    /// platform token space. For Dynamic, dynamicEx type, this number will be re-adjust by\r
+    /// PCD run-time database autogen tools.\r
     ///\r
-    public int              tokenNumber;\r
+    public long              tokenNumber;\r
+\r
+    ///\r
+    /// This token number is retrieved from FPD file for DynamicEx type. \r
+    /// \r
+    public long              dynamicExTokenNumber;\r
 \r
     ///\r
     /// All supported PCD type, this value can be retrieved from SPD\r
@@ -159,6 +163,17 @@ public class Token {
         return false;\r
     }\r
 \r
+    public boolean isDynamicEx() {\r
+        \r
+        for (int i = 0; i < supportedPcdType.size(); i++) {\r
+            if (supportedPcdType.get(i) == PCD_TYPE.DYNAMIC_EX) {\r
+                return true;\r
+            }\r
+        }\r
+        \r
+        return false;\r
+    }\r
+\r
     /**\r
       Use "TokencName + "-" + SpaceTokenName" as primary key when adding token into database\r
       \r
@@ -189,6 +204,20 @@ public class Token {
         }\r
         return false;\r
     }\r
+    \r
+    public boolean isHiiEnable() {\r
+        if (getDefaultSku().type == DynamicTokenValue.VALUE_TYPE.HII_TYPE) {\r
+            return true;\r
+        }\r
+        return false;\r
+    }\r
+\r
+    public boolean isVpdEnable() {\r
+        if (getDefaultSku().type == DynamicTokenValue.VALUE_TYPE.VPD_TYPE) {\r
+            return true;\r
+        }\r
+        return false;\r
+    }\r
 \r
     /**\r
        Get the token primary key in token database.\r
@@ -250,8 +279,9 @@ public class Token {
                                  usageInstance.arch,\r
                                  usageInstance.version)) {\r
             exceptionStr = String.format("PCD %s for module %s has already exist in database, Please check all PCD build entries "+\r
-                                         "in modules PcdPeim in <ModuleSA> to make sure no duplicated definitions!",\r
+                                         "in modules %s in <ModuleSA> to make sure no duplicated definitions!",\r
                                          usageInstance.parentToken.cName,\r
+                                         usageInstance.moduleName,\r
                                          usageInstance.moduleName);\r
             throw new EntityException(exceptionStr);\r
         }\r
@@ -466,6 +496,7 @@ public class Token {
 \r
       @return string of datum type.\r
     **/\r
+\r
     public static String getAutogendatumTypeString(DATUM_TYPE datumType) {\r
         switch (datumType) {\r
         case UINT8:\r
@@ -540,6 +571,82 @@ public class Token {
 \r
         return null;\r
     }\r
+    \r
+    public int getSkuIdCount () {\r
+        return this.skuData.size();\r
+    }\r
+\r
+    private void getCurrentSizeFromDefaultValue (String str, ArrayList<Integer> al) {\r
+        if (isValidNullValue(str)) {\r
+            al.add(new Integer(0));\r
+        } else {\r
+            //\r
+            // isValidNullValue has already make sure that str here\r
+            // always contain a valid default value of the following 3\r
+            // cases:\r
+            // 1) "Hello world" //Assci string\r
+            // 2) L"Hello" //Unicode string\r
+            // 3) {0x01, 0x02, 0x03} //Byte stream\r
+            //\r
+            if (str.startsWith("\"")) {\r
+                al.add(new Integer(str.length() - 2));\r
+            } else if (str.startsWith("L\"")){\r
+                //\r
+                // Unicode is 2 bytes each.\r
+                //\r
+                al.add(new Integer((str.length() - 3) * 2));\r
+            } else if (str.startsWith("{")) {\r
+                //\r
+                // We count the number of "," in the string.\r
+                // The number of byte is one plus the number of \r
+                // comma.\r
+                //\r
+                String str2 = str;\r
+                \r
+                int cnt = 0;\r
+                int pos = 0;\r
+                pos = str2.indexOf(",", 0);\r
+                while (pos != -1) {\r
+                    cnt++;\r
+                    pos++;\r
+                    pos = str2.indexOf(",", pos);\r
+                }\r
+                cnt++;\r
+                al.add(new Integer(cnt));\r
+            }\r
+        }\r
+    }\r
+    //\r
+    // This method can be used to get the MAX and current size\r
+    // for pointer type dynamic(ex) PCD entry\r
+    //\r
+    public ArrayList<Integer> getPointerTypeSize () {\r
+        ArrayList<Integer> al = new ArrayList<Integer>();\r
+        \r
+        //\r
+        // For VPD_enabled and HII_enabled, we can only return the MAX size.\r
+        // For the default DATA type dynamic PCD entry, we will return\r
+        // the MAX size and current size for each SKU_ID.\r
+        //\r
+        al.add(new Integer(this.datumSize));\r
+        \r
+        if (!this.isVpdEnable()) {\r
+            int idx;\r
+            if (this.isHiiEnable()){\r
+                for (idx = 0; idx < this.skuData.size(); idx++) {\r
+                    String str = this.skuData.get(idx).value.hiiDefaultValue;\r
+                    getCurrentSizeFromDefaultValue(str, al);\r
+                }\r
+            } else {\r
+                for (idx = 0; idx < this.skuData.size(); idx++) {\r
+                    String str = this.skuData.get(idx).value.value;\r
+                    getCurrentSizeFromDefaultValue(str, al);\r
+                }\r
+            }\r
+        }\r
+        \r
+        return al;\r
+    }\r
 \r
     /**\r
        Get default value for a token, For HII type, HiiDefaultValue of default\r
@@ -552,8 +659,6 @@ public class Token {
         DynamicTokenValue dynamicData = getDefaultSku();\r
         if (hasDefaultValue()) {\r
             switch (dynamicData.type) {\r
-            case HII_TYPE:\r
-                return dynamicData.hiiDefaultValue;\r
             case DEFAULT_TYPE:\r
                 return dynamicData.value;\r
             }\r
@@ -571,13 +676,17 @@ public class Token {
         boolean           isInteger     = true;\r
         DynamicTokenValue dynamicValue  = null;\r
 \r
+        if (isSkuEnable()) {\r
+            return true;\r
+        }\r
+        \r
         if (this.isDynamicPCD) {\r
             dynamicValue = getDefaultSku();\r
             switch (dynamicValue.type) {\r
             case HII_TYPE:\r
-                return !isValidNullValue(dynamicValue.hiiDefaultValue);\r
+                return true;\r
             case VPD_TYPE:\r
-                return false;\r
+                return true;\r
             case DEFAULT_TYPE:\r
                 return !isValidNullValue(dynamicValue.value);\r
             }\r
@@ -587,15 +696,25 @@ public class Token {
     }\r
 \r
     public boolean isValidNullValue(String judgedValue) {\r
-        int         intValue;\r
+        String      subStr;\r
         BigInteger  bigIntValue;\r
 \r
         switch (datumType) {\r
         case UINT8:\r
         case UINT16:\r
         case UINT32:\r
-            intValue = Integer.decode(judgedValue);\r
-            if (intValue == 0) {\r
+            if (judgedValue.length() > 2) {\r
+                if ((judgedValue.charAt(0) == '0')        && \r
+                    ((judgedValue.charAt(1) == 'x') || (judgedValue.charAt(1) == 'X'))){\r
+                    subStr      = judgedValue.substring(2, judgedValue.length());\r
+                    bigIntValue = new BigInteger(subStr, 16);\r
+                } else {\r
+                    bigIntValue = new BigInteger(judgedValue);\r
+                }\r
+            } else {\r
+                bigIntValue = new BigInteger(judgedValue);\r
+            }\r
+            if (bigIntValue.bitCount() == 0) {\r
                 return true;\r
             }\r
             break;\r
@@ -637,7 +756,27 @@ public class Token {
         }\r
         return false;\r
     }\r
-\r
+    \r
+    public boolean isHiiDefaultValueUnicodeStringType() {\r
+        DynamicTokenValue dynamicData = getDefaultSku();\r
+        \r
+        if (dynamicData == null)\r
+            return false;\r
+        \r
+        return dynamicData.hiiDefaultValue.startsWith("L\"")\r
+                && dynamicData.hiiDefaultValue.endsWith("\"");\r
+    }\r
+    \r
+    public boolean isHiiDefaultValueASCIIStringType() {\r
+        DynamicTokenValue dynamicData = getDefaultSku();\r
+    \r
+        if (dynamicData == null)\r
+            return false;\r
+        \r
+        return dynamicData.hiiDefaultValue.startsWith("\"")\r
+        && dynamicData.hiiDefaultValue.endsWith("\"");\r
+    }\r
+    \r
     /**\r
        Judege whether current value is UNICODE string type.\r
        @return boolean\r
@@ -657,6 +796,39 @@ public class Token {
 \r
         return false;\r
     }\r
+    \r
+    public boolean isASCIIStringType () {\r
+        String str = getDynamicDefaultValue();\r
+\r
+        if (str == null) {\r
+            return false;\r
+        }\r
+\r
+        if (datumType == Token.DATUM_TYPE.POINTER &&\r
+            str.startsWith("\"") && \r
+            str.endsWith("\"")) {\r
+            return true;\r
+        }\r
+\r
+        return false;\r
+    }\r
+\r
+    public boolean isByteStreamType () {\r
+        String str = getDynamicDefaultValue();\r
+\r
+        if (str == null) {\r
+            return false;\r
+        }\r
+\r
+        if (datumType == Token.DATUM_TYPE.POINTER &&\r
+            str.startsWith("{") && \r
+            str.endsWith("}")) {\r
+            return true;\r
+        }\r
+\r
+        return false;\r
+        \r
+    }\r
 \r
     public String getStringTypeString () {                       \r
         return getDefaultSku().value.substring(2, getDefaultSku().value.length() - 1);\r