]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/PCD/Pei/Service.c
Code scrub for PCD PEIM.
[mirror_edk2.git] / MdeModulePkg / Universal / PCD / Pei / Service.c
index 16a5cc848928c48f91a51fbcbf39e6b5f205416d..fddab6be580f71768065fac5cb053c261cd79895 100644 (file)
@@ -21,7 +21,7 @@ Module Name: Service.c
   The function registers the CallBackOnSet fucntion\r
   according to TokenNumber and EFI_GUID space.\r
 \r
-  @param  TokenNumber       The token number.\r
+  @param  ExTokenNumber       The token number.\r
   @param  Guid              The GUID space.\r
   @param  CallBackFunction  The Callback function to be registered.\r
   @param  Register          To register or unregister the callback function.\r
@@ -30,7 +30,7 @@ Module Name: Service.c
   @retval EFI_NOT_FOUND If the PCD Entry is not found according to Token Number and GUID space.\r
   @retval EFI_OUT_OF_RESOURCES If the callback function can't be registered because there is not free\r
                                 slot left in the CallbackFnTable.\r
---*/\r
+**/\r
 EFI_STATUS\r
 PeiRegisterCallBackWorker (\r
   IN  UINTN                       ExTokenNumber,\r
@@ -103,16 +103,9 @@ PeiRegisterCallBackWorker (
 \r
 }\r
 \r
-\r
-\r
-\r
 /**\r
   The function builds the PCD database.\r
-\r
-  @param VOID\r
-\r
-  @retval VOID\r
---*/\r
+**/\r
 VOID\r
 BuildPcdDatabase (\r
   VOID\r
@@ -137,12 +130,8 @@ BuildPcdDatabase (
   CallbackFnTable = BuildGuidHob (&gPcdPeiCallbackFnTableHobGuid, SizeOfCallbackFnTable);\r
   \r
   ZeroMem (CallbackFnTable, SizeOfCallbackFnTable);\r
-  \r
-  return;\r
 }\r
 \r
-\r
-\r
 /**\r
   The function is provided by PCD PEIM and PCD DXE driver to\r
   do the work of reading a HII variable from variable service.\r
@@ -154,8 +143,7 @@ BuildPcdDatabase (
 \r
   @retval EFI_SUCCESS         Operation successful.\r
   @retval EFI_NOT_FOUND         Variablel not found.\r
---*/\r
-STATIC\r
+**/\r
 EFI_STATUS\r
 GetHiiVariable (\r
   IN  CONST EFI_GUID      *VariableGuid,\r
@@ -201,13 +189,20 @@ GetHiiVariable (
     *VariableData = Buffer;\r
 \r
     return EFI_SUCCESS;\r
-  } else {\r
-    return EFI_NOT_FOUND;\r
-  }\r
+  } \r
 \r
+  return EFI_NOT_FOUND;\r
 }\r
 \r
-STATIC\r
+/**\r
+  Find the local token number according to system SKU ID.\r
+\r
+  @param LocalTokenNumber PCD token number\r
+  @param Size             The size of PCD entry.\r
+\r
+  @return Token number according to system SKU ID.\r
+\r
+**/\r
 UINT32\r
 GetSkuEnabledTokenNumber (\r
   UINT32 LocalTokenNumber,\r
@@ -217,7 +212,7 @@ GetSkuEnabledTokenNumber (
   PEI_PCD_DATABASE      *PeiPcdDb;\r
   SKU_HEAD              *SkuHead;\r
   SKU_ID                *SkuIdTable;\r
-  INTN                  i;\r
+  INTN                  Index;\r
   UINT8                 *Value;\r
 \r
   PeiPcdDb = GetPcdDatabase ();\r
@@ -228,27 +223,27 @@ GetSkuEnabledTokenNumber (
   Value       = (UINT8 *) ((UINT8 *)PeiPcdDb + (SkuHead->SkuDataStartOffset));\r
   SkuIdTable  = (SKU_ID *) ((UINT8 *)PeiPcdDb + (SkuHead->SkuIdTableOffset));\r
         \r
-  for (i = 0; i < SkuIdTable[0]; i++) {\r
-    if (PeiPcdDb->Init.SystemSkuId == SkuIdTable[i + 1]) {\r
+  for (Index = 0; Index < SkuIdTable[0]; Index++) {\r
+    if (PeiPcdDb->Init.SystemSkuId == SkuIdTable[Index + 1]) {\r
       break;\r
     }\r
   }\r
 \r
   switch (LocalTokenNumber & PCD_TYPE_ALL_SET) {\r
     case PCD_TYPE_VPD:\r
-      Value = (UINT8 *) &(((VPD_HEAD *) Value)[i]);\r
+      Value = (UINT8 *) &(((VPD_HEAD *) Value)[Index]);\r
       return (UINT32) ((Value - (UINT8 *) PeiPcdDb) | PCD_TYPE_VPD);\r
 \r
     case PCD_TYPE_HII:\r
-      Value = (UINT8 *) &(((VARIABLE_HEAD *) Value)[i]);\r
+      Value = (UINT8 *) &(((VARIABLE_HEAD *) Value)[Index]);\r
       return (UINT32) ((Value - (UINT8 *) PeiPcdDb) | PCD_TYPE_HII);\r
       \r
     case PCD_TYPE_STRING:\r
-      Value = (UINT8 *) &(((STRING_HEAD *) Value)[i]);\r
+      Value = (UINT8 *) &(((STRING_HEAD *) Value)[Index]);\r
       return (UINT32) ((Value - (UINT8 *) PeiPcdDb) | PCD_TYPE_STRING);\r
 \r
     case PCD_TYPE_DATA:\r
-      Value += Size * i;\r
+      Value += Size * Index;\r
       return (UINT32) (Value - (UINT8 *) PeiPcdDb);\r
 \r
     default:\r
@@ -258,12 +253,21 @@ GetSkuEnabledTokenNumber (
   ASSERT (FALSE);\r
 \r
   return 0;\r
-  \r
 }\r
 \r
+/**\r
+  Invoke the callback function when dynamic PCD entry was set, if this PCD entry \r
+  has registered callback function.\r
 \r
+  @param ExTokenNumber   DynamicEx PCD's token number, if this PCD entry is dyanmicEx\r
+                         type PCD.\r
+  @param Guid            DynamicEx PCD's guid, if this PCD entry is dynamicEx type\r
+                         PCD.\r
+  @param TokenNumber     PCD token number generated by build tools.\r
+  @param Data            Value want to be set for this PCD entry\r
+  @param Size            The size of value\r
 \r
-STATIC\r
+**/\r
 VOID\r
 InvokeCallbackOnSet (\r
   UINTN             ExTokenNumber,\r
@@ -307,11 +311,18 @@ InvokeCallbackOnSet (
                           );\r
     }\r
   }\r
-  \r
 }\r
 \r
+/**\r
+  Wrapper function for setting non-pointer type value for a PCD entry.\r
+\r
+  @param TokenNumber     Pcd token number autogenerated by build tools.\r
+  @param Data            Value want to be set for PCD entry\r
+  @param Size            Size of value.\r
 \r
+  @return status of SetWorker.\r
 \r
+**/\r
 EFI_STATUS\r
 SetValueWorker (\r
   IN          UINTN              TokenNumber,\r
@@ -322,12 +333,25 @@ SetValueWorker (
   return SetWorker (TokenNumber, Data, &Size, FALSE);\r
 }\r
 \r
-\r
-\r
+/**\r
+  Set value for an PCD entry\r
+\r
+  @param TokenNumber     Pcd token number autogenerated by build tools.\r
+  @param Data            Value want to be set for PCD entry\r
+  @param Size            Size of value.\r
+  @param PtrType         If TRUE, the type of PCD entry's value is Pointer.\r
+                         If False, the type of PCD entry's value is not Pointer.\r
+\r
+  @retval EFI_INVALID_PARAMETER  If this PCD type is VPD, VPD PCD can not be set.\r
+  @retval EFI_INVALID_PARAMETER  If Size can not be set to size table.\r
+  @retval EFI_NOT_FOUND          If value type of PCD entry is intergrate, but not in\r
+                                 range of UINT8, UINT16, UINT32, UINT64\r
+  @retval EFI_NOT_FOUND          Can not find the PCD type according to token number.                                \r
+**/\r
 EFI_STATUS\r
 SetWorker (\r
   IN          UINTN               TokenNumber,\r
-  IN OUT      VOID                *Data,\r
+  IN          VOID                *Data,\r
   IN OUT      UINTN               *Size,\r
   IN          BOOLEAN             PtrType\r
   )\r
@@ -442,8 +466,17 @@ SetWorker (
 \r
 }\r
 \r
+/**\r
+  Wrapper function for set PCD value for non-Pointer type dynamic-ex PCD.\r
 \r
+  @param ExTokenNumber   Token number for dynamic-ex PCD.\r
+  @param Guid            Token space guid for dynamic-ex PCD.\r
+  @param Data            Value want to be set.\r
+  @param SetSize         The size of value.\r
 \r
+  @return status of ExSetWorker().\r
+\r
+**/\r
 EFI_STATUS\r
 ExSetValueWorker (\r
   IN          UINTN                ExTokenNumber,\r
@@ -455,8 +488,24 @@ ExSetValueWorker (
   return ExSetWorker (ExTokenNumber, Guid, Data, &Size, FALSE);\r
 }\r
 \r
+/**\r
+  Set value for a dynamic PCD entry.\r
+  \r
+  This routine find the local token number according to dynamic-ex PCD's token \r
+  space guid and token number firstly, and invoke callback function if this PCD\r
+  entry registered callback function. Finally, invoken general SetWorker to set\r
+  PCD value.\r
+  \r
+  @param ExTokenNumber   Dynamic-ex PCD token number.\r
+  @param Guid            Token space guid for dynamic-ex PCD.\r
+  @param Data            PCD value want to be set\r
+  @param SetSize         Size of value.\r
+  @param PtrType         If TRUE, this PCD entry is pointer type.\r
+                         If FALSE, this PCD entry is not pointer type.\r
 \r
+  @return status of SetWorker().\r
 \r
+**/\r
 EFI_STATUS\r
 ExSetWorker (\r
   IN            UINTN                ExTokenNumber,\r
@@ -480,9 +529,16 @@ ExSetWorker (
 \r
 }\r
 \r
+/**\r
+  Wrapper function for get PCD value for dynamic-ex PCD.\r
 \r
+  @param Guid            Token space guid for dynamic-ex PCD.\r
+  @param ExTokenNumber   Token number for dyanmic-ex PCD.\r
+  @param GetSize         The size of dynamic-ex PCD value.\r
 \r
+  @return PCD entry in PCD database.\r
 \r
+**/\r
 VOID *\r
 ExGetWorker (\r
   IN CONST  EFI_GUID  *Guid,\r
@@ -498,13 +554,24 @@ ExGetWorker (
   return GetWorker (GetExPcdTokenNumber (Guid, ExTokenNumber), GetSize);\r
 }\r
 \r
+/**\r
+  Get the PCD entry pointer in PCD database.\r
+  \r
+  This routine will visit PCD database to find the PCD entry according to given\r
+  token number. The given token number is autogened by build tools and it will be \r
+  translated to local token number. Local token number contains PCD's type and \r
+  offset of PCD entry in PCD database.\r
 \r
+  @param TokenNumber     Token's number, it is autogened by build tools\r
+  @param GetSize         The size of token's value\r
 \r
+  @return PCD entry pointer in PCD database\r
 \r
+**/\r
 VOID *\r
 GetWorker (\r
-  UINTN               TokenNumber,\r
-  UINTN               GetSize\r
+  IN UINTN               TokenNumber,\r
+  IN UINTN               GetSize\r
   )\r
 {\r
   UINT32              Offset;\r
@@ -596,15 +663,26 @@ GetWorker (
   \r
 }\r
 \r
+/**\r
+  Get local token number according to dynamic-ex PCD's {token space guid:token number}\r
+\r
+  A dynamic-ex type PCD, developer must provide pair of token space guid: token number\r
+  in DEC file. PCD database maintain a mapping table that translate pair of {token\r
+  space guid: token number} to local token number.\r
+  \r
+  @param Guid            Token space guid for dynamic-ex PCD entry.\r
+  @param ExTokenNumber   EDES_TODO: Add parameter description\r
 \r
+  @return local token number for dynamic-ex PCD.\r
 \r
+**/\r
 UINTN           \r
 GetExPcdTokenNumber (\r
   IN CONST EFI_GUID             *Guid,\r
   IN UINTN                      ExTokenNumber\r
   )\r
 {\r
-  UINT32              i;\r
+  UINT32              Index;\r
   DYNAMICEX_MAPPING   *ExMap;\r
   EFI_GUID            *GuidTable;\r
   EFI_GUID            *MatchGuid;\r
@@ -625,10 +703,10 @@ GetExPcdTokenNumber (
   \r
   MatchGuidIdx = MatchGuid - GuidTable;\r
   \r
-  for (i = 0; i < PEI_EXMAPPING_TABLE_SIZE; i++) {\r
-    if ((ExTokenNumber == ExMap[i].ExTokenNumber) && \r
-        (MatchGuidIdx == ExMap[i].ExGuidIndex)) {\r
-      return ExMap[i].LocalTokenNumber;\r
+  for (Index = 0; Index < PEI_EXMAPPING_TABLE_SIZE; Index++) {\r
+    if ((ExTokenNumber == ExMap[Index].ExTokenNumber) && \r
+        (MatchGuidIdx == ExMap[Index].ExGuidIndex)) {\r
+      return ExMap[Index].LocalTokenNumber;\r
     }\r
   }\r
   \r
@@ -637,8 +715,12 @@ GetExPcdTokenNumber (
   return 0;\r
 }\r
 \r
+/**\r
+  Get PCD database from GUID HOB in PEI phase.\r
 \r
+  @return Pointer to PCD database.\r
 \r
+**/\r
 PEI_PCD_DATABASE *\r
 GetPcdDatabase (\r
   VOID\r
@@ -652,8 +734,15 @@ GetPcdDatabase (
   return (PEI_PCD_DATABASE *) GET_GUID_HOB_DATA (GuidHob);\r
 }\r
 \r
+/**\r
+  Get SKU ID tabble from PCD database.\r
+\r
+  @param LocalTokenNumberTableIdx Index of local token number in token number table.\r
+  @param Database                 PCD database.\r
 \r
+  @return Pointer to SKU ID array table\r
 \r
+**/\r
 SKU_ID *\r
 GetSkuIdArray (\r
   IN    UINTN             LocalTokenNumberTableIdx,\r
@@ -673,30 +762,37 @@ GetSkuIdArray (
   \r
 }\r
 \r
+/**\r
+  Get index of PCD entry in size table.\r
+\r
+  @param LocalTokenNumberTableIdx Index of this PCD in local token number table.\r
+  @param Database                 Pointer to PCD database in PEI phase.\r
 \r
+  @return index of PCD entry in size table.\r
 \r
+**/\r
 UINTN\r
 GetSizeTableIndex (\r
   IN    UINTN             LocalTokenNumberTableIdx,\r
   IN    PEI_PCD_DATABASE  *Database\r
   )\r
 {\r
-  UINTN       i;\r
+  UINTN       Index;\r
   UINTN        SizeTableIdx;\r
   UINTN       LocalTokenNumber;\r
   SKU_ID      *SkuIdTable;\r
   \r
   SizeTableIdx = 0;\r
 \r
-  for (i=0; i<LocalTokenNumberTableIdx; i++) {\r
-    LocalTokenNumber = Database->Init.LocalTokenNumberTable[i];\r
+  for (Index=0; Index<LocalTokenNumberTableIdx; Index++) {\r
+    LocalTokenNumber = Database->Init.LocalTokenNumberTable[Index];\r
 \r
     if ((LocalTokenNumber & PCD_DATUM_TYPE_ALL_SET) == PCD_DATUM_TYPE_POINTER) {\r
       //\r
       // SizeTable only contain record for PCD_DATUM_TYPE_POINTER type \r
       // PCD entry.\r
       //\r
-      if (LocalTokenNumber & PCD_TYPE_VPD) {\r
+      if ((LocalTokenNumber & PCD_TYPE_VPD) != 0) {\r
           //\r
           // We have only one entry for VPD enabled PCD entry:\r
           // 1) MAX Size.\r
@@ -717,7 +813,7 @@ GetSizeTableIndex (
           // 1) MAX SIZE\r
           // 2) Current Size for each SKU_ID (It is equal to MaxSku).\r
           //\r
-          SkuIdTable = GetSkuIdArray (i, Database);\r
+          SkuIdTable = GetSkuIdArray (Index, Database);\r
           SizeTableIdx += (UINTN)*SkuIdTable + 1;\r
         }\r
       }\r