- generatePCDEmulatedArray(tokenArray);\r
-\r
- ActionMessage.debug(this,\r
- "PCD emulated driver's header: \r\n" + hAutoGenString + "\r\n"\r
- );\r
- ActionMessage.debug(this,\r
- "PCD emulated driver's C code: \r\n" + cAutoGenString + "\r\n"\r
- );\r
-\r
- }\r
-\r
- /**\r
- Generate unreference token definition string for PCD emulated string. \r
- \r
- Maybe some PCD token definition in FPD but not used by any module or library, we \r
- should also generate token definition in autoge.h/autogen.c, because maybe some\r
- driver loaded in shell will use this PCD. \r
-\r
- @param token The token who want be generated autogen string.\r
- \r
- **/\r
- private void generateUnReferencePcdAutogenString(Token token) {\r
- hAutoGenString += String.format("#define _PCD_TOKEN_%s 0x%016x\r\n", \r
- token.cName, token.tokenNumber);\r
- switch (token.pcdType) {\r
- case FEATURE_FLAG:\r
- hAutoGenString += String.format(\r
- "#define _PCD_VALUE_%s %s\r\n", \r
- token.cName, \r
- token.datum.toString()\r
- );\r
- hAutoGenString += String.format(\r
- "extern const BOOLEAN _gPcd_FixedAtBuild_%s;\r\n", \r
- token.cName\r
- );\r
- cAutoGenString += String.format(\r
- "GLOBAL_REMOVE_IF_UNREFERENCED const BOOLEAN _gPcd_FixedAtBuild_%s = _PCD_VALUE_%s;\r\n",\r
- token.cName,\r
- token.cName\r
- );\r
- hAutoGenString += String.format(\r
- "#define _PCD_MODE_%s_%s _PCD_VALUE_%s\r\n",\r
- Token.GetAutogenDefinedatumTypeString(token.datumType),\r
- token.cName,\r
- token.cName\r
- );\r
- break;\r
- case FIXED_AT_BUILD:\r
- hAutoGenString += String.format(\r
- "#define _PCD_VALUE_%s %s\r\n", \r
- token.cName, \r
- token.datum.toString()\r
- );\r
- hAutoGenString += String.format(\r
- "extern const %s _gPcd_FixedAtBuild_%s;\r\n",\r
- Token.getAutogendatumTypeString(token.datumType),\r
- token.cName\r
- );\r
- cAutoGenString += String.format(\r
- "GLOBAL_REMOVE_IF_UNREFERENCED const %s _gPcd_FixedAtBuild_%s = _PCD_VALUE_%s;\r\n",\r
- Token.getAutogendatumTypeString(token.datumType),\r
- token.cName,\r
- token.cName\r
- );\r
- hAutoGenString += String.format(\r
- "#define _PCD_MODE_%s_%s _PCD_VALUE_%s\r\n",\r
- Token.GetAutogenDefinedatumTypeString(token.datumType),\r
- token.cName,\r
- token.cName\r
- );\r
- break;\r
- case PATCHABLE_IN_MODULE:\r
- hAutoGenString += String.format(\r
- "#define _PCD_VALUE_%s %s\r\n", \r
- token.cName, \r
- token.datum.toString()\r
- );\r
- hAutoGenString += String.format(\r
- "extern %s _gPcd_BinaryPatch_%s;\r\n",\r
- Token.getAutogendatumTypeString(token.datumType),\r
- token.cName\r
- );\r
- cAutoGenString += String.format(\r
- "GLOBAL_REMOVE_IF_UNREFERENCED %s _gPcd_BinaryPatch_%s = _PCD_VALUE_%s;\r\n",\r
- Token.getAutogendatumTypeString(token.datumType),\r
- token.cName,\r
- token.cName\r
- );\r
- hAutoGenString += String.format(\r
- "#define _PCD_MODE_%s_%s _gPcd_BinaryPatch_%s\r\n",\r
- Token.GetAutogenDefinedatumTypeString(token.datumType),\r
- token.cName,\r
- token.cName\r
- );\r
- break;\r
- case DYNAMIC:\r
- hAutoGenString += String.format(\r
- "#define _PCD_MODE_%s_%s LibPcdGet%s(_PCD_TOKEN_%s)\r\n",\r
- Token.GetAutogenDefinedatumTypeString(token.datumType),\r
- token.cName,\r
- Token.getAutogenLibrarydatumTypeString(token.datumType),\r
- token.cName\r
- );\r
- break;\r
- case DYNAMIC_EX:\r
- break;\r
- default:\r
- ActionMessage.warning(this, \r
- "The PCD_TYPE setted by platform is unknown"\r
- );\r
- }\r
-\r
- hAutoGenString += "\r\n";\r
- cAutoGenString += "\r\n";\r
- }\r
- \r
- /**\r
- Generate PCDEmulated array in PCDEmulated driver for emulated runtime database.\r
- \r
- @param tokenArray All PCD token in memory database.\r
- \r
- @throws BuildActionException Unknown PCD_TYPE\r
- **/\r
- private void generatePCDEmulatedArray(Token[] tokenArray)\r
- throws BuildActionException {\r
- int index;\r
- Token token;\r
- String[] guidStrArray;\r
- String value;\r
-\r
- //\r
- // The value of String type of PCD entry maybe use byte array but not string direcly\r
- // such as {0x1, 0x2, 0x3}, and define PCD1_STRING_Value as L"string define here"\r
- // For this case, we should generate a string array to C output and use the address\r
- // of generated string array.\r
- //\r
- for(index = 0; index < tokenArray.length; index ++) {\r
- token = tokenArray[index];\r
-\r
- value = token.datum.toString();\r
- if(token.datumType == Token.DATUM_TYPE.POINTER) {\r
- if(!((value.charAt(0) == 'L' && value.charAt(1) == '"') ||(value.charAt(0) == '"'))) {\r
- cAutoGenString += String.format("UINT8 _mPcdArray%08x[] = %s;\r\n", \r
- index, \r
- value\r
- );\r
- }\r
- }\r