]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkModulePkg/Universal/PCD/Dxe/Service.c
1) Use FeatureFlag PcdPciBusHotplugDeviceSupport to merge LightPciLib.c with PcdLib.c.
[mirror_edk2.git] / EdkModulePkg / Universal / PCD / Dxe / Service.c
index f175b14db238635ddad4aca521671305c90a4cd4..a4b19878a59fd64bedac70ddb568549e21fad3c9 100644 (file)
@@ -1,5 +1,5 @@
 /** @file\r
-Private functions used by PCD DXE driver.s\r
+Private functions used by PCD DXE driver.\r
 \r
 Copyright (c) 2006, Intel Corporation\r
 All rights reserved. This program and the accompanying materials\r
@@ -17,11 +17,6 @@ Module Name: Service.c
 #include "Service.h"\r
 \r
 \r
-//\r
-// Build Tool will generate DXE_PCD_DB_INIT_VALUE in Autogen.h\r
-// Compression Algorithm will take care of the size optimization.\r
-//\r
-\r
 PCD_DATABASE * mPcdDatabase;\r
 \r
 LIST_ENTRY *mCallbackFnTable;\r
@@ -61,12 +56,20 @@ GetWorker (
 \r
   TmpTokenNumber = TokenNumber;\r
   \r
-  ASSERT (TokenNumber < PCD_TOTAL_TOKEN_NUMBER);\r
+  //\r
+  // PCD_TOTAL_TOKEN_NUMBER is a auto-generated constant.\r
+  // It could be zero. EBC compiler is very choosy. It may\r
+  // report warning. So we add 1 in each size of the \r
+  // comparison.\r
+  //\r
+  ASSERT (TokenNumber + 1 < PCD_TOTAL_TOKEN_NUMBER + 1);\r
 \r
   ASSERT ((GetSize == DxePcdGetSize (TokenNumber + 1)) || (GetSize == 0));\r
 \r
-  \r
-  IsPeiDb = (TokenNumber < PEI_LOCAL_TOKEN_NUMBER) ? TRUE : FALSE;\r
+  // EBC compiler is very choosy. It may report warning about comparison\r
+  // between UINTN and 0 . So we add 1 in each size of the \r
+  // comparison.\r
+  IsPeiDb = (TokenNumber + 1 < PEI_LOCAL_TOKEN_NUMBER + 1) ? TRUE : FALSE;\r
 \r
   LocalTokenNumberTable  = IsPeiDb ? mPcdDatabase->PeiDb.Init.LocalTokenNumberTable : \r
                                      mPcdDatabase->DxeDb.Init.LocalTokenNumberTable;\r
@@ -116,7 +119,7 @@ GetWorker (
           // It is a pointer type. So get the MaxSize reserved for\r
           // this PCD entry.\r
           //\r
-          GetPtrTypeSize (TokenNumber, &GetSize);\r
+          GetPtrTypeSize (TmpTokenNumber, &GetSize);\r
         }\r
         CopyMem (VaraiableDefaultBuffer, Data + VariableHead->Offset, GetSize);\r
         FreePool (Data);\r
@@ -252,14 +255,14 @@ DxeUnRegisterCallBackWorker (
 \r
 \r
 \r
-UINTN           \r
+EFI_STATUS\r
 ExGetNextTokeNumber (\r
-  IN CONST EFI_GUID         *Guid,\r
-  IN UINTN                  TokenNumber,\r
-  IN EFI_GUID               *GuidTable,\r
-  IN UINTN                  SizeOfGuidTable,\r
-  IN DYNAMICEX_MAPPING      *ExMapTable,\r
-  IN UINTN                  SizeOfExMapTable\r
+  IN      CONST EFI_GUID         *Guid,\r
+  IN OUT  UINTN                  *TokenNumber,\r
+  IN      EFI_GUID               *GuidTable,\r
+  IN      UINTN                  SizeOfGuidTable,\r
+  IN      DYNAMICEX_MAPPING      *ExMapTable,\r
+  IN      UINTN                  SizeOfExMapTable\r
   )\r
 {\r
   EFI_GUID         *MatchGuid;\r
@@ -269,7 +272,7 @@ ExGetNextTokeNumber (
 \r
   MatchGuid = ScanGuid (GuidTable, SizeOfGuidTable, Guid);\r
   if (MatchGuid == NULL) {\r
-    return PCD_INVALID_TOKEN_NUMBER;\r
+    return EFI_NOT_FOUND;\r
   }\r
 \r
   Found = FALSE;\r
@@ -282,35 +285,39 @@ ExGetNextTokeNumber (
   }\r
 \r
   if (Found) {\r
-    if (TokenNumber == PCD_INVALID_TOKEN_NUMBER) {\r
-      return ExMapTable[Idx].ExTokenNumber;\r
+    if (*TokenNumber == PCD_INVALID_TOKEN_NUMBER) {\r
+      *TokenNumber = ExMapTable[Idx].ExTokenNumber;\r
+      return EFI_SUCCESS;\r
     }\r
 \r
     for ( ; Idx < SizeOfExMapTable; Idx++) {\r
-      if (ExMapTable[Idx].ExTokenNumber == TokenNumber) {\r
+      if (ExMapTable[Idx].ExTokenNumber == *TokenNumber) {\r
         Idx++;\r
         if (Idx == SizeOfExMapTable) {\r
           //\r
           // Exceed the length of ExMap Table\r
           //\r
-          return PCD_INVALID_TOKEN_NUMBER;\r
+          *TokenNumber = PCD_INVALID_TOKEN_NUMBER;\r
+          return EFI_SUCCESS;\r
         } else if (ExMapTable[Idx].ExGuidIndex == GuidTableIdx) {\r
           //\r
           // Found the next match\r
           //\r
-          return ExMapTable[Idx].ExTokenNumber;\r
+          *TokenNumber = ExMapTable[Idx].ExTokenNumber;\r
+          return EFI_SUCCESS;\r
         } else {\r
           //\r
           // Guid has been changed. It is the next Token Space Guid.\r
           // We should flag no more TokenNumber.\r
           //\r
-          return PCD_INVALID_TOKEN_NUMBER;\r
+          *TokenNumber = PCD_INVALID_TOKEN_NUMBER;\r
+          return EFI_SUCCESS;\r
         }\r
       }\r
     }\r
   }\r
   \r
-  return PCD_INVALID_TOKEN_NUMBER;\r
+  return EFI_NOT_FOUND;\r
 }\r
   \r
 \r
@@ -329,7 +336,6 @@ BuildPcdDxeDataBase (
   ASSERT (mPcdDatabase != NULL);\r
 \r
   GuidHob = GetFirstGuidHob (&gPcdDataBaseHobGuid);\r
-\r
   if (GuidHob != NULL) {\r
 \r
     //\r
@@ -358,11 +364,12 @@ BuildPcdDxeDataBase (
   // Initialized the Callback Function Table\r
   //\r
 \r
-  if (PCD_TOTAL_TOKEN_NUMBER != 0) {\r
-    mCallbackFnTable = AllocateZeroPool (PCD_TOTAL_TOKEN_NUMBER * sizeof (LIST_ENTRY));\r
-  }\r
+  mCallbackFnTable = AllocateZeroPool (PCD_TOTAL_TOKEN_NUMBER * sizeof (LIST_ENTRY));\r
   \r
-  for (Idx = 0; Idx < PCD_TOTAL_TOKEN_NUMBER; Idx++) {\r
+  // EBC compiler is very choosy. It may report warning about comparison\r
+  // between UINTN and 0 . So we add 1 in each size of the \r
+  // comparison.\r
+  for (Idx = 0; Idx + 1 < PCD_TOTAL_TOKEN_NUMBER + 1; Idx++) {\r
     InitializeListHead (&mCallbackFnTable[Idx]);\r
   }\r
     \r
@@ -375,18 +382,18 @@ EFI_STATUS
 GetHiiVariable (\r
   IN  EFI_GUID      *VariableGuid,\r
   IN  UINT16        *VariableName,\r
-  OUT VOID          **VariableData,\r
+  OUT UINT8         **VariableData,\r
   OUT UINTN         *VariableSize\r
   )\r
 {\r
   UINTN      Size;\r
   EFI_STATUS Status;\r
-  VOID       *Buffer;\r
+  UINT8      *Buffer;\r
 \r
   Size = 0;\r
   Buffer = NULL;\r
   \r
-  Status = EfiGetVariable (\r
+  Status = gRT->GetVariable (\r
     (UINT16 *)VariableName,\r
     VariableGuid,\r
     NULL,\r
@@ -395,11 +402,11 @@ GetHiiVariable (
     );\r
   \r
   if (Status == EFI_BUFFER_TOO_SMALL) {\r
-    Buffer = AllocatePool (Size);\r
+    Buffer = (UINT8 *) AllocatePool (Size);\r
 \r
     ASSERT (Buffer != NULL);\r
 \r
-    Status = EfiGetVariable (\r
+    Status = gRT->GetVariable (\r
       VariableName,\r
       VariableGuid,\r
       NULL,\r
@@ -562,19 +569,29 @@ SetWorker (
 \r
   TmpTokenNumber = TokenNumber;\r
   \r
-  ASSERT (TokenNumber < PCD_TOTAL_TOKEN_NUMBER);\r
+  // EBC compiler is very choosy. It may report warning about comparison\r
+  // between UINTN and 0 . So we add 1 in each size of the \r
+  // comparison.\r
+\r
+  ASSERT (TokenNumber + 1 < PCD_TOTAL_TOKEN_NUMBER + 1);\r
 \r
   if (!PtrType) {\r
     ASSERT (*Size == DxePcdGetSize (TokenNumber + 1));\r
   }\r
   \r
-  IsPeiDb = (TokenNumber < PEI_LOCAL_TOKEN_NUMBER) ? TRUE : FALSE;\r
+  // EBC compiler is very choosy. It may report warning about comparison\r
+  // between UINTN and 0 . So we add 1 in each size of the \r
+  // comparison.\r
+  IsPeiDb = (TokenNumber + 1 < PEI_LOCAL_TOKEN_NUMBER + 1) ? TRUE : FALSE;\r
 \r
   LocalTokenNumberTable  = IsPeiDb ? mPcdDatabase->PeiDb.Init.LocalTokenNumberTable : \r
                                      mPcdDatabase->DxeDb.Init.LocalTokenNumberTable;\r
 \r
-  if ((TokenNumber < PEI_NEX_TOKEN_NUMBER) ||\r
-      (TokenNumber >= PEI_LOCAL_TOKEN_NUMBER || TokenNumber < (PEI_LOCAL_TOKEN_NUMBER + DXE_NEX_TOKEN_NUMBER))) {\r
+  // EBC compiler is very choosy. It may report warning about comparison\r
+  // between UINTN and 0 . So we add 1 in each size of the \r
+  // comparison.\r
+  if ((TokenNumber + 1 < PEI_NEX_TOKEN_NUMBER + 1) ||\r
+      (TokenNumber + 1 >= PEI_LOCAL_TOKEN_NUMBER + 1 || TokenNumber + 1 < (PEI_LOCAL_TOKEN_NUMBER + DXE_NEX_TOKEN_NUMBER + 1))) {\r
     InvokeCallbackOnSet (0, NULL, TokenNumber + 1, Data, *Size);\r
   }\r
 \r
@@ -607,7 +624,7 @@ SetWorker (
       return EFI_INVALID_PARAMETER;\r
     \r
     case PCD_TYPE_STRING:\r
-      if (SetPtrTypeSize (TokenNumber, Size)) {\r
+      if (SetPtrTypeSize (TmpTokenNumber, Size)) {\r
         CopyMem (&StringTable[*((UINT16 *)InternalData)], Data, *Size);\r
         return EFI_SUCCESS;\r
       } else {\r
@@ -616,7 +633,7 @@ SetWorker (
 \r
     case PCD_TYPE_HII:\r
       if (PtrType) {\r
-        if (!SetPtrTypeSize (TokenNumber, Size)) {\r
+        if (!SetPtrTypeSize (TmpTokenNumber, Size)) {\r
           return EFI_INVALID_PARAMETER;\r
         }\r
       }\r
@@ -639,13 +656,9 @@ SetWorker (
         return Status;\r
       }\r
       \r
-      //\r
-      // Bug Bug: Please implement this\r
-      //\r
-\r
     case PCD_TYPE_DATA:\r
       if (PtrType) {\r
-        if (SetPtrTypeSize (TokenNumber, Size)) {\r
+        if (SetPtrTypeSize (TmpTokenNumber, Size)) {\r
           CopyMem (InternalData, Data, *Size);\r
           return EFI_SUCCESS;\r
         } else {\r
@@ -751,10 +764,10 @@ SetHiiVariable (
 \r
   Size = 0;\r
 \r
-  Status = EfiGetVariable (\r
+  Status = gRT->GetVariable (\r
     (UINT16 *)VariableName,\r
     VariableGuid,\r
-    &Attribute,\r
+    NULL,\r
     &Size,\r
     NULL\r
     );\r
@@ -765,7 +778,7 @@ SetHiiVariable (
 \r
     ASSERT (Buffer != NULL);\r
 \r
-    Status = EfiGetVariable (\r
+    Status = gRT->GetVariable (\r
       VariableName,\r
       VariableGuid,\r
       &Attribute,\r
@@ -777,7 +790,7 @@ SetHiiVariable (
 \r
     CopyMem ((UINT8 *)Buffer + Offset, Data, DataSize);\r
 \r
-    Status = EfiSetVariable (\r
+    Status = gRT->SetVariable (\r
               VariableName,\r
               VariableGuid,\r
               Attribute,\r
@@ -979,7 +992,10 @@ GetPtrTypeSize (
   BOOLEAN     IsPeiDb;\r
   UINT32      *LocalTokenNumberTable;\r
 \r
-  IsPeiDb = (BOOLEAN) (LocalTokenNumberTableIdx < PEI_LOCAL_TOKEN_NUMBER);\r
+  // EBC compiler is very choosy. It may report warning about comparison\r
+  // between UINTN and 0 . So we add 1 in each size of the \r
+  // comparison.\r
+  IsPeiDb = (BOOLEAN) (LocalTokenNumberTableIdx + 1 < PEI_LOCAL_TOKEN_NUMBER + 1);\r
 \r
 \r
   if (IsPeiDb) {\r
@@ -1051,7 +1067,10 @@ SetPtrTypeSize (
   BOOLEAN     IsPeiDb;\r
   UINT32      *LocalTokenNumberTable;\r
 \r
-  IsPeiDb = (BOOLEAN) (LocalTokenNumberTableIdx < PEI_LOCAL_TOKEN_NUMBER);\r
+  // EBC compiler is very choosy. It may report warning about comparison\r
+  // between UINTN and 0 . So we add 1 in each size of the \r
+  // comparison.\r
+  IsPeiDb = (BOOLEAN) (LocalTokenNumberTableIdx + 1 < PEI_LOCAL_TOKEN_NUMBER + 1);\r
 \r
   if (IsPeiDb) {\r
     LocalTokenNumberTable = mPcdDatabase->PeiDb.Init.LocalTokenNumberTable;\r