## @file
# PCD DXE driver manage database contains all dynamic PCD entries and produce the implementation of PCD protocol.
#
# This version PCD DXE depends on the external PCD database binary file, not built in PCD data base.
# There are two PCD Protocols as follows:
#   1) PCD_PROTOCOL
#      It is EDKII implementation which support Dynamic/DynamicEx type Pcds.
#   2) EFI_PCD_PROTOCOL
#      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_PROTOCOL and EFI_PCD_PROTOCOL.
# PCD DXE driver will produce above two protocols 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_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 - 2018, 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                      = PcdDxe
  MODULE_UNI_FILE                = PcdDxe.uni
  FILE_GUID                      = 80CF7257-87AB-47f9-A3FE-D50B76D89541
  MODULE_TYPE                    = DXE_DRIVER
  VERSION_STRING                 = 4.0
  PCD_IS_DRIVER                  = DXE_PCD_DRIVER
  ENTRY_POINT                    = PcdDxeInit

#
# The following information is for reference only and not required by the build tools.
#
#  VALID_ARCHITECTURES           = IA32 X64 EBC
#

[Sources]
  Pcd.c
  Service.c
  Service.h

[Packages]
  MdePkg/MdePkg.dec
  MdeModulePkg/MdeModulePkg.dec

[LibraryClasses]
  UefiRuntimeServicesTableLib
  BaseMemoryLib
  UefiBootServicesTableLib
  MemoryAllocationLib
  HobLib
  UefiDriverEntryPoint
  UefiLib
  DebugLib
  BaseLib
  PcdLib
  DxeServicesLib

[Guids]
  gPcdDataBaseHobGuid                           ## SOMETIMES_CONSUMES  ## HOB
  gPcdDataBaseSignatureGuid                     ## CONSUMES  ## GUID  # PCD database signature GUID.

[Protocols]
  gPcdProtocolGuid                              ## PRODUCES
  gEfiPcdProtocolGuid                           ## PRODUCES
  gGetPcdInfoProtocolGuid                       ## SOMETIMES_PRODUCES
  gEfiGetPcdInfoProtocolGuid                    ## SOMETIMES_PRODUCES
  ## NOTIFY
  ## SOMETIMES_CONSUMES
  gEdkiiVariableLockProtocolGuid

[Pcd]
  gEfiMdeModulePkgTokenSpaceGuid.PcdVpdBaseAddress  ## SOMETIMES_CONSUMES

[Depex]
  TRUE

[UserExtensions.TianoCore."ExtraFiles"]
  PcdDxeExtra.uni
