2 PCD Library Class Interface Declarations
4 Copyright (c) 2006 - 2007, Intel Corporation
5 All rights reserved. This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
20 #define PCD_INVALID_TOKEN_NUMBER ((UINTN) 0)
22 #define PcdToken(TokenName) _PCD_TOKEN_##TokenName
26 // Feature Flag is in the form of a global constant
28 #define FeaturePcdGet(TokenName) _PCD_GET_MODE_BOOL_##TokenName
32 // Fixed is fixed at build time
34 #define FixedPcdGet8(TokenName) _PCD_VALUE_##TokenName
35 #define FixedPcdGet16(TokenName) _PCD_VALUE_##TokenName
36 #define FixedPcdGet32(TokenName) _PCD_VALUE_##TokenName
37 #define FixedPcdGet64(TokenName) _PCD_VALUE_##TokenName
38 #define FixedPcdGetBool(TokenName) _PCD_VALUE_##TokenName
41 #define FixedPcdGetPtr(TokenName) ((VOID *)_PCD_VALUE_##TokenName)
45 // (Binary) Patch is in the form of a global variable
47 #define PatchPcdGet8(TokenName) _gPcd_BinaryPatch_##TokenName
48 #define PatchPcdGet16(TokenName) _gPcd_BinaryPatch_##TokenName
49 #define PatchPcdGet32(TokenName) _gPcd_BinaryPatch_##TokenName
50 #define PatchPcdGet64(TokenName) _gPcd_BinaryPatch_##TokenName
51 #define PatchPcdGetBool(TokenName) _gPcd_BinaryPatch_##TokenName
52 #define PatchPcdGetPtr(TokenName) ((VOID *)_gPcd_BinaryPatch_##TokenName)
54 #define PatchPcdSet8(TokenName, Value) (_gPcd_BinaryPatch_##TokenName = (Value))
55 #define PatchPcdSet16(TokenName, Value) (_gPcd_BinaryPatch_##TokenName = (Value))
56 #define PatchPcdSet32(TokenName, Value) (_gPcd_BinaryPatch_##TokenName = (Value))
57 #define PatchPcdSet64(TokenName, Value) (_gPcd_BinaryPatch_##TokenName = (Value))
58 #define PatchPcdSetBool(TokenName, Value) (_gPcd_BinaryPatch_##TokenName = (Value))
59 #define PatchPcdSetPtr(TokenName, Size, Buffer) \
61 _gPcd_BinaryPatch_##TokenName, \
62 (UINTN)_PCD_PATCHABLE_##TokenName##_SIZE, \
68 // Dynamic is via the protocol with only the TokenNumber as argument
69 // It can also be Patch or Fixed type based on a build option
71 #define PcdGet8(TokenName) _PCD_GET_MODE_8_##TokenName
72 #define PcdGet16(TokenName) _PCD_GET_MODE_16_##TokenName
73 #define PcdGet32(TokenName) _PCD_GET_MODE_32_##TokenName
74 #define PcdGet64(TokenName) _PCD_GET_MODE_64_##TokenName
75 #define PcdGetPtr(TokenName) _PCD_GET_MODE_PTR_##TokenName
76 #define PcdGetBool(TokenName) _PCD_GET_MODE_BOOL_##TokenName
81 #define PcdSet8(TokenName, Value) _PCD_SET_MODE_8_##TokenName ((Value))
82 #define PcdSet16(TokenName, Value) _PCD_SET_MODE_16_##TokenName ((Value))
83 #define PcdSet32(TokenName, Value) _PCD_SET_MODE_32_##TokenName ((Value))
84 #define PcdSet64(TokenName, Value) _PCD_SET_MODE_64_##TokenName ((Value))
85 #define PcdSetPtr(TokenName, SizeOfBuffer, Buffer) \
86 _PCD_SET_MODE_PTR_##TokenName ((SizeOfBuffer), (Buffer))
87 #define PcdSetBool(TokenName, Value) _PCD_SET_MODE_BOOL_##TokenName ((Value))
90 // Dynamic Ex is to support binary distribution
92 #define PcdGetEx8(Guid, TokenName) LibPcdGetEx8 ((Guid), _PCD_TOKEN_##TokenName)
93 #define PcdGetEx16(Guid, TokenName) LibPcdGetEx16 ((Guid), _PCD_TOKEN_##TokenName)
94 #define PcdGetEx32(Guid, TokenName) LibPcdGetEx32 ((Guid), _PCD_TOKEN_##TokenName)
95 #define PcdGetEx64(Guid, TokenName) LibPcdGetEx64 ((Guid), _PCD_TOKEN_##TokenName)
96 #define PcdGetExPtr(Guid, TokenName) LibPcdGetExPtr ((Guid), _PCD_TOKEN_##TokenName)
97 #define PcdGetExBool(Guid, TokenName) LibPcdGetExBool ((Guid), _PCD_TOKEN_##TokenName)
102 #define PcdSetEx8(Guid, TokenName, Value) LibPcdSetEx8 ((Guid), _PCD_TOKEN_##TokenName, (Value))
103 #define PcdSetEx16(Guid, TokenName, Value) LibPcdSetEx16 ((Guid), _PCD_TOKEN_##TokenName, (Value))
104 #define PcdSetEx32(Guid, TokenName, Value) LibPcdSetEx32 ((Guid), _PCD_TOKEN_##TokenName, (Value))
105 #define PcdSetEx64(Guid, TokenName, Value) LibPcdSetEx64 ((Guid), _PCD_TOKEN_##TokenName, (Value))
106 #define PcdSetExPtr(Guid, TokenName, SizeOfBuffer, Buffer) \
107 LibPcdSetExPtr ((Guid), _PCD_TOKEN_##TokenName, (SizeOfBuffer), (Buffer))
108 #define PcdSetExBool(Guid, TokenName, Value) \
109 LibPcdSetExBool((Guid), _PCD_TOKEN_##TokenName, (Value))
113 Sets the current SKU in the PCD database to the value specified by SkuId. SkuId is returned.
115 @param[in] SkuId The SKU value that will be used when the PCD service will retrieve and
116 set values associated with a PCD token.
118 @retval SKU_ID Return the SKU ID that just be set.
129 Returns the 8-bit value for the token specified by TokenNumber.
131 @param[in] TokenNumber The PCD token number to retrieve a current value for.
133 @retval UINT8 Returns the 8-bit value for the token specified by TokenNumber.
144 Returns the 16-bit value for the token specified by TokenNumber.
146 @param[in] TokenNumber The PCD token number to retrieve a current value for.
148 @retval UINT16 Returns the 16-bit value for the token specified by TokenNumber.
159 Returns the 32-bit value for the token specified by TokenNumber.
161 @param[in] TokenNumber The PCD token number to retrieve a current value for.
163 @retval UINT32 Returns the 32-bit value for the token specified by TokenNumber.
174 Returns the 64-bit value for the token specified by TokenNumber.
176 @param[in] TokenNumber The PCD token number to retrieve a current value for.
178 @retval UINT64 Returns the 64-bit value for the token specified by TokenNumber.
189 Returns the pointer to the buffer of the token specified by TokenNumber.
191 @param[in] TokenNumber The PCD token number to retrieve a current value for.
193 @retval VOID* Returns the pointer to the token specified by TokenNumber.
204 Returns the Boolean value of the token specified by TokenNumber.
206 @param[in] TokenNumber The PCD token number to retrieve a current value for.
208 @retval BOOLEAN Returns the Boolean value of the token specified by TokenNumber.
219 Returns the size of the token specified by TokenNumber.
221 @param[in] TokenNumber The PCD token number to retrieve a current value for.
223 @retval UINTN Returns the size of the token specified by TokenNumber.
234 Returns the 8-bit value for the token specified by TokenNumber and Guid.
235 If Guid is NULL, then ASSERT().
237 @param[in] Guid Pointer to a 128-bit unique value that designates
238 which namespace to retrieve a value from.
239 @param[in] TokenNumber The PCD token number to retrieve a current value for.
241 @retval UINT8 Return the UINT8.
253 Returns the 16-bit value for the token specified by TokenNumber and Guid.
254 If Guid is NULL, then ASSERT().
256 @param[in] Guid Pointer to a 128-bit unique value that designates
257 which namespace to retrieve a value from.
258 @param[in] TokenNumber The PCD token number to retrieve a current value for.
260 @retval UINT16 Return the UINT16.
272 Returns the 32-bit value for the token specified by TokenNumber and Guid.
273 If Guid is NULL, then ASSERT().
275 @param[in] Guid Pointer to a 128-bit unique value that designates
276 which namespace to retrieve a value from.
277 @param[in] TokenNumber The PCD token number to retrieve a current value for.
279 @retval UINT32 Return the UINT32.
291 Returns the 64-bit value for the token specified by TokenNumber and Guid.
292 If Guid is NULL, then ASSERT().
294 @param[in] Guid Pointer to a 128-bit unique value that designates
295 which namespace to retrieve a value from.
296 @param[in] TokenNumber The PCD token number to retrieve a current value for.
298 @retval UINT64 Return the UINT64.
310 Returns the pointer to the buffer of token specified by TokenNumber and Guid.
311 If Guid is NULL, then ASSERT().
313 @param[in] Guid Pointer to a 128-bit unique value that designates
314 which namespace to retrieve a value from.
315 @param[in] TokenNumber The PCD token number to retrieve a current value for.
317 @retval VOID* Return the VOID* pointer.
329 Returns the Boolean value of the token specified by TokenNumber and Guid.
330 If Guid is NULL, then ASSERT().
332 @param[in] Guid Pointer to a 128-bit unique value that designates
333 which namespace to retrieve a value from.
334 @param[in] TokenNumber The PCD token number to retrieve a current value for.
336 @retval BOOLEAN Return the BOOLEAN.
348 Returns the size of the token specified by TokenNumber and Guid.
349 If Guid is NULL, then ASSERT().
351 @param[in] Guid Pointer to a 128-bit unique value that designates
352 which namespace to retrieve a value from.
353 @param[in] TokenNumber The PCD token number to retrieve a current value for.
355 @retval UINTN Return the size.
367 Sets the 8-bit value for the token specified by TokenNumber
368 to the value specified by Value. Value is returned.
370 @param[in] TokenNumber The PCD token number to set a current value for.
371 @param[in] Value The 8-bit value to set.
373 @retval UINT8 Return the value been set.
379 IN UINTN TokenNumber
,
385 Sets the 16-bit value for the token specified by TokenNumber
386 to the value specified by Value. Value is returned.
388 @param[in] TokenNumber The PCD token number to set a current value for.
389 @param[in] Value The 16-bit value to set.
391 @retval UINT16 Return the value been set.
397 IN UINTN TokenNumber
,
403 Sets the 32-bit value for the token specified by TokenNumber
404 to the value specified by Value. Value is returned.
406 @param[in] TokenNumber The PCD token number to set a current value for.
407 @param[in] Value The 32-bit value to set.
409 @retval UINT32 Return the value been set.
415 IN UINTN TokenNumber
,
421 Sets the 64-bit value for the token specified by TokenNumber
422 to the value specified by Value. Value is returned.
424 @param[in] TokenNumber The PCD token number to set a current value for.
425 @param[in] Value The 64-bit value to set.
427 @retval UINT64 Return the value been set.
433 IN UINTN TokenNumber
,
439 Sets a buffer for the token specified by TokenNumber to the value
440 specified by Buffer and SizeOfValue. Buffer is returned.
441 If SizeOfValue is greater than the maximum size support by TokenNumber,
442 then set SizeOfValue to the maximum size supported by TokenNumber and
443 return NULL to indicate that the set operation was not actually performed.
445 If SizeOfValue is set to MAX_ADDRESS, then SizeOfValue must be set to the
446 maximum size supported by TokenName and NULL must be returned.
448 If SizeOfValue is NULL, then ASSERT().
449 If SizeOfValue > 0 and Buffer is NULL, then ASSERT().
451 @param[in] TokenNumber The PCD token number to set a current value for.
452 @param[in,out] SizeOfBuffer The size, in bytes, of Buffer.
453 @param[in] Buffer Value A pointer to the buffer to set.
455 @retval VOID* Return the pointer for the buffer been set.
461 IN UINTN TokenNumber
,
462 IN OUT UINTN
*SizeOfBuffer
,
468 Sets the Boolean value for the token specified by TokenNumber
469 to the value specified by Value. Value is returned.
471 @param[in] TokenNumber The PCD token number to set a current value for.
472 @param[in] Value The boolean value to set.
474 @retval BOOLEAN Return the value been set.
480 IN UINTN TokenNumber
,
486 Sets the 8-bit value for the token specified by TokenNumber and
487 Guid to the value specified by Value. Value is returned.
488 If Guid is NULL, then ASSERT().
490 @param[in] Guid Pointer to a 128-bit unique value that
491 designates which namespace to set a value from.
492 @param[in] TokenNumber The PCD token number to set a current value for.
493 @param[in] Value The 8-bit value to set.
495 @retval UINT8 Return the value been set.
502 IN UINTN TokenNumber
,
508 Sets the 16-bit value for the token specified by TokenNumber and
509 Guid to the value specified by Value. Value is returned.
510 If Guid is NULL, then ASSERT().
512 @param[in] Guid Pointer to a 128-bit unique value that
513 designates which namespace to set a value from.
514 @param[in] TokenNumber The PCD token number to set a current value for.
515 @param[in] Value The 16-bit value to set.
517 @retval UINT8 Return the value been set.
524 IN UINTN TokenNumber
,
530 Sets the 32-bit value for the token specified by TokenNumber and
531 Guid to the value specified by Value. Value is returned.
532 If Guid is NULL, then ASSERT().
534 @param[in] Guid Pointer to a 128-bit unique value that
535 designates which namespace to set a value from.
536 @param[in] TokenNumber The PCD token number to set a current value for.
537 @param[in] Value The 32-bit value to set.
539 @retval UINT32 Return the value been set.
546 IN UINTN TokenNumber
,
552 Sets the 64-bit value for the token specified by TokenNumber and
553 Guid to the value specified by Value. Value is returned.
554 If Guid is NULL, then ASSERT().
556 @param[in] Guid Pointer to a 128-bit unique value that
557 designates which namespace to set a value from.
558 @param[in] TokenNumber The PCD token number to set a current value for.
559 @param[in] Value The 64-bit value to set.
561 @retval UINT64 Return the value been set.
568 IN UINTN TokenNumber
,
574 Sets a buffer for the token specified by TokenNumber to the value specified by
575 Buffer and SizeOfValue. Buffer is returned. If SizeOfValue is greater than
576 the maximum size support by TokenNumber, then set SizeOfValue to the maximum size
577 supported by TokenNumber and return NULL to indicate that the set operation
578 was not actually performed.
580 If Guid is NULL, then ASSERT().
581 If SizeOfValue is NULL, then ASSERT().
582 If SizeOfValue > 0 and Buffer is NULL, then ASSERT().
584 @param[in] Guid Pointer to a 128-bit unique value that
585 designates which namespace to set a value from.
586 @param[in] TokenNumber The PCD token number to set a current value for.
587 @param[in, out] SizeOfBuffer The size, in bytes, of Buffer.
588 @param[in] Buffer A pointer to the buffer to set.
590 @retval VOID * Return the pinter to the buffer been set.
597 IN UINTN TokenNumber
,
598 IN OUT UINTN
*SizeOfBuffer
,
604 Sets the Boolean value for the token specified by TokenNumber and
605 Guid to the value specified by Value. Value is returned.
606 If Guid is NULL, then ASSERT().
608 @param[in] Guid Pointer to a 128-bit unique value that
609 designates which namespace to set a value from.
610 @param[in] TokenNumber The PCD token number to set a current value for.
611 @param[in] Value The Boolean value to set.
613 @retval Boolean Return the value been set.
620 IN UINTN TokenNumber
,
626 When the token specified by TokenNumber and Guid is set,
627 then notification function specified by NotificationFunction is called.
628 If Guid is NULL, then the default token space is used.
629 If NotificationFunction is NULL, then ASSERT().
631 This notification function serves two purposes. Firstly, it notifies the module which
632 did the registration that the value of this PCD token has been set. Secondly,
633 it provides a mechanism for the module which did the registration to intercept
634 the set operation and override the value been set if necessary. After the invocation
635 of the callback function, TokenData will be used by PCD service PEIM or driver to
636 modify the internal data in PCD database.
639 @param[in] CallBackGuid The PCD token GUID being set.
640 @param[in] CallBackToken The PCD token number being set.
641 @param[in, out] TokenData A pointer to the token data being set.
642 @param[in] TokenDataSize The size, in bytes, of the data being set.
649 (EFIAPI
*PCD_CALLBACK
) (
650 IN CONST GUID
*CallBackGuid
, OPTIONAL
651 IN UINTN CallBackToken
,
652 IN OUT VOID
*TokenData
,
653 IN UINTN TokenDataSize
658 When the token specified by TokenNumber and Guid is set,
659 then notification function specified by NotificationFunction is called.
660 If Guid is NULL, then the default token space is used.
661 If NotificationFunction is NULL, then ASSERT().
663 @param[in] Guid Pointer to a 128-bit unique value that designates which
664 namespace to set a value from. If NULL, then the default
666 @param[in] TokenNumber The PCD token number to monitor.
667 @param[in] NotificationFunction The function to call when the token
668 specified by Guid and TokenNumber is set.
675 LibPcdCallbackOnSet (
676 IN CONST GUID
*Guid
, OPTIONAL
677 IN UINTN TokenNumber
,
678 IN PCD_CALLBACK NotificationFunction
683 Disable a notification function that was established with LibPcdCallbackonSet().
685 @param[in] Guid Specify the GUID token space.
686 @param[in] TokenNumber Specify the token number.
687 @param[in] NotificationFunction The callback function to be unregistered.
694 LibPcdCancelCallback (
695 IN CONST GUID
*Guid
, OPTIONAL
696 IN UINTN TokenNumber
,
697 IN PCD_CALLBACK NotificationFunction
702 Retrieves the next PCD token number from the token space specified by Guid.
703 If Guid is NULL, then the default token space is used. If TokenNumber is 0,
704 then the first token number is returned. Otherwise, the token number that
705 follows TokenNumber in the token space is returned. If TokenNumber is the last
706 token number in the token space, then 0 is returned. If TokenNumber is not 0 and
707 is not in the token space specified by Guid, then ASSERT().
709 @param[in] Guid Pointer to a 128-bit unique value that designates which namespace
710 to set a value from. If NULL, then the default token space is used.
711 @param[in] TokenNumber The previous PCD token number. If 0, then retrieves the first PCD
714 @retval UINTN The next valid token number.
720 IN CONST GUID
*Guid
, OPTIONAL
727 Retrieves the next PCD token space from a token space specified by Guid.
728 Guid of NULL is reserved to mark the default local token namespace on the current
729 platform. If Guid is NULL, then the GUID of the first non-local token space of the
730 current platform is returned. If Guid is the last non-local token space,
731 then NULL is returned.
733 If Guid is not NULL and is not a valid token space in the current platform, then ASSERT().
737 @param[in] Guid Pointer to a 128-bit unique value that designates from which namespace
740 @retval CONST GUID * The next valid token namespace.
745 LibPcdGetNextTokenSpace (
751 Sets the PCD entry specified by PatchVariable to the value specified by Buffer
752 and SizeOfValue. Buffer is returned. If SizeOfValue is greater than
753 MaximumDatumSize, then set SizeOfValue to MaximumDatumSize and return
754 NULL to indicate that the set operation was not actually performed.
755 If SizeOfValue is set to MAX_ADDRESS, then SizeOfValue must be set to
756 MaximumDatumSize and NULL must be returned.
758 If PatchVariable is NULL, then ASSERT().
759 If SizeOfValue is NULL, then ASSERT().
760 If SizeOfValue > 0 and Buffer is NULL, then ASSERT().
762 @param[in] PatchVariable A pointer to the global variable in a module that is
763 the target of the set operation.
764 @param[in] MaximumDatumSize The maximum size allowed for the PCD entry specified by PatchVariable.
765 @param[in, out] SizeOfBuffer A pointer to the size, in bytes, of Buffer.
766 @param[in] Buffer A pointer to the buffer to used to set the target variable.
772 IN VOID
*PatchVariable
,
773 IN UINTN MaximumDatumSize
,
774 IN OUT UINTN
*SizeOfBuffer
,
775 IN CONST VOID
*Buffer