]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/GenBuild/org/tianocore/build/pcd/entity/Token.java
Add in support for MaxSize and CurrentSize for PCD entry.
[mirror_edk2.git] / Tools / Source / GenBuild / org / tianocore / build / pcd / entity / Token.java
index 9a54a3e579bb14ac8240463baa8bc252a800e834..94266cda36ce1151d40480928186413cc5e50e6f 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
@@ -68,12 +67,12 @@ public class Token {
     /// 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 int              dynamicExTokenNumber;\r
+    public long              dynamicExTokenNumber;\r
 \r
     ///\r
     /// All supported PCD type, this value can be retrieved from SPD\r
@@ -164,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
@@ -194,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
@@ -471,6 +495,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
@@ -545,6 +570,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
@@ -557,8 +658,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
@@ -576,13 +675,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
@@ -592,7 +695,6 @@ public class Token {
     }\r
 \r
     public boolean isValidNullValue(String judgedValue) {\r
-        int         intValue;\r
         String      subStr;\r
         BigInteger  bigIntValue;\r
 \r
@@ -653,7 +755,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
@@ -673,6 +795,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