## @file
# PCD PEIM produces PCD database to manage all dynamic PCD in PEI phase and install Pcd Ppi service.
#
# This version PCD PEIM depends on the external PCD database binary file, not built in PCD data base. 
# There are two PCD PPIs as follows:
#   1) PCD_PPI 
#      It is EDKII implementation which support Dynamic/DynamicEx Pcds.
#   2) EFI_PEI_PCD_PPI
#      It is defined by PI specification 1.2, Vol 3 which only support dynamicEx 
#      type Pcd.
# For dynamicEx type PCD, it is compatible between PCD_PPI and EFI_PEI_PCD_PPI.
# PCD PEIM driver will produce above two PPIs at same time.
#
# PCD database is generated as the separate binary image at build time. The binary image 
# will be intergrated into Firmware volume together with PCD driver. 
#
# ////////////////////////////////////////////////////////////////////////////////
# //                                                                            //
# //                      Introduction of PCD database                          //
# //                                                                            //
# ////////////////////////////////////////////////////////////////////////////////
#
# 1, Introduction
#    PCD database hold all dynamic type PCD information. The structure of PEI PCD 
#    database is generated by build tools according to dynamic PCD usage for 
#    specified platform.
#    
# 2, Dynamic Type PCD
#    Dynamic type PCD is used for the configuration/setting which value is determined
#    dynamic. In contrast, the value of static type PCD (FeatureFlag, FixedPcd, 
#    PatchablePcd) is fixed in final generated FD image in build time. 
#        
#    2.1 The "dynamic" determination means one of below cases:
#      a) The PCD setting value is produced by someone driver and consumed by 
#         other driver in execution time.
#      b) The PCD setting value is set/get by user from FrontPage.
#      c) The PCD setting value is produced by platform OEM vendor in specified area.
#    
#    2.2 According to module distribution way, dynamic PCD could be classfied as:
#      a) Dynamic:
#         If module is released in source code and will be built with platform 
#         DSC, the dynamic PCD used by this module can be accessed as:
#                 PcdGetxx(PcdSampleDynamicPcd); 
#         In building platform, build tools will translate PcdSampleDynamicPcd to
#         pair of {Token Space Guid: Token Number} for this PCD. 
#      b) DynamicEx:
#         If module is release as binary and will not pariticpate platform building,
#         the dynamic PCD used by this module need be accessed as:
#               PcdGetxxEx(gEfiMyTokenspaceGuid, PcdSampleDynamicPcd)
#         Developer need explicity gives {Token Space Guid:Token Number} as parameter
#         in writting source code.
#         
#    2.3 According to PCD value's storage method, dynamic PCD could be classfied as:
#      a) Default Storage: 
#         - The PCD value is stored in PCD database maintained by PCD driver in boot 
#           time memory.
#         - This type is used for communication between PEIM/DXE driver, DXE/DXE 
#           driver. But all set/get value will be losted after boot-time memory 
#           is turn off.
#         - [PcdsDynamicDefault] is used as section name for this type PCD in 
#           platform DSC file. [PcdsDynamicExDefault] is used for dynamicEx type PCD.
#         
#      b) Variable Storage: 
#         - The PCD value is stored in variable area. 
#         - As default storage type, this type PCD could be used for PEI/DXE driver
#           communication. But beside it, this type PCD could also be used to store 
#           the value associate with a HII setting via variable interface.
#         - In PEI phase, the PCD value could only be got but can not be set due 
#           to variable area is readonly.
#         - [PcdsDynamicHii] is used as section name for this type PCD in platform 
#           DSC file. [PcdsDynamicExHii] is for dynamicEx type PCD.
#           
#      c) OEM specificed storage area:
#         - The PCD value is stored in OEM specified area which base address is 
#           specified by a FixedAtBuild PCD setting - PcdVpdBaseAddress.
#         - The area is read only for PEI and DXE phase.
#         - [PcdsDynamicVpd] is used as section name for this type PCD in platform 
#           DSC file. [PcdsDynamicExVpd] is for dynamicex type PCD.
#      
#    2.4 When and how to use dynamic PCD
#      Module developer do not care the used PCD is dynamic or static when writting
#      source code/INF. Dynamic PCD and dynamic type is pointed by platform integrator 
#      in platform DSC file. Please ref section 2.3 to get matching between dynamic
#      PCD type and section name in DSC file.
#    
# 3, PCD database:
#    Although dynamic PCD could be in different storage type as above description, 
#    but the basic information and default value for all dynamic PCD is hold
#    by PCD database maintained by PEI/DXE driver.
#    
#    As the whole EFI BIOS boot path is divided into PEI/DXE phase, the PCD database
#    also is divided into Pei/Dxe database maintaied by PcdPeim/PcdDxe driver separatly.
#    To make PcdPeim's driver image smaller, PEI PCD database only hold all dynamic
#    PCD information used in PEI phase or use in both PEI/DXE phase. And DXE PCD
#    database contains all PCDs used in PEI/DXE phase in memory.
#    
#    Build tool will generate PCD database into the separate binary file for 
#    PEI/DXE PCD driver according to dynamic PCD section in platform DSC file. 
#    
#    3.1 PcdPeim and PcdDxe
#      PEI PCD database is maintained by PcdPeim driver run from flash. PcdPeim driver
#      build guid hob in temporary memory and copy the binary data base from flash 
#      to temporary memory for PEI PCD database. 
#      DXE PCD database is maintained by PcdDxe driver.At entry point of PcdDxe driver,
#      a new PCD database is allocated in boot-time memory which including all
#      PEI PCD and DXE PCD entry.
#      
#      Pcd driver should run as early as possible before any other driver access
#      dynamic PCD's value. PEI/DXE "Apriori File" mechanism make it possible by
#      making PcdPeim/PcdDxe as first dispatching driver in PEI/DXE phase.
#      
#    3.2 Token space Guid/Token number, Platform token, Local token number
#           Dynamic PCD
#          +-----------+               +---------+
#          |TokenSpace |               |Platform |
#          |   Guid    |  build tool   | Token   |
#          |    +      +-------------->| Number  |
#          |  Token    |               +---------+`._
#          |  Number   |                             `.
#          +-----------+                               `.  +------+
#                                                        `-|Local |
#                                                          |Token |
#                               DynamicEx PCD            ,-|Number|
#                               +-----------+         ,-'  +------+
#                               |TokenSpace |      ,-'
#                               |   Guid    |  _,-'
#                               |    +      +.'
#                               |  Token    |
#                               |  Number   |
#                               +-----------+
#    
#    
#      3.2.1 Pair of Token space guid + Token number
#        Any type PCD is identified by pair of "TokenSpaceGuid + TokeNumber". But it
#        is not easy maintained by PCD driver, and hashed token number will make 
#        searching slowly. 
#
#      3.2.2 Platform Token Number
#        "Platform token number" concept is introduced for mapping to a pair of 
#        "TokenSpaceGuid + TokenNumber". The platform token number is generated by 
#        build tool in autogen.h and all of them are continual in a platform scope 
#        started from 1.(0 meaning invalid internal token number)
#        With auto-generated "platform token number", PcdGet(PcdSampleDynamicPcd)
#        in source code is translated to LibPcdGet(_PCD_TOKEN_PcdSampleDynamicPcd) 
#        in autogen.h.
#        Notes: The mapping between pair of "tokenspace guid + token number" and
#        "internal token number" need build tool establish, so "platform token number"
#        mechanism is not suitable for binary module which use DynamicEx type PCD.
#        To access a dynamicEx type PCD, pair of "token space guid/token number" all need
#        to be specificed for PcdSet/PcdGet accessing macro.
#      
#        Platform Token Number is started from 1, and inceased continuous. From whole 
#        platform scope, there are two zones: PEI Zone and DXE Zone
#                  |                      Platform Token Number
#        ----------|----------------------------------------------------------------
#        PEI Zone: |            1                 ~  PEI_LOCAL_TOKEN_NUMBER
#        DXE Zone: | (PEI_LOCAL_TOKEN_NUMBER + 1) ~ (PEI_LOCAL_TOKEN_NUMBER + DXE_LOCAL_TOKEN_NUMBER)
#        
#      3.2.3 Local Token Number
#        To fast searching a PCD entry in PCD database, PCD driver translate 
#        platform token number to local token number via a mapping table.
#        For binary DynamicEx type PCD, there is a another mapping table to translate
#        "token space guid + token number" to local token number directly.
#        Local token number is identifier for all internal interface in PCD PEI/DXE
#        driver.
#        
#        A local token number is a 32-bit value in following meaning:
#         32 ------------- 28 ---------- 24 -------- 0
#          | PCD type mask  | Datum Type  |  Offset  |
#          +-----------------------------------------+
#        where:
#          PCd type mask: indicate Pcd type from following macro:
#                         PCD_TYPE_DATA
#                         PCD_TYPE_HII
#                         PCD_TYPE_VPD
#                         PCD_TYPE_SKU_ENABLED
#                         PCD_TYPE_STRING
#          Datum Type   : indicate PCD vaue type from following macro:
#                         PCD_DATUM_TYPE_POINTER
#                         PCD_DATUM_TYPE_UINT8
#                         PCD_DATUM_TYPE_UINT16
#                         PCD_DATUM_TYPE_UINT32
#                         PCD_DATUM_TYPE_UINT64
#          Offset      : indicate the related offset of PCD value in PCD database array.
#       Based on local token number, PCD driver could fast determine PCD type, value
#       type and get PCD entry from PCD database.
#       
#    3.3 PCD Database binary file
#      PCD Database binary file will be created at build time as the standalone binary image. 
#      To understand the binary image layout, PCD Database C structure is still generated 
#      as comments by build tools in PCD driver's autogen.h/
#      autogen.c file. In generated C structure, following information is stored:
#      - ExMapTable: This table is used translate a binary dynamicex type PCD's 
#                    "tokenguid + token" to local token number.
#      - LocalTokenNumberTable:
#                    This table stores all local token number in array, use "Internal
#                    token number" as array index to get PCD entry's offset fastly.
#      - SizeTable:  This table stores the size information for all PCD entry.
#      - GuidTable:  This table stores guid value for DynamicEx's token space,
#                    HII type PCD's variable GUID.
#      - SkuIdTable: TBD
#      - SystemSkuId: TBD
#      - PCD value structure:  
#                    Every PCD has a value record in PCD database. For different
#                    datum type PCD has different record structure which will be 
#                    introduced in 3.3.1
#      
#      In a PCD database structure, there are two major area: Init and UnInit. 
#      Init area is use stored above PCD internal structure such as ExMapTable, 
#      LocalTokenNumberTable etc and the (default) value of PCD which has default 
#      value specified in platform DSC file.
#      Unint area is used stored the value of PCD which has no default value in
#      platform DSC file, the value of NULL, 0 specified in platform DSC file can
#      be seemed as "no default value".
#      
#      3.3.1 Simple Sample PCD Database C Structure
#        A general sample of PCD database structue is as follows:
#        typedef struct _PCD_DATABASE {
#          typedef struct _PCD_DATABASE_INIT {
#            //===== Following is PCD database internal maintain structures
#            DYNAMICEX_MAPPING ExMapTable[PEI_EXMAPPING_TABLE_SIZE];
#            UINT32            LocalTokenNumberTable[PEI_LOCAL_TOKEN_NUMBER_TABLE_SIZE];
#            GUID              GuidTable[PEI_GUID_TABLE_SIZE];
#            SIZE_INFO         SizeTable[PEI_SIZE_TABLE_SIZE];
#            UINT8             SkuIdTable[PEI_SKUID_TABLE_SIZE];
#            SKU_ID            SystemSkuId;
#            
#            //===== Following is value structure for PCD with default value
#            ....
#            ....
#            ....
#          } Init;
#          typedef struct _PCD_DATABSE_UNINIT {
#            //==== Following is value structure for PCD without default value
#            ....
#            ....
#          } UnInit;
#        }
#      
#      3.3.2 PCD value structure in PCD database C structure
#        The value's structure is generated by build tool in PCD database C structure.
#        The PCDs in different datum type has different value structure.
#        
#        3.3.2.1 UINT8/UINT16/UINT32/UINT64 datum type PCD
#          The C structure for these datum type PCD is just a UINT8/UINT16/UINT32/UINT64
#          data member in PCD database, For example:
#          UINT16  PcdHardwareErrorRecordLevel_d3705011_bc19_4af7_be16_f68030378c15_VariableDefault_0;
#          Above structure is generated by build tool, the member name is "PcdCName_Guidvalue"
#          Member type is UINT16 according to PcdHardwareErrorRecordLevel declaration
#          in DEC file.
#          
#        3.3.2.2 VOID* datum type PCD
#          The value of VOID* datum type PCD is a UINT8/UINT16 array in PCD database.
#          
#          3.3.2.2.1 VOID* - string type
#            If the default value for VOID* datum type PCD like L"xxx", the PCD is 
#            used for unicode string, and C structure of this datum type PCD is 
#            UINT16 string array in PCD database, for example:
#            UINT16 StringTable[29];
#            The number of 29 in above sample is max size of a unicode string.
#            
#            If the default value for VOID* datum type PCD like "xxx", the PCD is
#            used for ascii string, and C structure of this datum type PCD is 
#            UINT8 string array in PCD database, for example:
#            UINT8 StringTable[20];
#            The number of 20 in above sample is max size of a ascii string.
#            
#          3.3.2.2.2 VOID* - byte array
#            If the default value of VOID* datum type PCD like {'0x29', '0x01', '0xf2'}
#            the PCD is used for byte array. The generated structrue is same as 
#            above ascii string table,
#            UINT8 StringTable[13];
#            The number of 13 in above sample is max size of byte array.
#       
#      3.3.3 Some utility structures in PCD Database
#        3.3.3.1 GuidTable
#          GuidTable array is used to store all related GUID value in PCD database:
#            - Variable GUID for HII type PCD
#            - Token space GUID for dynamicex type PCD 
#    
#  Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
#
#  This program and the accompanying materials
#  are licensed and made available under the terms and conditions of the BSD License
#  which accompanies this distribution. The full text of the license may be found at
#  http://opensource.org/licenses/bsd-license.php
#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#
#
##

[Defines]
  INF_VERSION                    = 0x00010005
  BASE_NAME                      = PcdPeim
  MODULE_UNI_FILE                = PcdPeim.uni
  FILE_GUID                      = 9B3ADA4F-AE56-4c24-8DEA-F03B7558AE50
  MODULE_TYPE                    = PEIM
  VERSION_STRING                 = 4.0
  PCD_IS_DRIVER                  = PEI_PCD_DRIVER
  ENTRY_POINT                    = PcdPeimInit

#
# The following information is for reference only and not required by the build tools.
#
#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC (EBC is for build only)
#

[Sources]
  Service.c
  Service.h
  Pcd.c

[Packages]
  MdePkg/MdePkg.dec
  MdeModulePkg/MdeModulePkg.dec

[LibraryClasses]
  BaseMemoryLib
  PcdLib
  PeiServicesLib
  HobLib
  BaseLib
  PeimEntryPoint
  DebugLib
  MemoryAllocationLib

[Guids]
  ## PRODUCES            ## HOB
  ## SOMETIMES_CONSUMES  ## HOB
  gPcdDataBaseHobGuid                           
  gPcdDataBaseSignatureGuid                     ## CONSUMES  ## GUID  # PCD database signature GUID.
  gEfiMdeModulePkgTokenSpaceGuid                ## SOMETIMES_CONSUMES  ## GUID

[Ppis]
  gEfiPeiReadOnlyVariable2PpiGuid               ## SOMETIMES_CONSUMES
  gPcdPpiGuid                                   ## PRODUCES
  gEfiPeiPcdPpiGuid                             ## PRODUCES
  gGetPcdInfoPpiGuid                            ## SOMETIMES_PRODUCES
  gEfiGetPcdInfoPpiGuid                         ## SOMETIMES_PRODUCES
  gEfiEndOfPeiSignalPpiGuid                     ## NOTIFY

[FeaturePcd]
  gEfiMdeModulePkgTokenSpaceGuid.PcdPeiFullPcdDatabaseEnable  ## CONSUMES

[Pcd]
  gEfiMdeModulePkgTokenSpaceGuid.PcdVpdBaseAddress ## SOMETIMES_CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdMaxPeiPcdCallBackNumberPerPcdEntry ## SOMETIMES_CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdNvStoreDefaultValueBuffer ## SOMETIMES_CONSUMES
  gEfiMdeModulePkgTokenSpaceGuid.PcdSetNvStoreDefaultId       ## CONSUMES

[Depex]
  TRUE

[UserExtensions.TianoCore."ExtraFiles"]
  PcdPeimExtra.uni
