Home | History | Annotate | Download | only in Library
      1 /** @file
      2   Provides library services to get and set Platform Configuration Database entries.
      3 
      4   PCD Library Class provides a PCD usage macro interface for all PCD types.
      5   It should be included in any module that uses PCD. If a module uses dynamic/dynamicex
      6   PCD, module should be linked to a PEIM/DXE library instance to access that PCD.
      7   If a module uses PatchableInModule type PCD, it also needs the library instance to produce
      8   LibPatchPcdSetPtr() interface. For FeatureFlag/Fixed PCD, the macro interface is
      9   translated to a variable or macro that is auto-generated by build tool in
     10   module's autogen.h/autogen.c.
     11   The PcdGetXX(), PcdSetXX(), PcdToken(), and PcdGetNextTokenSpace() operations are
     12   only available prior to ExitBootServices().  If access to PCD values are required
     13   at runtime, then their values must be collected prior to ExitBootServices().
     14   There are no restrictions on the use of FeaturePcd(), FixedPcdGetXX(),
     15   PatchPcdGetXX(), and PatchPcdSetXX().
     16 
     17 Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR>
     18 This program and the accompanying materials
     19 are licensed and made available under the terms and conditions of the BSD License
     20 which accompanies this distribution.  The full text of the license may be found at
     21 http://opensource.org/licenses/bsd-license.php
     22 
     23 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     24 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     25 
     26 **/
     27 
     28 #ifndef __PCD_LIB_H__
     29 #define __PCD_LIB_H__
     30 
     31 
     32 /**
     33   Retrieves a token number based on a token name.
     34 
     35  Returns the token number associated with the PCD token specified by TokenName.
     36   If TokenName is not a valid token in the token space, then the module will not build.
     37   If TokenName is not a feature flag, then the module will not build.
     38 
     39   @param   TokenName  The name of the PCD token to retrieve the token number for.
     40 
     41   @return  The token number associated with the PCD.
     42 
     43 **/
     44 #define PcdToken(TokenName)                 _PCD_TOKEN_##TokenName
     45 
     46 
     47 /**
     48   Retrieves a Boolean PCD feature flag based on a token name.
     49 
     50   Returns the Boolean value for the PCD feature flag specified by TokenName.
     51   If TokenName is not a valid token in the token space, then the module will not build.
     52   If TokenName is not a feature flag, then the module will not build.
     53 
     54   @param   TokenName  The name of the PCD token to retrieve a current value for.
     55 
     56   @return  Boolean value for the PCD feature flag.
     57 
     58 **/
     59 #define FeaturePcdGet(TokenName)            _PCD_GET_MODE_BOOL_##TokenName
     60 
     61 
     62 /**
     63   Retrieves an 8-bit fixed PCD token value based on a token name.
     64 
     65   Returns the 8-bit value for the token specified by TokenName.
     66   If TokenName is not a valid token in the token space, then the module will not build.
     67   If TokenName is not a feature flag, then the module will not build.
     68 
     69   @param   TokenName  The name of the PCD token to retrieve a current value for.
     70 
     71   @return  8-bit value for the token specified by TokenName.
     72 
     73 **/
     74 #define FixedPcdGet8(TokenName)             _PCD_VALUE_##TokenName
     75 
     76 
     77 /**
     78   Retrieves a 16-bit fixed PCD token value based on a token name.
     79 
     80   Returns the 16-bit value for the token specified by TokenName.
     81   If TokenName is not a valid token in the token space, then the module will not build.
     82   If TokenName is not a feature flag, then the module will not build.
     83 
     84   @param   TokenName  The name of the PCD token to retrieve a current value for.
     85 
     86   @return  16-bit value for the token specified by TokenName.
     87 
     88 **/
     89 #define FixedPcdGet16(TokenName)            _PCD_VALUE_##TokenName
     90 
     91 
     92 /**
     93   Retrieves a 32-bit fixed PCD token value based on a token name.
     94 
     95   Returns the 32-bit value for the token specified by TokenName.
     96   If TokenName is not a valid token in the token space, then the module will not build.
     97   If TokenName is not a feature flag, then the module will not build.
     98 
     99   @param   TokenName  The name of the PCD token to retrieve a current value for.
    100 
    101   @return  32-bit value for the token specified by TokenName.
    102 
    103 **/
    104 #define FixedPcdGet32(TokenName)            _PCD_VALUE_##TokenName
    105 
    106 
    107 /**
    108   Retrieves a 64-bit fixed PCD token value based on a token name.
    109 
    110   Returns the 64-bit value for the token specified by TokenName.
    111   If TokenName is not a valid token in the token space, then the module will not build.
    112   If TokenName is not a feature flag, then the module will not build.
    113 
    114   @param   TokenName  The name of the PCD token to retrieve a current value for.
    115 
    116   @return  64-bit value for the token specified by TokenName.
    117 
    118 **/
    119 #define FixedPcdGet64(TokenName)            _PCD_VALUE_##TokenName
    120 
    121 
    122 /**
    123   Retrieves a Boolean fixed PCD token value based on a token name.
    124 
    125   Returns the Boolean value for the token specified by TokenName.
    126   If TokenName is not a valid token in the token space, then the module will not build.
    127   If TokenName is not a feature flag, then the module will not build.
    128 
    129   @param   TokenName  The name of the PCD token to retrieve a current value for.
    130 
    131   @return  The Boolean value for the token.
    132 
    133 **/
    134 #define FixedPcdGetBool(TokenName)          _PCD_VALUE_##TokenName
    135 
    136 
    137 /**
    138   Retrieves a pointer to a fixed PCD token buffer based on a token name.
    139 
    140   Returns a pointer to the buffer for the token specified by TokenName.
    141   If TokenName is not a valid token in the token space, then the module will not build.
    142   If TokenName is not a feature flag, then the module will not build.
    143 
    144   @param   TokenName  The name of the PCD token to retrieve a current value for.
    145 
    146   @return  A pointer to the buffer.
    147 
    148 **/
    149 #define FixedPcdGetPtr(TokenName)           ((VOID *)_PCD_VALUE_##TokenName)
    150 
    151 
    152 /**
    153   Retrieves an 8-bit binary patchable PCD token value based on a token name.
    154 
    155   Returns the 8-bit value for the token specified by TokenName.
    156   If TokenName is not a valid token in the token space, then the module will not build.
    157   If TokenName is not a feature flag, then the module will not build.
    158 
    159   @param   TokenName  The name of the PCD token to retrieve a current value for.
    160 
    161   @return  An 8-bit binary patchable PCD token value.
    162 
    163 **/
    164 #define PatchPcdGet8(TokenName)             _gPcd_BinaryPatch_##TokenName
    165 
    166 /**
    167   Retrieves a 16-bit binary patchable PCD token value based on a token name.
    168 
    169   Returns the 16-bit value for the token specified by TokenName.
    170   If TokenName is not a valid token in the token space, then the module will not build.
    171   If TokenName is not a feature flag, then the module will not build.
    172 
    173   @param   TokenName  The name of the PCD token to retrieve a current value for.
    174 
    175   @return  A 16-bit binary patchable PCD token value.
    176 
    177 **/
    178 #define PatchPcdGet16(TokenName)            _gPcd_BinaryPatch_##TokenName
    179 
    180 
    181 /**
    182   Retrieves a 32-bit binary patchable PCD token value based on a token name.
    183 
    184   Returns the 32-bit value for the token specified by TokenName.
    185   If TokenName is not a valid token in the token space, then the module will not build.
    186   If TokenName is not a feature flag, then the module will not build.
    187 
    188   @param   TokenName  The name of the PCD token to retrieve a current value for.
    189 
    190   @return  A 32-bit binary patchable PCD token value.
    191 
    192 **/
    193 #define PatchPcdGet32(TokenName)            _gPcd_BinaryPatch_##TokenName
    194 
    195 
    196 /**
    197   Retrieves a 64-bit binary patchable PCD token value based on a token name.
    198 
    199   Returns the 64-bit value for the token specified by TokenName.
    200   If TokenName is not a valid token in the token space, then the module will not build.
    201   If TokenName is not a feature flag, then the module will not build.
    202 
    203   @param   TokenName  The name of the PCD token to retrieve a current value for.
    204 
    205   @return  A 64-bit binary patchable PCD token value.
    206 
    207 **/
    208 #define PatchPcdGet64(TokenName)            _gPcd_BinaryPatch_##TokenName
    209 
    210 
    211 /**
    212   Retrieves a Boolean binary patchable PCD token value based on a token name.
    213 
    214   Returns the Boolean value for the token specified by TokenName.
    215   If TokenName is not a valid token in the token space, then the module will not build.
    216   If TokenName is not a feature flag, then the module will not build.
    217 
    218   @param   TokenName  The name of the PCD token to retrieve a current value for.
    219 
    220   @return  The Boolean value for the token.
    221 
    222 **/
    223 #define PatchPcdGetBool(TokenName)          _gPcd_BinaryPatch_##TokenName
    224 
    225 
    226 /**
    227   Retrieves a pointer to a binary patchable PCD token buffer based on a token name.
    228 
    229   Returns a pointer to the buffer for the token specified by TokenName.
    230   If TokenName is not a valid token in the token space, then the module will not build.
    231   If TokenName is not a feature flag, then the module will not build.
    232 
    233   @param   TokenName  The name of the PCD token to retrieve a current value for.
    234 
    235   @return  A pointer to the buffer for the token.
    236 
    237 **/
    238 #define PatchPcdGetPtr(TokenName)           ((VOID *)_gPcd_BinaryPatch_##TokenName)
    239 
    240 
    241 /**
    242   Sets an 8-bit binary patchable PCD token value based on a token name.
    243 
    244   Sets the 8-bit value for the token specified by TokenName. Value is returned.
    245   If TokenName is not a valid token in the token space, then the module will not build.
    246   If TokenName is not a feature flag, then the module will not build.
    247 
    248   @param   TokenName  The name of the binary patchable PCD token to set the current value for.
    249   @param   Value      The 8-bit value to set.
    250 
    251   @return Return the Value that was set.
    252 
    253 **/
    254 #define PatchPcdSet8(TokenName, Value)      (_gPcd_BinaryPatch_##TokenName = (Value))
    255 
    256 
    257 /**
    258   Sets a 16-bit binary patchable PCD token value based on a token name.
    259 
    260   Sets the 16-bit value for the token specified by TokenName. Value is returned.
    261   If TokenName is not a valid token in the token space, then the module will not build.
    262   If TokenName is not a feature flag, then the module will not build.
    263 
    264   @param   TokenName  The name of the binary patchable PCD token to set the current value for.
    265   @param   Value      The 16-bit value to set.
    266 
    267   @return Return the Value that was set.
    268 
    269 **/
    270 #define PatchPcdSet16(TokenName, Value)     (_gPcd_BinaryPatch_##TokenName = (Value))
    271 
    272 
    273 /**
    274   Sets a 32-bit binary patchable PCD token value based on a token name.
    275 
    276   Sets the 32-bit value for the token specified by TokenName. Value is returned.
    277   If TokenName is not a valid token in the token space, then the module will not build.
    278   If TokenName is not a feature flag, then the module will not build.
    279 
    280   @param   TokenName  The name of the binary patchable PCD token to set the current value for.
    281   @param   Value      The 32-bit value to set.
    282 
    283   @return Return the Value that was set.
    284 
    285 **/
    286 #define PatchPcdSet32(TokenName, Value)     (_gPcd_BinaryPatch_##TokenName = (Value))
    287 
    288 
    289 /**
    290   Sets a 64-bit binary patchable PCD token value based on a token name.
    291 
    292   Sets the 64-bit value for the token specified by TokenName. Value is returned.
    293   If TokenName is not a valid token in the token space, then the module will not build.
    294   If TokenName is not a feature flag, then the module will not build.
    295 
    296   @param   TokenName  The name of the binary patchable PCD token to set the current value for.
    297   @param   Value      The 64-bit value to set.
    298 
    299   @return Return the Value that was set.
    300 
    301 **/
    302 #define PatchPcdSet64(TokenName, Value)     (_gPcd_BinaryPatch_##TokenName = (Value))
    303 
    304 
    305 /**
    306   Sets a Boolean binary patchable PCD token value based on a token name.
    307 
    308   Sets the Boolean value for the token specified by TokenName. Value is returned.
    309   If TokenName is not a valid token in the token space, then the module will not build.
    310   If TokenName is not a feature flag, then the module will not build.
    311 
    312   @param   TokenName  The name of the binary patchable PCD token to set the current value for.
    313   @param   Value      The boolean value to set.
    314 
    315   @return Return the Value that was set.
    316 
    317 **/
    318 #define PatchPcdSetBool(TokenName, Value)   (_gPcd_BinaryPatch_##TokenName = (Value))
    319 
    320 
    321 /**
    322   Sets a pointer to a binary patchable PCD token buffer based on a token name.
    323 
    324   Sets the buffer for the token specified by TokenName.  Buffer is returned.
    325   If SizeOfBuffer is greater than the maximum size supported by TokenName, then set SizeOfBuffer
    326   to the maximum size supported by TokenName and return NULL to indicate that the set operation
    327   was not actually performed.  If SizeOfBuffer is set to MAX_ADDRESS, then SizeOfBuffer must be
    328   set to the maximum size supported by TokenName and NULL must be returned.
    329   If TokenName is not a valid token in the token space, then the module will not build.
    330   If TokenName is not a feature flag, then the module will not build.
    331 
    332   If SizeOfBuffer is NULL, then ASSERT().
    333   If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT().
    334 
    335   @param   TokenName      The name of the binary patchable PCD token to set the current value for.
    336   @param   SizeOfBuffer   A pointer to the size, in bytes, of Buffer.
    337   @param   Buffer         Pointer to the value to set.
    338 
    339   @return Return the pointer to the Buffer that was set.
    340 
    341 **/
    342 #define PatchPcdSetPtr(TokenName, Size, Buffer) \
    343                                             LibPatchPcdSetPtrAndSize (                 \
    344                                               (VOID *)_gPcd_BinaryPatch_##TokenName,   \
    345                                               &_gPcd_BinaryPatch_Size_##TokenName,     \
    346                                               (UINTN)_PCD_PATCHABLE_##TokenName##_SIZE, \
    347                                               (Size),                                  \
    348                                               (Buffer)                                 \
    349                                               )
    350 /**
    351   Retrieves an 8-bit PCD token value based on a token name.
    352 
    353   Returns the 8-bit value for the token specified by TokenName.
    354   If TokenName is not a valid token in the token space, then the module will not build.
    355 
    356   @param   TokenName  The name of the PCD token to retrieve a current value for.
    357 
    358   @return  8-bit value for the token specified by TokenName.
    359 
    360 **/
    361 #define PcdGet8(TokenName)                  _PCD_GET_MODE_8_##TokenName
    362 
    363 
    364 /**
    365   Retrieves a 16-bit PCD token value based on a token name.
    366 
    367   Returns the 16-bit value for the token specified by TokenName.
    368   If TokenName is not a valid token in the token space, then the module will not build.
    369 
    370   @param   TokenName  The name of the PCD token to retrieve a current value for.
    371 
    372   @return  16-bit value for the token specified by TokenName.
    373 
    374 **/
    375 #define PcdGet16(TokenName)                 _PCD_GET_MODE_16_##TokenName
    376 
    377 
    378 /**
    379   Retrieves a 32-bit PCD token value based on a token name.
    380 
    381   Returns the 32-bit value for the token specified by TokenName.
    382   If TokenName is not a valid token in the token space, then the module will not build.
    383 
    384   @param   TokenName  The name of the PCD token to retrieve a current value for.
    385 
    386   @return  32-bit value for the token specified by TokenName.
    387 
    388 **/
    389 #define PcdGet32(TokenName)                 _PCD_GET_MODE_32_##TokenName
    390 
    391 
    392 /**
    393   Retrieves a 64-bit PCD token value based on a token name.
    394 
    395   Returns the 64-bit value for the token specified by TokenName.
    396   If TokenName is not a valid token in the token space, then the module will not build.
    397 
    398   @param   TokenName  The name of the PCD token to retrieve a current value for.
    399 
    400   @return  64-bit value for the token specified by TokenName.
    401 
    402 **/
    403 #define PcdGet64(TokenName)                 _PCD_GET_MODE_64_##TokenName
    404 
    405 
    406 /**
    407   Retrieves a pointer to a PCD token buffer based on a token name.
    408 
    409   Returns a pointer to the buffer for the token specified by TokenName.
    410   If TokenName is not a valid token in the token space, then the module will not build.
    411 
    412   @param   TokenName  The name of the PCD token to retrieve a current value for.
    413 
    414   @return  A pointer to the buffer.
    415 
    416 **/
    417 #define PcdGetPtr(TokenName)                _PCD_GET_MODE_PTR_##TokenName
    418 
    419 
    420 /**
    421   Retrieves a Boolean PCD token value based on a token name.
    422 
    423   Returns the Boolean value for the token specified by TokenName.
    424   If TokenName is not a valid token in the token space, then the module will not build.
    425 
    426   @param   TokenName  The name of the PCD token to retrieve a current value for.
    427 
    428   @return  A Boolean PCD token value.
    429 
    430 **/
    431 #define PcdGetBool(TokenName)               _PCD_GET_MODE_BOOL_##TokenName
    432 
    433 
    434 /**
    435   Retrieves the size of a fixed PCD token based on a token name.
    436 
    437   Returns the size of the token specified by TokenName.
    438   If TokenName is not a valid token in the token space, then the module will not build.
    439 
    440   @param[in]  TokenName  The name of the PCD token to retrieve a current value size for.
    441 
    442   @return     Return the size
    443 
    444 **/
    445 #define FixedPcdGetSize(TokenName)    _PCD_SIZE_##TokenName
    446 
    447 
    448 /**
    449   Retrieves the size of a binary patchable PCD token based on a token name.
    450 
    451   Returns the size of the token specified by TokenName.
    452   If TokenName is not a valid token in the token space, then the module will not build.
    453 
    454   @param[in]  TokenName  The name of the PCD token to retrieve a current value size for.
    455 
    456   @return     Return the size
    457 
    458 **/
    459 #define PatchPcdGetSize(TokenName)    _gPcd_BinaryPatch_Size_##TokenName
    460 
    461 
    462 /**
    463   Retrieves the size of the PCD token based on a token name.
    464 
    465   Returns the size of the token specified by TokenName.
    466   If TokenName is not a valid token in the token space, then the module will not build.
    467 
    468   @param[in]   TokenName  The name of the PCD token to retrieve a current value size for.
    469 
    470   @return      Return the size
    471 
    472 **/
    473 #define PcdGetSize(TokenName)         _PCD_GET_MODE_SIZE_##TokenName
    474 
    475 
    476 /**
    477   Retrieve the size of a given PCD token.
    478 
    479   Returns the size of the token specified by TokenNumber and Guid.
    480   If Guid is NULL, then ASSERT().
    481 
    482   @param[in]  Guid          Pointer to a 128-bit unique value that designates
    483                             which namespace to retrieve a value from.
    484   @param[in]  TokenNumber   The PCD token number to retrieve a current value size for.
    485 
    486   @return     Return the size.
    487 
    488 **/
    489 #define PcdGetExSize(Guid, TokenName) LibPcdGetExSize ((Guid), PcdTokenEx(Guid,TokenName))
    490 
    491 #ifndef DISABLE_NEW_DEPRECATED_INTERFACES
    492 /**
    493   Sets an 8-bit PCD token value based on a token name.
    494 
    495   Sets the 8-bit value for the token specified by TokenName. Value is returned.
    496   If TokenName is not a valid token in the token space, then the module will not build.
    497 
    498   @param   TokenName  The name of the PCD token to retrieve a current value for.
    499   @param   Value      The 8-bit value to set.
    500 
    501   @return Return the Value that was set.
    502 
    503 **/
    504 #define PcdSet8(TokenName, Value)           _PCD_SET_MODE_8_##TokenName     ((Value))
    505 
    506 
    507 /**
    508   Sets a 16-bit PCD token value based on a token name.
    509 
    510   Sets the 16-bit value for the token specified by TokenName. Value is returned.
    511   If TokenName is not a valid token in the token space, then the module will not build.
    512 
    513   @param   TokenName  The name of the PCD token to retrieve a current value for.
    514   @param   Value      The 16-bit value to set.
    515 
    516   @return Return the Value that was set.
    517 
    518 **/
    519 #define PcdSet16(TokenName, Value)          _PCD_SET_MODE_16_##TokenName    ((Value))
    520 
    521 
    522 /**
    523   Sets a 32-bit PCD token value based on a token name.
    524 
    525   Sets the 32-bit value for the token specified by TokenName. Value is returned.
    526   If TokenName is not a valid token in the token space, then the module will not build.
    527 
    528   @param   TokenName  The name of the PCD token to retrieve a current value for.
    529   @param   Value      The 32-bit value to set.
    530 
    531   @return Return the Value that was set.
    532 
    533 **/
    534 #define PcdSet32(TokenName, Value)          _PCD_SET_MODE_32_##TokenName    ((Value))
    535 
    536 
    537 /**
    538   Sets a 64-bit PCD token value based on a token name.
    539 
    540   Sets the 64-bit value for the token specified by TokenName. Value is returned.
    541   If TokenName is not a valid token in the token space, then the module will not build.
    542 
    543   @param   TokenName  The name of the PCD token to retrieve a current value for.
    544   @param   Value      The 64-bit value to set.
    545 
    546   @return Return the Value that was set.
    547 
    548 **/
    549 #define PcdSet64(TokenName, Value)          _PCD_SET_MODE_64_##TokenName    ((Value))
    550 
    551 
    552 /**
    553   Sets a pointer to a PCD token buffer based on a token name.
    554 
    555   Sets the buffer for the token specified by TokenName. Buffer is returned.
    556   If SizeOfBuffer is greater than the maximum size supported by TokenName,
    557   then set SizeOfBuffer to the maximum size supported by TokenName and return NULL
    558   to indicate that the set operation was not actually performed.  If SizeOfBuffer
    559   is set to MAX_ADDRESS, then SizeOfBuffer must be set to the maximum size supported
    560   by TokenName and NULL must be returned.
    561   If TokenName is not a valid token in the token space, then the module will not build.
    562 
    563   If SizeOfBuffer is NULL, then ASSERT().
    564   If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT().
    565 
    566   @param   TokenName      The name of the PCD token to set the current value for.
    567   @param   SizeOfBuffer   A pointer to the size, in bytes, of Buffer.
    568   @param   Buffer         A pointer to the buffer to set.
    569 
    570   @return Return the pointer to the Buffer that was set.
    571 
    572 **/
    573 #define PcdSetPtr(TokenName, SizeOfBuffer, Buffer) \
    574                                             _PCD_SET_MODE_PTR_##TokenName   ((SizeOfBuffer), (Buffer))
    575 
    576 /**
    577   Sets a Boolean PCD token value based on a token name.
    578 
    579   Sets the Boolean value for the token specified by TokenName. Value is returned.
    580   If TokenName is not a valid token in the token space, then the module will not build.
    581 
    582   @param   TokenName      The name of the PCD token to set the current value for.
    583   @param   Buffer         The Boolean value to set.
    584 
    585   @return Return the Value that was set.
    586 
    587 **/
    588 #define PcdSetBool(TokenName, Value)        _PCD_SET_MODE_BOOL_##TokenName  ((Value))
    589 #endif
    590 
    591 /**
    592   Sets a 8-bit PCD token value based on a token name.
    593 
    594   Sets the 8-bit value for the token specified by TokenName.
    595   If TokenName is not a valid token in the token space, then the module will not build.
    596 
    597   @param TokenName  The name of the PCD token to retrieve a current value for.
    598   @param Value      The 8-bit value to set.
    599 
    600   @return The status of the set operation.
    601 
    602 **/
    603 #define PcdSet8S(TokenName, Value)          _PCD_SET_MODE_8_S_##TokenName    ((Value))
    604 
    605 /**
    606   Sets a 16-bit PCD token value based on a token name.
    607 
    608   Sets the 16-bit value for the token specified by TokenName.
    609   If TokenName is not a valid token in the token space, then the module will not build.
    610 
    611   @param TokenName  The name of the PCD token to retrieve a current value for.
    612   @param Value      The 16-bit value to set.
    613 
    614   @return The status of the set operation.
    615 
    616 **/
    617 #define PcdSet16S(TokenName, Value)         _PCD_SET_MODE_16_S_##TokenName    ((Value))
    618 
    619 /**
    620   Sets a 32-bit PCD token value based on a token name.
    621 
    622   Sets the 32-bit value for the token specified by TokenName.
    623   If TokenName is not a valid token in the token space, then the module will not build.
    624 
    625   @param TokenName  The name of the PCD token to retrieve a current value for.
    626   @param Value      The 32-bit value to set.
    627 
    628   @return The status of the set operation.
    629 
    630 **/
    631 #define PcdSet32S(TokenName, Value)         _PCD_SET_MODE_32_S_##TokenName    ((Value))
    632 
    633 /**
    634   Sets a 64-bit PCD token value based on a token name.
    635 
    636   Sets the 64-bit value for the token specified by TokenName.
    637   If TokenName is not a valid token in the token space, then the module will not build.
    638 
    639   @param TokenName  The name of the PCD token to retrieve a current value for.
    640   @param Value      The 64-bit value to set.
    641 
    642   @return The status of the set operation.
    643 
    644 **/
    645 #define PcdSet64S(TokenName, Value)         _PCD_SET_MODE_64_S_##TokenName    ((Value))
    646 
    647 /**
    648   Sets a pointer to a PCD token buffer based on a token name.
    649 
    650   Sets the buffer for the token specified by TokenName.
    651   If SizeOfBuffer is greater than the maximum size supported by TokenName,
    652   then set SizeOfBuffer to the maximum size supported by TokenName and return
    653   RETURN_INVALID_PARAMETER to indicate that the set operation was not actually performed.
    654   If SizeOfBuffer is set to MAX_ADDRESS, then SizeOfBuffer must be set to the maximum size
    655   supported by TokenName and RETURN_INVALID_PARAMETER must be returned.
    656   If TokenName is not a valid token in the token space, then the module will not build.
    657 
    658   If SizeOfBuffer is NULL, then ASSERT().
    659   If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT().
    660 
    661   @param TokenName      The name of the PCD token to set the current value for.
    662   @param SizeOfBuffer   A pointer to the size, in bytes, of Buffer.
    663   @param Buffer         A pointer to the buffer to set.
    664 
    665   @return The status of the set operation.
    666 
    667 **/
    668 #define PcdSetPtrS(TokenName, SizeOfBuffer, Buffer) \
    669                                             _PCD_SET_MODE_PTR_S_##TokenName   ((SizeOfBuffer), (Buffer))
    670 
    671 
    672 
    673 /**
    674   Sets a boolean PCD token value based on a token name.
    675 
    676   Sets the boolean value for the token specified by TokenName.
    677   If TokenName is not a valid token in the token space, then the module will not build.
    678 
    679   @param TokenName  The name of the PCD token to retrieve a current value for.
    680   @param Value      The boolean value to set.
    681 
    682   @return The status of the set operation.
    683 
    684 **/
    685 #define PcdSetBoolS(TokenName, Value)       _PCD_SET_MODE_BOOL_S_##TokenName    ((Value))
    686 
    687 /**
    688   Retrieves a token number based on a GUID and a token name.
    689 
    690   Returns the token number for the token specified by Guid and TokenName.
    691 
    692   @param   Guid        Pointer to a 128-bit unique value that designates
    693                        which namespace to retrieve a value from.
    694   @param   TokenName   The name of the PCD token to retrieve a current value for.
    695 
    696   @return  Return the token number.
    697 
    698 **/
    699 #define PcdTokenEx(Guid,TokenName)  _PCD_TOKEN_EX_##TokenName(Guid)
    700 
    701 /**
    702   Retrieves an 8-bit PCD token value based on a GUID and a token name.
    703 
    704   Returns the 8-bit value for the token specified by Guid and TokenName.
    705   If TokenName is not a valid token in the token space specified by Guid,
    706   then the module will not build.
    707 
    708   If Guid is NULL, then ASSERT().
    709 
    710   @param   Guid        Pointer to a 128-bit unique value that designates
    711                        which namespace to retrieve a value from.
    712   @param   TokenName   The name of the PCD token to retrieve a current value for.
    713 
    714   @return  An 8-bit PCD token value.
    715 
    716 **/
    717 #define PcdGetEx8(Guid, TokenName)          LibPcdGetEx8 ((Guid), PcdTokenEx(Guid,TokenName))
    718 
    719 /**
    720   Retrieves a 16-bit PCD token value based on a GUID and a token name.
    721 
    722   Returns the 16-bit value for the token specified by Guid and TokenName.
    723   If TokenName is not a valid token in the token space specified by Guid,
    724   then the module will not build.
    725 
    726   If Guid is NULL, then ASSERT().
    727 
    728   @param   Guid        Pointer to a 128-bit unique value that designates
    729                        which namespace to retrieve a value from.
    730   @param   TokenName   The name of the PCD token to retrieve a current value for.
    731 
    732   @return  A 16-bit PCD token value.
    733 
    734 **/
    735 #define PcdGetEx16(Guid, TokenName)         LibPcdGetEx16 ((Guid), PcdTokenEx(Guid,TokenName))
    736 
    737 
    738 /**
    739   Retrieves a 32-bit PCD token value based on a GUID and a token name.
    740 
    741   Returns the 32-bit value for the token specified by Guid and TokenName.
    742   If TokenName is not a valid token in the token space specified by Guid,
    743   then the module will not build.
    744 
    745   If Guid is NULL, then ASSERT().
    746 
    747   @param   Guid        Pointer to a 128-bit unique value that designates
    748                        which namespace to retrieve a value from.
    749   @param   TokenName   The name of the PCD token to retrieve a current value for.
    750 
    751   @return  A 32-bit PCD token value.
    752 
    753 **/
    754 #define PcdGetEx32(Guid, TokenName)         LibPcdGetEx32 ((Guid), PcdTokenEx(Guid,TokenName))
    755 
    756 
    757 /**
    758   Retrieves a 64-bit PCD token value based on a GUID and a token name.
    759 
    760   Returns the 64-bit value for the token specified by Guid and TokenName.
    761   If TokenName is not a valid token in the token space specified by Guid,
    762   then the module will not build.
    763 
    764   If Guid is NULL, then ASSERT().
    765 
    766   @param   Guid        Pointer to a 128-bit unique value that designates
    767                        which namespace to retrieve a value from.
    768   @param   TokenName   The name of the PCD token to retrieve a current value for.
    769 
    770   @return  A 64-bit PCD token value.
    771 
    772 **/
    773 #define PcdGetEx64(Guid, TokenName)         LibPcdGetEx64 ((Guid), PcdTokenEx(Guid,TokenName))
    774 
    775 
    776 /**
    777   Retrieves a pointer to a PCD token buffer based on a GUID and a token name.
    778 
    779   Returns a pointer to the buffer for the token specified by Guid and TokenName.
    780   If TokenName is not a valid token in the token space specified by Guid,
    781   then the module will not build.
    782 
    783   If Guid is NULL, then ASSERT().
    784 
    785   @param   Guid        Pointer to a 128-bit unique value that designates
    786                        which namespace to retrieve a value from.
    787   @param   TokenName   The name of the PCD token to retrieve a current value for.
    788 
    789   @return  A pointer to a PCD token buffer.
    790 
    791 **/
    792 #define PcdGetExPtr(Guid, TokenName)        LibPcdGetExPtr ((Guid), PcdTokenEx(Guid,TokenName))
    793 
    794 
    795 /**
    796   Retrieves a Boolean PCD token value based on a GUID and a token name.
    797 
    798   Returns the Boolean value for the token specified by Guid and TokenName.
    799   If TokenName is not a valid token in the token space specified by Guid,
    800   then the module will not build.
    801 
    802   If Guid is NULL, then ASSERT().
    803 
    804   @param   Guid        Pointer to a 128-bit unique value that designates
    805                        which namespace to retrieve a value from.
    806   @param   TokenName   The name of the PCD token to retrieve a current value for.
    807 
    808   @return  A Boolean PCD token value.
    809 
    810 **/
    811 #define PcdGetExBool(Guid, TokenName)       LibPcdGetExBool  ((Guid), PcdTokenEx(Guid,TokenName))
    812 
    813 
    814 
    815 #ifndef DISABLE_NEW_DEPRECATED_INTERFACES
    816 /**
    817   Sets an 8-bit PCD token value based on a GUID and a token name.
    818 
    819   Sets the 8-bit value for the token specified by Guid and TokenName. Value is returned.
    820   If TokenName is not a valid token in the token space specified by Guid,
    821   then the module will not build.
    822 
    823   If Guid is NULL, then ASSERT().
    824 
    825   @param   Guid        Pointer to a 128-bit unique value that designates
    826                        which namespace to retrieve a value from.
    827   @param   TokenName   The name of the PCD token to set the current value for.
    828   @param   Value       The 8-bit value to set.
    829 
    830   @return Return the Value that was set.
    831 
    832 **/
    833 #define PcdSetEx8(Guid, TokenName, Value)   LibPcdSetEx8   ((Guid), PcdTokenEx(Guid,TokenName), (Value))
    834 
    835 
    836 /**
    837   Sets a 16-bit PCD token value based on a GUID and a token name.
    838 
    839   Sets the 16-bit value for the token specified by Guid and TokenName. Value is returned.
    840   If TokenName is not a valid token in the token space specified by Guid,
    841   then the module will not build.
    842 
    843   If Guid is NULL, then ASSERT().
    844 
    845   @param   Guid        Pointer to a 128-bit unique value that designates
    846                        which namespace to retrieve a value from.
    847   @param   TokenName   The name of the PCD token to set the current value for.
    848   @param   Value       The 16-bit value to set.
    849 
    850   @return Return the Value that was set.
    851 
    852 **/
    853 #define PcdSetEx16(Guid, TokenName, Value)  LibPcdSetEx16  ((Guid), PcdTokenEx(Guid,TokenName), (Value))
    854 
    855 
    856 /**
    857   Sets a 32-bit PCD token value based on a GUID and a token name.
    858 
    859   Sets the 32-bit value for the token specified by Guid and TokenName. Value is returned.
    860   If TokenName is not a valid token in the token space specified by Guid,
    861   then the module will not build.
    862 
    863   If Guid is NULL, then ASSERT().
    864 
    865   @param   Guid        Pointer to a 128-bit unique value that designates
    866                        which namespace to retrieve a value from.
    867   @param   TokenName   The name of the PCD token to set the current value for.
    868   @param   Value       The 32-bit value to set.
    869 
    870   @return Return the Value that was set.
    871 
    872 **/
    873 #define PcdSetEx32(Guid, TokenName, Value)  LibPcdSetEx32  ((Guid), PcdTokenEx(Guid,TokenName), (Value))
    874 
    875 
    876 /**
    877   Sets a 64-bit PCD token value based on a GUID and a token name.
    878 
    879   Sets the 64-bit value for the token specified by Guid and TokenName. Value is returned.
    880   If TokenName is not a valid token in the token space specified by Guid,
    881   then the module will not build.
    882 
    883   If Guid is NULL, then ASSERT().
    884 
    885   @param   Guid        Pointer to a 128-bit unique value that designates
    886   which namespace to retrieve a value from.
    887   @param   TokenName   The name of the PCD token to set the current value for.
    888   @param   Value       The 64-bit value to set.
    889 
    890   @return Return the Value that was set.
    891 
    892 **/
    893 #define PcdSetEx64(Guid, TokenName, Value)  LibPcdSetEx64  ((Guid), PcdTokenEx(Guid,TokenName), (Value))
    894 
    895 
    896 /**
    897   Sets a pointer to a PCD token buffer based on a GUID and a token name.
    898 
    899   Sets the buffer for the token specified by Guid and TokenName. Buffer is returned.
    900   If SizeOfBuffer is greater than the maximum size supported by Guid and TokenName,
    901   then set SizeOfBuffer to the maximum size supported by Guid and TokenName and return
    902   NULL to indicate that the set operation was not actually performed. If SizeOfBuffer
    903   is set to MAX_ADDRESS, then SizeOfBuffer must be set to the maximum size supported by
    904   Guid and TokenName and NULL must be returned.
    905   If TokenName is not a valid token in the token space specified by Guid,
    906   then the module will not build.
    907 
    908   If Guid is NULL, then ASSERT().
    909   If SizeOfBuffer is NULL, then ASSERT().
    910   If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT().
    911 
    912   @param   Guid           Pointer to a 128-bit unique value that designates
    913                           which namespace to retrieve a value from.
    914   @param   TokenName      The name of the PCD token to set the current value for.
    915   @param   SizeOfBuffer   A pointer to the size, in bytes, of Buffer.
    916   @param   Buffer         Pointer to the buffer to set.
    917 
    918   @return Return the pointer to the Buffer that was set.
    919 
    920 **/
    921 #define PcdSetExPtr(Guid, TokenName, SizeOfBuffer, Buffer) \
    922                                             LibPcdSetExPtr ((Guid), PcdTokenEx(Guid,TokenName), (SizeOfBuffer), (Buffer))
    923 
    924 
    925 /**
    926   Sets a Boolean PCD token value based on a GUID and a token name.
    927 
    928   Sets the Boolean value for the token specified by Guid and TokenName. Value is returned.
    929   If TokenName is not a valid token in the token space specified by Guid,
    930   then the module will not build.
    931 
    932   If Guid is NULL, then ASSERT().
    933 
    934   @param   Guid           Pointer to a 128-bit unique value that designates
    935                           which namespace to retrieve a value from.
    936   @param   TokenName      The name of the PCD token to set the current value for.
    937   @param   Value          The Boolean value to set.
    938 
    939   @return Return the Value that was set.
    940 
    941 **/
    942 #define PcdSetExBool(Guid, TokenName, Value) \
    943                                             LibPcdSetExBool((Guid), PcdTokenEx(Guid,TokenName), (Value))
    944 #endif
    945 
    946 /**
    947   Sets an 8-bit PCD token value based on a GUID and a token name.
    948 
    949   Sets the 8-bit value for the token specified by Guid and TokenName.
    950   If TokenName is not a valid token in the token space specified by Guid,
    951   then the module will not build.
    952 
    953   If Guid is NULL, then ASSERT().
    954 
    955   @param Guid       Pointer to a 128-bit unique value that designates
    956                     which namespace to retrieve a value from.
    957   @param TokenName  The name of the PCD token to set the current value for.
    958   @param Value      The 8-bit value to set.
    959 
    960   @return The status of the set operation.
    961 
    962 **/
    963 #define PcdSetEx8S(Guid, TokenName, Value)     LibPcdSetEx8S ((Guid), PcdTokenEx(Guid,TokenName), (Value))
    964 
    965 /**
    966   Sets an 16-bit PCD token value based on a GUID and a token name.
    967 
    968   Sets the 16-bit value for the token specified by Guid and TokenName.
    969   If TokenName is not a valid token in the token space specified by Guid,
    970   then the module will not build.
    971 
    972   If Guid is NULL, then ASSERT().
    973 
    974   @param Guid       Pointer to a 128-bit unique value that designates
    975                     which namespace to retrieve a value from.
    976   @param TokenName  The name of the PCD token to set the current value for.
    977   @param Value      The 16-bit value to set.
    978 
    979   @return The status of the set operation.
    980 
    981 **/
    982 #define PcdSetEx16S(Guid, TokenName, Value)    LibPcdSetEx16S ((Guid), PcdTokenEx(Guid,TokenName), (Value))
    983 
    984 /**
    985   Sets an 32-bit PCD token value based on a GUID and a token name.
    986 
    987   Sets the 32-bit value for the token specified by Guid and TokenName.
    988   If TokenName is not a valid token in the token space specified by Guid,
    989   then the module will not build.
    990 
    991   If Guid is NULL, then ASSERT().
    992 
    993   @param Guid       Pointer to a 128-bit unique value that designates
    994                     which namespace to retrieve a value from.
    995   @param TokenName  The name of the PCD token to set the current value for.
    996   @param Value      The 32-bit value to set.
    997 
    998   @return The status of the set operation.
    999 
   1000 **/
   1001 #define PcdSetEx32S(Guid, TokenName, Value)    LibPcdSetEx32S ((Guid), PcdTokenEx(Guid,TokenName), (Value))
   1002 
   1003 /**
   1004   Sets an 64-bit PCD token value based on a GUID and a token name.
   1005 
   1006   Sets the 64-bit value for the token specified by Guid and TokenName.
   1007   If TokenName is not a valid token in the token space specified by Guid,
   1008   then the module will not build.
   1009 
   1010   If Guid is NULL, then ASSERT().
   1011 
   1012   @param Guid       Pointer to a 128-bit unique value that designates
   1013                     which namespace to retrieve a value from.
   1014   @param TokenName  The name of the PCD token to set the current value for.
   1015   @param Value      The 64-bit value to set.
   1016 
   1017   @return The status of the set operation.
   1018 
   1019 **/
   1020 #define PcdSetEx64S(Guid, TokenName, Value)    LibPcdSetEx64S ((Guid), PcdTokenEx(Guid,TokenName), (Value))
   1021 
   1022 /**
   1023   Sets a pointer to a PCD token buffer based on a GUID and a token name.
   1024 
   1025   Sets the buffer for the token specified by Guid and TokenName.
   1026   If SizeOfBuffer is greater than the maximum size supported by Guid and TokenName,
   1027   then set SizeOfBuffer to the maximum size supported by Guid and TokenName and return
   1028   RETURN_INVALID_PARAMETER to indicate that the set operation was not actually performed.
   1029   If SizeOfBuffer is set to MAX_ADDRESS, then SizeOfBuffer must be set to the maximum size
   1030   supported by Guid and TokenName and RETURN_INVALID_PARAMETER must be returned.
   1031   If TokenName is not a valid token in the token space specified by Guid,
   1032   then the module will not build.
   1033 
   1034   If Guid is NULL, then ASSERT().
   1035   If SizeOfBuffer is NULL, then ASSERT().
   1036   If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT().
   1037 
   1038   @param Guid           Pointer to a 128-bit unique value that designates
   1039                         which namespace to retrieve a value from.
   1040   @param TokenName      The name of the PCD token to set the current value for.
   1041   @param SizeOfBuffer   A pointer to the size, in bytes, of Buffer.
   1042   @param Buffer         Pointer to the buffer to set.
   1043 
   1044   @return The status of the set operation.
   1045 
   1046 **/
   1047 #define PcdSetExPtrS(Guid, TokenName, SizeOfBuffer, Buffer) \
   1048                                             LibPcdSetExPtrS ((Guid), PcdTokenEx(Guid,TokenName), (SizeOfBuffer), (Buffer))
   1049 
   1050 
   1051 /**
   1052   Sets an boolean PCD token value based on a GUID and a token name.
   1053 
   1054   Sets the boolean value for the token specified by Guid and TokenName.
   1055   If TokenName is not a valid token in the token space specified by Guid,
   1056   then the module will not build.
   1057 
   1058   If Guid is NULL, then ASSERT().
   1059 
   1060   @param Guid       Pointer to a 128-bit unique value that designates
   1061                     which namespace to retrieve a value from.
   1062   @param TokenName  The name of the PCD token to set the current value for.
   1063   @param Value      The boolean value to set.
   1064 
   1065   @return The status of the set operation.
   1066 
   1067 **/
   1068 #define PcdSetExBoolS(Guid, TokenName, Value) \
   1069                                             LibPcdSetExBoolS ((Guid), PcdTokenEx(Guid,TokenName), (Value))
   1070 
   1071 /**
   1072   This function provides a means by which SKU support can be established in the PCD infrastructure.
   1073 
   1074   Sets the current SKU in the PCD database to the value specified by SkuId.  SkuId is returned.
   1075 
   1076   @param  SkuId   The SKU value that will be used when the PCD service retrieves and sets values
   1077                   associated with a PCD token.
   1078 
   1079   @return  Return the SKU ID that was set.
   1080 
   1081 **/
   1082 UINTN
   1083 EFIAPI
   1084 LibPcdSetSku (
   1085   IN UINTN   SkuId
   1086   );
   1087 
   1088 
   1089 /**
   1090   This function provides a means by which to retrieve a value for a given PCD token.
   1091 
   1092   Returns the 8-bit value for the token specified by TokenNumber.
   1093 
   1094   @param[in]  TokenNumber The PCD token number to retrieve a current value for.
   1095 
   1096   @return Returns the 8-bit value for the token specified by TokenNumber.
   1097 
   1098 **/
   1099 UINT8
   1100 EFIAPI
   1101 LibPcdGet8 (
   1102   IN UINTN             TokenNumber
   1103   );
   1104 
   1105 
   1106 /**
   1107   This function provides a means by which to retrieve a value for a given PCD token.
   1108 
   1109   Returns the 16-bit value for the token specified by TokenNumber.
   1110 
   1111   @param[in]  TokenNumber The PCD token number to retrieve a current value for.
   1112 
   1113   @return Returns the 16-bit value for the token specified by TokenNumber.
   1114 
   1115 **/
   1116 UINT16
   1117 EFIAPI
   1118 LibPcdGet16 (
   1119   IN UINTN             TokenNumber
   1120   );
   1121 
   1122 
   1123 /**
   1124   This function provides a means by which to retrieve a value for a given PCD token.
   1125 
   1126   Returns the 32-bit value for the token specified by TokenNumber.
   1127 
   1128   @param[in]  TokenNumber The PCD token number to retrieve a current value for.
   1129 
   1130   @return Returns the 32-bit value for the token specified by TokenNumber.
   1131 
   1132 **/
   1133 UINT32
   1134 EFIAPI
   1135 LibPcdGet32 (
   1136   IN UINTN             TokenNumber
   1137   );
   1138 
   1139 
   1140 /**
   1141   This function provides a means by which to retrieve a value for a given PCD token.
   1142 
   1143   Returns the 64-bit value for the token specified by TokenNumber.
   1144 
   1145   @param[in]  TokenNumber The PCD token number to retrieve a current value for.
   1146 
   1147   @return Returns the 64-bit value for the token specified by TokenNumber.
   1148 
   1149 **/
   1150 UINT64
   1151 EFIAPI
   1152 LibPcdGet64 (
   1153   IN UINTN             TokenNumber
   1154   );
   1155 
   1156 
   1157 /**
   1158   This function provides a means by which to retrieve a value for a given PCD token.
   1159 
   1160   Returns the pointer to the buffer of the token specified by TokenNumber.
   1161 
   1162   @param[in]  TokenNumber The PCD token number to retrieve a current value for.
   1163 
   1164   @return Returns the pointer to the token specified by TokenNumber.
   1165 
   1166 **/
   1167 VOID *
   1168 EFIAPI
   1169 LibPcdGetPtr (
   1170   IN UINTN             TokenNumber
   1171   );
   1172 
   1173 
   1174 /**
   1175   This function provides a means by which to retrieve a value for a given PCD token.
   1176 
   1177   Returns the Boolean value of the token specified by TokenNumber.
   1178 
   1179   @param[in]  TokenNumber The PCD token number to retrieve a current value for.
   1180 
   1181   @return Returns the Boolean value of the token specified by TokenNumber.
   1182 
   1183 **/
   1184 BOOLEAN
   1185 EFIAPI
   1186 LibPcdGetBool (
   1187   IN UINTN             TokenNumber
   1188   );
   1189 
   1190 
   1191 /**
   1192   This function provides a means by which to retrieve the size of a given PCD token.
   1193 
   1194   @param[in]  TokenNumber The PCD token number to retrieve a current value for.
   1195 
   1196   @return Returns the size of the token specified by TokenNumber.
   1197 
   1198 **/
   1199 UINTN
   1200 EFIAPI
   1201 LibPcdGetSize (
   1202   IN UINTN             TokenNumber
   1203   );
   1204 
   1205 
   1206 /**
   1207   This function provides a means by which to retrieve a value for a given PCD token.
   1208 
   1209   Returns the 8-bit value for the token specified by TokenNumber and Guid.
   1210 
   1211   If Guid is NULL, then ASSERT().
   1212 
   1213   @param[in]  Guid         Pointer to a 128-bit unique value that designates
   1214                            which namespace to retrieve a value from.
   1215   @param[in]  TokenNumber  The PCD token number to retrieve a current value for.
   1216 
   1217   @return Return the UINT8.
   1218 
   1219 **/
   1220 UINT8
   1221 EFIAPI
   1222 LibPcdGetEx8 (
   1223   IN CONST GUID        *Guid,
   1224   IN UINTN             TokenNumber
   1225   );
   1226 
   1227 
   1228 /**
   1229   This function provides a means by which to retrieve a value for a given PCD token.
   1230 
   1231   Returns the 16-bit value for the token specified by TokenNumber and Guid.
   1232 
   1233   If Guid is NULL, then ASSERT().
   1234 
   1235   @param[in]  Guid         Pointer to a 128-bit unique value that designates
   1236                            which namespace to retrieve a value from.
   1237   @param[in]  TokenNumber  The PCD token number to retrieve a current value for.
   1238 
   1239   @return Return the UINT16.
   1240 
   1241 **/
   1242 UINT16
   1243 EFIAPI
   1244 LibPcdGetEx16 (
   1245   IN CONST GUID        *Guid,
   1246   IN UINTN             TokenNumber
   1247   );
   1248 
   1249 
   1250 /**
   1251   Returns the 32-bit value for the token specified by TokenNumber and Guid.
   1252   If Guid is NULL, then ASSERT().
   1253 
   1254   @param[in]  Guid         Pointer to a 128-bit unique value that designates
   1255                            which namespace to retrieve a value from.
   1256   @param[in]  TokenNumber  The PCD token number to retrieve a current value for.
   1257 
   1258   @return Return the UINT32.
   1259 
   1260 **/
   1261 UINT32
   1262 EFIAPI
   1263 LibPcdGetEx32 (
   1264   IN CONST GUID        *Guid,
   1265   IN UINTN             TokenNumber
   1266   );
   1267 
   1268 
   1269 /**
   1270   This function provides a means by which to retrieve a value for a given PCD token.
   1271 
   1272   Returns the 64-bit value for the token specified by TokenNumber and Guid.
   1273 
   1274   If Guid is NULL, then ASSERT().
   1275 
   1276   @param[in]  Guid          Pointer to a 128-bit unique value that designates
   1277                             which namespace to retrieve a value from.
   1278   @param[in]  TokenNumber   The PCD token number to retrieve a current value for.
   1279 
   1280   @return Return the UINT64.
   1281 
   1282 **/
   1283 UINT64
   1284 EFIAPI
   1285 LibPcdGetEx64 (
   1286   IN CONST GUID        *Guid,
   1287   IN UINTN             TokenNumber
   1288   );
   1289 
   1290 
   1291 /**
   1292   This function provides a means by which to retrieve a value for a given PCD token.
   1293 
   1294   Returns the pointer to the buffer of token specified by TokenNumber and Guid.
   1295 
   1296   If Guid is NULL, then ASSERT().
   1297 
   1298   @param[in]  Guid          Pointer to a 128-bit unique value that designates
   1299                             which namespace to retrieve a value from.
   1300   @param[in]  TokenNumber   The PCD token number to retrieve a current value for.
   1301 
   1302   @return Return the VOID* pointer.
   1303 
   1304 **/
   1305 VOID *
   1306 EFIAPI
   1307 LibPcdGetExPtr (
   1308   IN CONST GUID        *Guid,
   1309   IN UINTN             TokenNumber
   1310   );
   1311 
   1312 
   1313 /**
   1314   This function provides a means by which to retrieve a value for a given PCD token.
   1315 
   1316   Returns the Boolean value of the token specified by TokenNumber and Guid.
   1317 
   1318   If Guid is NULL, then ASSERT().
   1319 
   1320   @param[in]  Guid          Pointer to a 128-bit unique value that designates
   1321                             which namespace to retrieve a value from.
   1322   @param[in]  TokenNumber   The PCD token number to retrieve a current value for.
   1323 
   1324   @return Return the BOOLEAN.
   1325 
   1326 **/
   1327 BOOLEAN
   1328 EFIAPI
   1329 LibPcdGetExBool (
   1330   IN CONST GUID        *Guid,
   1331   IN UINTN             TokenNumber
   1332   );
   1333 
   1334 
   1335 /**
   1336   This function provides a means by which to retrieve the size of a given PCD token.
   1337 
   1338   Returns the size of the token specified by TokenNumber and Guid.
   1339 
   1340   If Guid is NULL, then ASSERT().
   1341 
   1342   @param[in]  Guid          Pointer to a 128-bit unique value that designates
   1343                             which namespace to retrieve a value from.
   1344   @param[in]  TokenNumber   The PCD token number to retrieve a current value for.
   1345 
   1346   @return Return the size.
   1347 
   1348 **/
   1349 UINTN
   1350 EFIAPI
   1351 LibPcdGetExSize (
   1352   IN CONST GUID        *Guid,
   1353   IN UINTN             TokenNumber
   1354   );
   1355 
   1356 
   1357 #ifndef DISABLE_NEW_DEPRECATED_INTERFACES
   1358 /**
   1359   This function provides a means by which to set a value for a given PCD token.
   1360 
   1361   Sets the 8-bit value for the token specified by TokenNumber
   1362   to the value specified by Value.  Value is returned.
   1363 
   1364   @param[in]  TokenNumber   The PCD token number to set a current value for.
   1365   @param[in]  Value         The 8-bit value to set.
   1366 
   1367   @return Return the Value that was set.
   1368 
   1369 **/
   1370 UINT8
   1371 EFIAPI
   1372 LibPcdSet8 (
   1373   IN UINTN             TokenNumber,
   1374   IN UINT8             Value
   1375   );
   1376 
   1377 
   1378 /**
   1379   This function provides a means by which to set a value for a given PCD token.
   1380 
   1381   Sets the 16-bit value for the token specified by TokenNumber
   1382   to the value specified by Value.  Value is returned.
   1383 
   1384   @param[in]  TokenNumber   The PCD token number to set a current value for.
   1385   @param[in]  Value         The 16-bit value to set.
   1386 
   1387   @return Return the Value that was set.
   1388 
   1389 **/
   1390 UINT16
   1391 EFIAPI
   1392 LibPcdSet16 (
   1393   IN UINTN             TokenNumber,
   1394   IN UINT16            Value
   1395   );
   1396 
   1397 
   1398 /**
   1399   This function provides a means by which to set a value for a given PCD token.
   1400 
   1401   Sets the 32-bit value for the token specified by TokenNumber
   1402   to the value specified by Value.  Value is returned.
   1403 
   1404   @param[in]  TokenNumber   The PCD token number to set a current value for.
   1405   @param[in]  Value         The 32-bit value to set.
   1406 
   1407   @return Return the Value that was set.
   1408 
   1409 **/
   1410 UINT32
   1411 EFIAPI
   1412 LibPcdSet32 (
   1413   IN UINTN             TokenNumber,
   1414   IN UINT32            Value
   1415   );
   1416 
   1417 
   1418 /**
   1419   This function provides a means by which to set a value for a given PCD token.
   1420 
   1421   Sets the 64-bit value for the token specified by TokenNumber
   1422   to the value specified by Value.  Value is returned.
   1423 
   1424   @param[in]  TokenNumber   The PCD token number to set a current value for.
   1425   @param[in]  Value         The 64-bit value to set.
   1426 
   1427   @return Return the Value that was set.
   1428 
   1429 **/
   1430 UINT64
   1431 EFIAPI
   1432 LibPcdSet64 (
   1433   IN UINTN             TokenNumber,
   1434   IN UINT64            Value
   1435   );
   1436 
   1437 
   1438 /**
   1439   This function provides a means by which to set a value for a given PCD token.
   1440 
   1441   Sets a buffer for the token specified by TokenNumber to the value
   1442   specified by Buffer and SizeOfBuffer.  Buffer is returned.
   1443   If SizeOfBuffer is greater than the maximum size support by TokenNumber,
   1444   then set SizeOfBuffer to the maximum size supported by TokenNumber and
   1445   return NULL to indicate that the set operation was not actually performed.
   1446 
   1447   If SizeOfBuffer is set to MAX_ADDRESS, then SizeOfBuffer must be set to the
   1448   maximum size supported by TokenName and NULL must be returned.
   1449 
   1450   If SizeOfBuffer is NULL, then ASSERT().
   1451   If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT().
   1452 
   1453   @param[in]      TokenNumber   The PCD token number to set a current value for.
   1454   @param[in, out] SizeOfBuffer  The size, in bytes, of Buffer.
   1455   @param[in]      Buffer        A pointer to the buffer to set.
   1456 
   1457   @return Return the pointer for the Buffer that was set.
   1458 
   1459 **/
   1460 VOID *
   1461 EFIAPI
   1462 LibPcdSetPtr (
   1463   IN        UINTN             TokenNumber,
   1464   IN OUT    UINTN             *SizeOfBuffer,
   1465   IN CONST  VOID              *Buffer
   1466   );
   1467 
   1468 
   1469 /**
   1470   This function provides a means by which to set a value for a given PCD token.
   1471 
   1472   Sets the Boolean value for the token specified by TokenNumber
   1473   to the value specified by Value.  Value is returned.
   1474 
   1475   @param[in]  TokenNumber   The PCD token number to set a current value for.
   1476   @param[in]  Value         The boolean value to set.
   1477 
   1478   @return Return the Value that was set.
   1479 
   1480 **/
   1481 BOOLEAN
   1482 EFIAPI
   1483 LibPcdSetBool (
   1484   IN UINTN             TokenNumber,
   1485   IN BOOLEAN           Value
   1486   );
   1487 
   1488 
   1489 /**
   1490   This function provides a means by which to set a value for a given PCD token.
   1491 
   1492   Sets the 8-bit value for the token specified by TokenNumber and
   1493   Guid to the value specified by Value. Value is returned.
   1494 
   1495   If Guid is NULL, then ASSERT().
   1496 
   1497   @param[in]  Guid          Pointer to a 128-bit unique value that
   1498                             designates which namespace to set a value from.
   1499   @param[in]  TokenNumber   The PCD token number to set a current value for.
   1500   @param[in]  Value         The 8-bit value to set.
   1501 
   1502   @return Return the Value that was set.
   1503 
   1504 **/
   1505 UINT8
   1506 EFIAPI
   1507 LibPcdSetEx8 (
   1508   IN CONST GUID        *Guid,
   1509   IN UINTN             TokenNumber,
   1510   IN UINT8             Value
   1511   );
   1512 
   1513 
   1514 /**
   1515   This function provides a means by which to set a value for a given PCD token.
   1516 
   1517   Sets the 16-bit value for the token specified by TokenNumber and
   1518   Guid to the value specified by Value. Value is returned.
   1519 
   1520   If Guid is NULL, then ASSERT().
   1521 
   1522   @param[in]  Guid          Pointer to a 128-bit unique value that
   1523                             designates which namespace to set a value from.
   1524   @param[in]  TokenNumber   The PCD token number to set a current value for.
   1525   @param[in]  Value         The 16-bit value to set.
   1526 
   1527   @return Return the Value that was set.
   1528 
   1529 **/
   1530 UINT16
   1531 EFIAPI
   1532 LibPcdSetEx16 (
   1533   IN CONST GUID        *Guid,
   1534   IN UINTN             TokenNumber,
   1535   IN UINT16            Value
   1536   );
   1537 
   1538 
   1539 /**
   1540   This function provides a means by which to set a value for a given PCD token.
   1541 
   1542   Sets the 32-bit value for the token specified by TokenNumber and
   1543   Guid to the value specified by Value. Value is returned.
   1544 
   1545   If Guid is NULL, then ASSERT().
   1546 
   1547   @param[in]  Guid          Pointer to a 128-bit unique value that
   1548                             designates which namespace to set a value from.
   1549   @param[in]  TokenNumber   The PCD token number to set a current value for.
   1550   @param[in]  Value         The 32-bit value to set.
   1551 
   1552   @return Return the Value that was set.
   1553 
   1554 **/
   1555 UINT32
   1556 EFIAPI
   1557 LibPcdSetEx32 (
   1558   IN CONST GUID        *Guid,
   1559   IN UINTN             TokenNumber,
   1560   IN UINT32            Value
   1561   );
   1562 
   1563 
   1564 /**
   1565   This function provides a means by which to set a value for a given PCD token.
   1566 
   1567   Sets the 64-bit value for the token specified by TokenNumber and
   1568   Guid to the value specified by Value. Value is returned.
   1569 
   1570   If Guid is NULL, then ASSERT().
   1571 
   1572   @param[in]  Guid          Pointer to a 128-bit unique value that
   1573                             designates which namespace to set a value from.
   1574   @param[in]  TokenNumber   The PCD token number to set a current value for.
   1575   @param[in]  Value         The 64-bit value to set.
   1576 
   1577   @return Return the Value that was set.
   1578 
   1579 **/
   1580 UINT64
   1581 EFIAPI
   1582 LibPcdSetEx64 (
   1583   IN CONST GUID        *Guid,
   1584   IN UINTN             TokenNumber,
   1585   IN UINT64            Value
   1586   );
   1587 
   1588 
   1589 /**
   1590   This function provides a means by which to set a value for a given PCD token.
   1591 
   1592   Sets a buffer for the token specified by TokenNumber to the value specified by
   1593   Buffer and SizeOfBuffer.  Buffer is returned.  If SizeOfBuffer is greater than
   1594   the maximum size support by TokenNumber, then set SizeOfBuffer to the maximum size
   1595   supported by TokenNumber and return NULL to indicate that the set operation
   1596   was not actually performed.
   1597 
   1598   If Guid is NULL, then ASSERT().
   1599   If SizeOfBuffer is NULL, then ASSERT().
   1600   If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT().
   1601 
   1602   @param[in]  Guid              Pointer to a 128-bit unique value that
   1603                                 designates which namespace to set a value from.
   1604   @param[in]  TokenNumber       The PCD token number to set a current value for.
   1605   @param[in, out] SizeOfBuffer  The size, in bytes, of Buffer.
   1606   @param[in]  Buffer            A pointer to the buffer to set.
   1607 
   1608   @return Return the pointer to the Buffer that was set.
   1609 
   1610 **/
   1611 VOID *
   1612 EFIAPI
   1613 LibPcdSetExPtr (
   1614   IN      CONST GUID        *Guid,
   1615   IN      UINTN             TokenNumber,
   1616   IN OUT  UINTN             *SizeOfBuffer,
   1617   IN      VOID              *Buffer
   1618   );
   1619 
   1620 
   1621 /**
   1622   This function provides a means by which to set a value for a given PCD token.
   1623 
   1624   Sets the Boolean value for the token specified by TokenNumber and
   1625   Guid to the value specified by Value. Value is returned.
   1626 
   1627   If Guid is NULL, then ASSERT().
   1628 
   1629   @param[in]  Guid          Pointer to a 128-bit unique value that
   1630                             designates which namespace to set a value from.
   1631   @param[in]  TokenNumber   The PCD token number to set a current value for.
   1632   @param[in]  Value         The Boolean value to set.
   1633 
   1634   @return Return the Value that was set.
   1635 
   1636 **/
   1637 BOOLEAN
   1638 EFIAPI
   1639 LibPcdSetExBool (
   1640   IN CONST GUID        *Guid,
   1641   IN UINTN             TokenNumber,
   1642   IN BOOLEAN           Value
   1643   );
   1644 #endif
   1645 
   1646 /**
   1647   This function provides a means by which to set a value for a given PCD token.
   1648 
   1649   Sets the 8-bit value for the token specified by TokenNumber
   1650   to the value specified by Value.
   1651 
   1652   @param[in] TokenNumber    The PCD token number to set a current value for.
   1653   @param[in] Value          The 8-bit value to set.
   1654 
   1655   @return The status of the set operation.
   1656 
   1657 **/
   1658 RETURN_STATUS
   1659 EFIAPI
   1660 LibPcdSet8S (
   1661   IN UINTN          TokenNumber,
   1662   IN UINT8          Value
   1663   );
   1664 
   1665 /**
   1666   This function provides a means by which to set a value for a given PCD token.
   1667 
   1668   Sets the 16-bit value for the token specified by TokenNumber
   1669   to the value specified by Value.
   1670 
   1671   @param[in] TokenNumber    The PCD token number to set a current value for.
   1672   @param[in] Value          The 16-bit value to set.
   1673 
   1674   @return The status of the set operation.
   1675 
   1676 **/
   1677 RETURN_STATUS
   1678 EFIAPI
   1679 LibPcdSet16S (
   1680   IN UINTN          TokenNumber,
   1681   IN UINT16         Value
   1682   );
   1683 
   1684 /**
   1685   This function provides a means by which to set a value for a given PCD token.
   1686 
   1687   Sets the 32-bit value for the token specified by TokenNumber
   1688   to the value specified by Value.
   1689 
   1690   @param[in] TokenNumber    The PCD token number to set a current value for.
   1691   @param[in] Value          The 32-bit value to set.
   1692 
   1693   @return The status of the set operation.
   1694 
   1695 **/
   1696 RETURN_STATUS
   1697 EFIAPI
   1698 LibPcdSet32S (
   1699   IN UINTN          TokenNumber,
   1700   IN UINT32         Value
   1701   );
   1702 
   1703 /**
   1704   This function provides a means by which to set a value for a given PCD token.
   1705 
   1706   Sets the 64-bit value for the token specified by TokenNumber
   1707   to the value specified by Value.
   1708 
   1709   @param[in] TokenNumber    The PCD token number to set a current value for.
   1710   @param[in] Value          The 64-bit value to set.
   1711 
   1712   @return The status of the set operation.
   1713 
   1714 **/
   1715 RETURN_STATUS
   1716 EFIAPI
   1717 LibPcdSet64S (
   1718   IN UINTN          TokenNumber,
   1719   IN UINT64         Value
   1720   );
   1721 
   1722 /**
   1723   This function provides a means by which to set a value for a given PCD token.
   1724 
   1725   Sets a buffer for the token specified by TokenNumber to the value specified
   1726   by Buffer and SizeOfBuffer. If SizeOfBuffer is greater than the maximum size
   1727   support by TokenNumber, then set SizeOfBuffer to the maximum size supported by
   1728   TokenNumber and return RETURN_INVALID_PARAMETER to indicate that the set operation
   1729   was not actually performed.
   1730 
   1731   If SizeOfBuffer is set to MAX_ADDRESS, then SizeOfBuffer must be set to the
   1732   maximum size supported by TokenName and RETURN_INVALID_PARAMETER must be returned.
   1733 
   1734   If SizeOfBuffer is NULL, then ASSERT().
   1735   If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT().
   1736 
   1737   @param[in]      TokenNumber   The PCD token number to set a current value for.
   1738   @param[in, out] SizeOfBuffer  The size, in bytes, of Buffer.
   1739   @param[in]      Buffer        A pointer to the buffer to set.
   1740 
   1741   @return The status of the set operation.
   1742 
   1743 **/
   1744 RETURN_STATUS
   1745 EFIAPI
   1746 LibPcdSetPtrS (
   1747   IN       UINTN    TokenNumber,
   1748   IN OUT   UINTN    *SizeOfBuffer,
   1749   IN CONST VOID     *Buffer
   1750   );
   1751 
   1752 /**
   1753   This function provides a means by which to set a value for a given PCD token.
   1754 
   1755   Sets the boolean value for the token specified by TokenNumber
   1756   to the value specified by Value.
   1757 
   1758   @param[in] TokenNumber    The PCD token number to set a current value for.
   1759   @param[in] Value          The boolean value to set.
   1760 
   1761   @return The status of the set operation.
   1762 
   1763 **/
   1764 RETURN_STATUS
   1765 EFIAPI
   1766 LibPcdSetBoolS (
   1767   IN UINTN          TokenNumber,
   1768   IN BOOLEAN        Value
   1769   );
   1770 
   1771 /**
   1772   This function provides a means by which to set a value for a given PCD token.
   1773 
   1774   Sets the 8-bit value for the token specified by TokenNumber
   1775   to the value specified by Value.
   1776 
   1777   If Guid is NULL, then ASSERT().
   1778 
   1779   @param[in] Guid           The pointer to a 128-bit unique value that
   1780                             designates which namespace to set a value from.
   1781   @param[in] TokenNumber    The PCD token number to set a current value for.
   1782   @param[in] Value          The 8-bit value to set.
   1783 
   1784   @return The status of the set operation.
   1785 
   1786 **/
   1787 RETURN_STATUS
   1788 EFIAPI
   1789 LibPcdSetEx8S (
   1790   IN CONST GUID     *Guid,
   1791   IN UINTN          TokenNumber,
   1792   IN UINT8          Value
   1793   );
   1794 
   1795 /**
   1796   This function provides a means by which to set a value for a given PCD token.
   1797 
   1798   Sets the 16-bit value for the token specified by TokenNumber
   1799   to the value specified by Value.
   1800 
   1801   If Guid is NULL, then ASSERT().
   1802 
   1803   @param[in] Guid           The pointer to a 128-bit unique value that
   1804                             designates which namespace to set a value from.
   1805   @param[in] TokenNumber    The PCD token number to set a current value for.
   1806   @param[in] Value          The 16-bit value to set.
   1807 
   1808   @return The status of the set operation.
   1809 
   1810 **/
   1811 RETURN_STATUS
   1812 EFIAPI
   1813 LibPcdSetEx16S (
   1814   IN CONST GUID     *Guid,
   1815   IN UINTN          TokenNumber,
   1816   IN UINT16         Value
   1817   );
   1818 
   1819 /**
   1820   This function provides a means by which to set a value for a given PCD token.
   1821 
   1822   Sets the 32-bit value for the token specified by TokenNumber
   1823   to the value specified by Value.
   1824 
   1825   If Guid is NULL, then ASSERT().
   1826 
   1827   @param[in] Guid           The pointer to a 128-bit unique value that
   1828                             designates which namespace to set a value from.
   1829   @param[in] TokenNumber    The PCD token number to set a current value for.
   1830   @param[in] Value          The 32-bit value to set.
   1831 
   1832   @return The status of the set operation.
   1833 
   1834 **/
   1835 RETURN_STATUS
   1836 EFIAPI
   1837 LibPcdSetEx32S (
   1838   IN CONST GUID     *Guid,
   1839   IN UINTN          TokenNumber,
   1840   IN UINT32         Value
   1841   );
   1842 
   1843 /**
   1844   This function provides a means by which to set a value for a given PCD token.
   1845 
   1846   Sets the 64-bit value for the token specified by TokenNumber
   1847   to the value specified by Value.
   1848 
   1849   If Guid is NULL, then ASSERT().
   1850 
   1851   @param[in] Guid           The pointer to a 128-bit unique value that
   1852                             designates which namespace to set a value from.
   1853   @param[in] TokenNumber    The PCD token number to set a current value for.
   1854   @param[in] Value          The 64-bit value to set.
   1855 
   1856   @return The status of the set operation.
   1857 
   1858 **/
   1859 RETURN_STATUS
   1860 EFIAPI
   1861 LibPcdSetEx64S (
   1862   IN CONST GUID     *Guid,
   1863   IN UINTN          TokenNumber,
   1864   IN UINT64         Value
   1865   );
   1866 
   1867 /**
   1868   This function provides a means by which to set a value for a given PCD token.
   1869 
   1870   Sets a buffer for the token specified by TokenNumber to the value specified by
   1871   Buffer and SizeOfBuffer. If SizeOfBuffer is greater than the maximum size
   1872   support by TokenNumber, then set SizeOfBuffer to the maximum size supported by
   1873   TokenNumber and return RETURN_INVALID_PARAMETER to indicate that the set operation
   1874   was not actually performed.
   1875 
   1876   If Guid is NULL, then ASSERT().
   1877   If SizeOfBuffer is NULL, then ASSERT().
   1878   If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT().
   1879 
   1880   @param[in]      Guid          Pointer to a 128-bit unique value that
   1881                                 designates which namespace to set a value from.
   1882   @param[in]      TokenNumber   The PCD token number to set a current value for.
   1883   @param[in, out] SizeOfBuffer  The size, in bytes, of Buffer.
   1884   @param[in]      Buffer        A pointer to the buffer to set.
   1885 
   1886   @return The status of the set operation.
   1887 
   1888 **/
   1889 RETURN_STATUS
   1890 EFIAPI
   1891 LibPcdSetExPtrS (
   1892   IN CONST GUID     *Guid,
   1893   IN       UINTN    TokenNumber,
   1894   IN OUT   UINTN    *SizeOfBuffer,
   1895   IN       VOID     *Buffer
   1896   );
   1897 
   1898 /**
   1899   This function provides a means by which to set a value for a given PCD token.
   1900 
   1901   Sets the boolean value for the token specified by TokenNumber
   1902   to the value specified by Value.
   1903 
   1904   If Guid is NULL, then ASSERT().
   1905 
   1906   @param[in] Guid           The pointer to a 128-bit unique value that
   1907                             designates which namespace to set a value from.
   1908   @param[in] TokenNumber    The PCD token number to set a current value for.
   1909   @param[in] Value          The boolean value to set.
   1910 
   1911   @return The status of the set operation.
   1912 
   1913 **/
   1914 RETURN_STATUS
   1915 EFIAPI
   1916 LibPcdSetExBoolS (
   1917   IN CONST GUID     *Guid,
   1918   IN UINTN          TokenNumber,
   1919   IN BOOLEAN        Value
   1920   );
   1921 
   1922 /**
   1923   This notification function serves two purposes.
   1924 
   1925   Firstly, it notifies the module that did the registration that the value of this
   1926   PCD token has been set.
   1927   Secondly, it provides a mechanism for the module that did the registration to intercept
   1928   the set operation and override the value been set if necessary. After the invocation of
   1929   the callback function, TokenData will be used by PCD service PEIM or driver to modify th
   1930   internal data in PCD database.
   1931 
   1932   @param[in]      CallBackGuid    The PCD token GUID being set.
   1933   @param[in]      CallBackToken   The PCD token number being set.
   1934   @param[in, out] TokenData       A pointer to the token data being set.
   1935   @param[in]      TokenDataSize   The size, in bytes, of the data being set.
   1936 
   1937 **/
   1938 typedef
   1939 VOID
   1940 (EFIAPI *PCD_CALLBACK)(
   1941   IN        CONST GUID        *CallBackGuid, OPTIONAL
   1942   IN        UINTN             CallBackToken,
   1943   IN  OUT   VOID              *TokenData,
   1944   IN        UINTN             TokenDataSize
   1945   );
   1946 
   1947 
   1948 /**
   1949   Set up a notification function that is called when a specified token is set.
   1950 
   1951   When the token specified by TokenNumber and Guid is set,
   1952   then notification function specified by NotificationFunction is called.
   1953   If Guid is NULL, then the default token space is used.
   1954   If NotificationFunction is NULL, then ASSERT().
   1955 
   1956   @param[in]  Guid                  Pointer to a 128-bit unique value that designates which
   1957                                     namespace to set a value from.  If NULL, then the default
   1958                                     token space is used.
   1959   @param[in]  TokenNumber           The PCD token number to monitor.
   1960   @param[in]  NotificationFunction  The function to call when the token
   1961                                     specified by Guid and TokenNumber is set.
   1962 
   1963 **/
   1964 VOID
   1965 EFIAPI
   1966 LibPcdCallbackOnSet (
   1967   IN CONST GUID               *Guid,       OPTIONAL
   1968   IN UINTN                    TokenNumber,
   1969   IN PCD_CALLBACK             NotificationFunction
   1970   );
   1971 
   1972 
   1973 /**
   1974   Disable a notification function that was established with LibPcdCallbackonSet().
   1975 
   1976   Disable a notification function that was previously established with LibPcdCallbackOnSet().
   1977   If NotificationFunction is NULL, then ASSERT().
   1978   If LibPcdCallbackOnSet() was not previously called with Guid, TokenNumber,
   1979   and NotificationFunction, then ASSERT().
   1980 
   1981   @param[in]  Guid                 Specify the GUID token space.
   1982   @param[in]  TokenNumber          Specify the token number.
   1983   @param[in]  NotificationFunction The callback function to be unregistered.
   1984 
   1985 **/
   1986 VOID
   1987 EFIAPI
   1988 LibPcdCancelCallback (
   1989   IN CONST GUID               *Guid,       OPTIONAL
   1990   IN UINTN                    TokenNumber,
   1991   IN PCD_CALLBACK             NotificationFunction
   1992   );
   1993 
   1994 
   1995 /**
   1996   Retrieves the next token in a token space.
   1997 
   1998   Retrieves the next PCD token number from the token space specified by Guid.
   1999   If Guid is NULL, then the default token space is used.  If TokenNumber is 0,
   2000   then the first token number is returned.  Otherwise, the token number that
   2001   follows TokenNumber in the token space is returned.  If TokenNumber is the last
   2002   token number in the token space, then 0 is returned.
   2003 
   2004   If TokenNumber is not 0 and is not in the token space specified by Guid, then ASSERT().
   2005 
   2006   @param[in]  Guid        Pointer to a 128-bit unique value that designates which namespace
   2007                           to set a value from.  If NULL, then the default token space is used.
   2008   @param[in]  TokenNumber The previous PCD token number.  If 0, then retrieves the first PCD
   2009                           token number.
   2010 
   2011   @return The next valid token number.
   2012 
   2013 **/
   2014 UINTN
   2015 EFIAPI
   2016 LibPcdGetNextToken (
   2017   IN CONST GUID               *Guid,       OPTIONAL
   2018   IN UINTN                    TokenNumber
   2019   );
   2020 
   2021 
   2022 
   2023 /**
   2024   Used to retrieve the list of available PCD token space GUIDs.
   2025 
   2026   Returns the PCD token space GUID that follows TokenSpaceGuid in the list of token spaces
   2027   in the platform.
   2028   If TokenSpaceGuid is NULL, then a pointer to the first PCD token spaces returned.
   2029   If TokenSpaceGuid is the last PCD token space GUID in the list, then NULL is returned.
   2030 
   2031   @param  TokenSpaceGuid  Pointer to the a PCD token space GUID
   2032 
   2033   @return The next valid token namespace.
   2034 
   2035 **/
   2036 GUID *
   2037 EFIAPI
   2038 LibPcdGetNextTokenSpace (
   2039   IN CONST GUID  *TokenSpaceGuid
   2040   );
   2041 
   2042 
   2043 /**
   2044   Sets a value of a patchable PCD entry that is type pointer.
   2045 
   2046   Sets the PCD entry specified by PatchVariable to the value specified by Buffer
   2047   and SizeOfBuffer.  Buffer is returned.  If SizeOfBuffer is greater than
   2048   MaximumDatumSize, then set SizeOfBuffer to MaximumDatumSize and return
   2049   NULL to indicate that the set operation was not actually performed.
   2050   If SizeOfBuffer is set to MAX_ADDRESS, then SizeOfBuffer must be set to
   2051   MaximumDatumSize and NULL must be returned.
   2052 
   2053   If PatchVariable is NULL, then ASSERT().
   2054   If SizeOfBuffer is NULL, then ASSERT().
   2055   If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT().
   2056 
   2057   @param[out] PatchVariable     A pointer to the global variable in a module that is
   2058                                 the target of the set operation.
   2059   @param[in] MaximumDatumSize   The maximum size allowed for the PCD entry specified by PatchVariable.
   2060   @param[in, out] SizeOfBuffer  A pointer to the size, in bytes, of Buffer.
   2061   @param[in] Buffer             A pointer to the buffer to used to set the target variable.
   2062 
   2063   @return Return the pointer to the Buffer that was set.
   2064 
   2065 **/
   2066 VOID *
   2067 EFIAPI
   2068 LibPatchPcdSetPtr (
   2069   OUT        VOID       *PatchVariable,
   2070   IN        UINTN       MaximumDatumSize,
   2071   IN OUT    UINTN       *SizeOfBuffer,
   2072   IN CONST  VOID        *Buffer
   2073   );
   2074 
   2075 /**
   2076   Sets a value of a patchable PCD entry that is type pointer.
   2077 
   2078   Sets the PCD entry specified by PatchVariable to the value specified
   2079   by Buffer and SizeOfBuffer. If SizeOfBuffer is greater than MaximumDatumSize,
   2080   then set SizeOfBuffer to MaximumDatumSize and return RETURN_INVALID_PARAMETER
   2081   to indicate that the set operation was not actually performed.
   2082   If SizeOfBuffer is set to MAX_ADDRESS, then SizeOfBuffer must be set to
   2083   MaximumDatumSize and RETURN_INVALID_PARAMETER must be returned.
   2084 
   2085   If PatchVariable is NULL, then ASSERT().
   2086   If SizeOfBuffer is NULL, then ASSERT().
   2087   If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT().
   2088 
   2089   @param[out] PatchVariable     A pointer to the global variable in a module that is
   2090                                 the target of the set operation.
   2091   @param[in] MaximumDatumSize   The maximum size allowed for the PCD entry specified by PatchVariable.
   2092   @param[in, out] SizeOfBuffer  A pointer to the size, in bytes, of Buffer.
   2093   @param[in] Buffer             A pointer to the buffer to used to set the target variable.
   2094 
   2095   @return The status of the set operation.
   2096 
   2097 **/
   2098 RETURN_STATUS
   2099 EFIAPI
   2100 LibPatchPcdSetPtrS (
   2101   OUT      VOID     *PatchVariable,
   2102   IN       UINTN    MaximumDatumSize,
   2103   IN OUT   UINTN    *SizeOfBuffer,
   2104   IN CONST VOID     *Buffer
   2105   );
   2106 
   2107 /**
   2108   Sets a value and size of a patchable PCD entry that is type pointer.
   2109 
   2110   Sets the PCD entry specified by PatchVariable to the value specified by Buffer
   2111   and SizeOfBuffer. Buffer is returned.  If SizeOfBuffer is greater than
   2112   MaximumDatumSize, then set SizeOfBuffer to MaximumDatumSize and return
   2113   NULL to indicate that the set operation was not actually performed.
   2114   If SizeOfBuffer is set to MAX_ADDRESS, then SizeOfBuffer must be set to
   2115   MaximumDatumSize and NULL must be returned.
   2116 
   2117   If PatchVariable is NULL, then ASSERT().
   2118   If SizeOfPatchVariable is NULL, then ASSERT().
   2119   If SizeOfBuffer is NULL, then ASSERT().
   2120   If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT().
   2121 
   2122   @param[out] PatchVariable     A pointer to the global variable in a module that is
   2123                                 the target of the set operation.
   2124   @param[out] SizeOfPatchVariable A pointer to the size, in bytes, of PatchVariable.
   2125   @param[in] MaximumDatumSize   The maximum size allowed for the PCD entry specified by PatchVariable.
   2126   @param[in, out] SizeOfBuffer  A pointer to the size, in bytes, of Buffer.
   2127   @param[in] Buffer             A pointer to the buffer to used to set the target variable.
   2128 
   2129   @return Return the pointer to the Buffer that was set.
   2130 
   2131 **/
   2132 VOID *
   2133 EFIAPI
   2134 LibPatchPcdSetPtrAndSize (
   2135   OUT       VOID        *PatchVariable,
   2136   OUT       UINTN       *SizeOfPatchVariable,
   2137   IN        UINTN       MaximumDatumSize,
   2138   IN OUT    UINTN       *SizeOfBuffer,
   2139   IN CONST  VOID        *Buffer
   2140   );
   2141 
   2142 /**
   2143   Sets a value and size of a patchable PCD entry that is type pointer.
   2144 
   2145   Sets the PCD entry specified by PatchVariable to the value specified
   2146   by Buffer and SizeOfBuffer. If SizeOfBuffer is greater than MaximumDatumSize,
   2147   then set SizeOfBuffer to MaximumDatumSize and return RETURN_INVALID_PARAMETER
   2148   to indicate that the set operation was not actually performed.
   2149   If SizeOfBuffer is set to MAX_ADDRESS, then SizeOfBuffer must be set to
   2150   MaximumDatumSize and RETURN_INVALID_PARAMETER must be returned.
   2151 
   2152   If PatchVariable is NULL, then ASSERT().
   2153   If SizeOfPatchVariable is NULL, then ASSERT().
   2154   If SizeOfBuffer is NULL, then ASSERT().
   2155   If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT().
   2156 
   2157   @param[out] PatchVariable     A pointer to the global variable in a module that is
   2158                                 the target of the set operation.
   2159   @param[out] SizeOfPatchVariable A pointer to the size, in bytes, of PatchVariable.
   2160   @param[in] MaximumDatumSize   The maximum size allowed for the PCD entry specified by PatchVariable.
   2161   @param[in, out] SizeOfBuffer  A pointer to the size, in bytes, of Buffer.
   2162   @param[in] Buffer             A pointer to the buffer to used to set the target variable.
   2163 
   2164   @return The status of the set operation.
   2165 
   2166 **/
   2167 RETURN_STATUS
   2168 EFIAPI
   2169 LibPatchPcdSetPtrAndSizeS (
   2170   OUT      VOID     *PatchVariable,
   2171   OUT      UINTN    *SizeOfPatchVariable,
   2172   IN       UINTN    MaximumDatumSize,
   2173   IN OUT   UINTN    *SizeOfBuffer,
   2174   IN CONST VOID     *Buffer
   2175   );
   2176 
   2177 typedef enum {
   2178   PCD_TYPE_8,
   2179   PCD_TYPE_16,
   2180   PCD_TYPE_32,
   2181   PCD_TYPE_64,
   2182   PCD_TYPE_BOOL,
   2183   PCD_TYPE_PTR
   2184 } PCD_TYPE;
   2185 
   2186 typedef struct {
   2187   ///
   2188   /// The returned information associated with the requested TokenNumber. If
   2189   /// TokenNumber is 0, then PcdType is set to PCD_TYPE_8.
   2190   ///
   2191   PCD_TYPE          PcdType;
   2192   ///
   2193   /// The size of the data in bytes associated with the TokenNumber specified. If
   2194   /// TokenNumber is 0, then PcdSize is set 0.
   2195   ///
   2196   UINTN             PcdSize;
   2197   ///
   2198   /// The null-terminated ASCII string associated with a given token. If the
   2199   /// TokenNumber specified was 0, then this field corresponds to the null-terminated
   2200   /// ASCII string associated with the token's namespace Guid. If NULL, there is no
   2201   /// name associated with this request.
   2202   ///
   2203   CHAR8             *PcdName;
   2204 } PCD_INFO;
   2205 
   2206 
   2207 /**
   2208   Retrieve additional information associated with a PCD token.
   2209 
   2210   This includes information such as the type of value the TokenNumber is associated with as well as possible
   2211   human readable name that is associated with the token.
   2212 
   2213   If TokenNumber is not in the default token space specified, then ASSERT().
   2214 
   2215   @param[in]    TokenNumber The PCD token number.
   2216   @param[out]   PcdInfo     The returned information associated with the requested TokenNumber.
   2217                             The caller is responsible for freeing the buffer that is allocated by callee for PcdInfo->PcdName.
   2218 **/
   2219 VOID
   2220 EFIAPI
   2221 LibPcdGetInfo (
   2222   IN        UINTN           TokenNumber,
   2223   OUT       PCD_INFO        *PcdInfo
   2224   );
   2225 
   2226 /**
   2227   Retrieve additional information associated with a PCD token.
   2228 
   2229   This includes information such as the type of value the TokenNumber is associated with as well as possible
   2230   human readable name that is associated with the token.
   2231 
   2232   If TokenNumber is not in the token space specified by Guid, then ASSERT().
   2233 
   2234   @param[in]    Guid        The 128-bit unique value that designates the namespace from which to extract the value.
   2235   @param[in]    TokenNumber The PCD token number.
   2236   @param[out]   PcdInfo     The returned information associated with the requested TokenNumber.
   2237                             The caller is responsible for freeing the buffer that is allocated by callee for PcdInfo->PcdName.
   2238 **/
   2239 VOID
   2240 EFIAPI
   2241 LibPcdGetInfoEx (
   2242   IN CONST  GUID            *Guid,
   2243   IN        UINTN           TokenNumber,
   2244   OUT       PCD_INFO        *PcdInfo
   2245   );
   2246 
   2247 /**
   2248   Retrieve the currently set SKU Id.
   2249 
   2250   @return   The currently set SKU Id. If the platform has not set at a SKU Id, then the
   2251             default SKU Id value of 0 is returned. If the platform has set a SKU Id, then the currently set SKU
   2252             Id is returned.
   2253 **/
   2254 UINTN
   2255 EFIAPI
   2256 LibPcdGetSku (
   2257   VOID
   2258   );
   2259 
   2260 #endif
   2261