Make sure the PCD dxe service driver can handle the case where no PEIM is using any...
authorqwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 2 Jun 2006 05:28:18 +0000 (05:28 +0000)
committerqwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 2 Jun 2006 05:28:18 +0000 (05:28 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@388 6f19259b-4bc3-4df7-8a09-765794883524

EdkModulePkg/Universal/PCD/Dxe/Service.c
MdePkg/Library/BasePcdLibNull/PcdLib.c
MdePkg/Library/DxePcdLib/DxePcdLib.c
MdePkg/Library/PeiPcdLib/PeiPcdLib.c
Tools/Source/GenBuild/org/tianocore/build/pcd/action/CollectPCDAction.java

index e1aded7..bccd0a6 100644 (file)
@@ -282,13 +282,24 @@ BuildPcdDxeDataBase (
   ASSERT (mPcdDatabase != NULL);\r
 \r
   GuidHob = GetFirstGuidHob (&gPcdDataBaseHobGuid);\r
-  ASSERT (GuidHob != NULL);\r
 \r
-  PeiDatabase = (PEI_PCD_DATABASE *) GET_GUID_HOB_DATA (GuidHob);\r
-  //\r
-  // Copy PCD Entries refereneced in PEI phase to PCD DATABASE\r
-  //\r
-  CopyMem (&mPcdDatabase->PeiDb, PeiDatabase, sizeof (PEI_PCD_DATABASE));\r
+  if (GuidHob != NULL) {\r
+\r
+    //\r
+    // We will copy over the PEI phase's PCD Database.\r
+    // \r
+    // If no PEIMs use dynamic Pcd Entry, the Pcd Service PEIM\r
+    // should not be included at all. So the GuidHob could\r
+    // be NULL. If it is NULL, we just copy over the DXE Default\r
+    // Value to PCD Database.\r
+    //\r
+    \r
+    PeiDatabase = (PEI_PCD_DATABASE *) GET_GUID_HOB_DATA (GuidHob);\r
+    //\r
+    // Copy PCD Entries refereneced in PEI phase to PCD DATABASE\r
+    //\r
+    CopyMem (&mPcdDatabase->PeiDb, PeiDatabase, sizeof (PEI_PCD_DATABASE));\r
+  }\r
 \r
   //\r
   // Copy PCD Entries with default value to PCD DATABASE\r
index 7b8dc50..a4e0183 100644 (file)
@@ -723,8 +723,8 @@ LibPcdCancelCallback (
 PCD_TOKEN_NUMBER\r
 EFIAPI\r
 LibPcdGetNextToken (\r
-  IN CONST GUID             *Guid, OPTIONAL\r
-  IN OUT PCD_TOKEN_NUMBER   TokenNumber\r
+  IN CONST GUID               *Guid, OPTIONAL\r
+  IN       PCD_TOKEN_NUMBER   TokenNumber\r
   )\r
 {\r
   return 0;\r
index b4949d5..f3818a6 100644 (file)
@@ -837,7 +837,7 @@ PCD_TOKEN_NUMBER
 EFIAPI\r
 LibPcdGetNextToken (\r
   IN CONST GUID             *Guid, OPTIONAL\r
-  IN OUT PCD_TOKEN_NUMBER   TokenNumber\r
+  IN       PCD_TOKEN_NUMBER TokenNumber\r
   )\r
 {\r
   EFI_STATUS Status;\r
index 9000c85..8ef5205 100644 (file)
@@ -929,7 +929,7 @@ PCD_TOKEN_NUMBER
 EFIAPI\r
 LibPcdGetNextToken (\r
   IN CONST GUID             *Guid, OPTIONAL\r
-  IN OUT PCD_TOKEN_NUMBER   TokenNumber\r
+  IN       PCD_TOKEN_NUMBER TokenNumber\r
   )\r
 {\r
   EFI_STATUS Status;\r
index e10f325..1eb060b 100644 (file)
@@ -442,21 +442,18 @@ class LocalTokenNumberTable {
     private ArrayList<String>    alComment;\r
     private String               phase;\r
     private int                  len;\r
-    private int                   bodyStart;\r
-    private int                   bodyLineNum;\r
 \r
     public LocalTokenNumberTable (String phase) {\r
         this.phase = phase;\r
         al = new ArrayList<String>();\r
         alComment = new ArrayList<String>();\r
-        bodyStart = 0;\r
-        bodyLineNum = 0;\r
 \r
         len = 0;\r
     }\r
 \r
     public String getSizeMacro () {\r
-        return String.format(PcdDatabase.LocalTokenNumberTableSizeMacro, phase, getSize());\r
+       return String.format(PcdDatabase.LocalTokenNumberTableSizeMacro, phase, getSize())\r
+                       + String.format(PcdDatabase.LocalTokenNumberSizeMacro, phase, al.size());\r
     }\r
 \r
     public int getSize () {\r
@@ -476,7 +473,6 @@ class LocalTokenNumberTable {
 \r
         output.add("/* LocalTokenNumberTable */");\r
         output.add("{");\r
-        bodyStart = 2;\r
 \r
         if (al.size() == 0) {\r
             output.add("0");\r
@@ -498,8 +494,6 @@ class LocalTokenNumberTable {
 \r
         }\r
 \r
-        bodyLineNum = al.size();\r
-\r
         output.add("}");\r
 \r
         return output;\r
@@ -641,16 +635,17 @@ class PcdDatabase {
 \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];\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];\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
     public final static String ExTokenNumber                    = "#define %s_EX_TOKEN_NUMBER       %d\r\n";\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            %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 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