]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Include/Library/PcdLib.h
Updated headers to follow coding standard
[mirror_edk2.git] / MdePkg / Include / Library / PcdLib.h
index 2cc0dbb4b61750b0020b3ecb78e97ba0ce211dde..2b9c76796b79050c9425957b6b7a864d3d44c3ad 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
 PCD Library Class Interface Declarations\r
 \r
-Copyright (c) 2006, Intel Corporation                                                         \r
+Copyright (c) 2006 - 2007, Intel Corporation                                                         \r
 All rights reserved. This program and the accompanying materials                          \r
 are licensed and made available under the terms and conditions of the BSD License         \r
 which accompanies this distribution.  The full text of the license may be found at        \r
@@ -10,101 +10,101 @@ http://opensource.org/licenses/bsd-license.php
 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
 \r
-\r
-Module Name: PcdLib.h\r
-\r
 **/\r
 \r
 #ifndef __PCD_LIB_H__\r
 #define __PCD_LIB_H__\r
 \r
-#define PCD_INVALID_TOKEN_NUMBER ((UINTN) -1)\r
+#define PCD_INVALID_TOKEN_NUMBER ((UINTN) 0)\r
 \r
-#define PcdToken(TokenName)  _PCD_TOKEN_##TokenName\r
+#define PcdToken(TokenName)                 _PCD_TOKEN_##TokenName\r
 \r
 \r
 //\r
 // Feature Flag is in the form of a global constant\r
 //\r
-#define FeaturePcdGet(TokenName)     _gPcd_FixedAtBuild_##TokenName\r
+#define FeaturePcdGet(TokenName)            _PCD_GET_MODE_BOOL_##TokenName\r
 \r
 \r
 //\r
 // Fixed is fixed at build time\r
 //\r
-#define FixedPcdGet8(TokenName)     _gPcd_FixedAtBuild_##TokenName\r
-#define FixedPcdGet16(TokenName)    _gPcd_FixedAtBuild_##TokenName\r
-#define FixedPcdGet32(TokenName)    _gPcd_FixedAtBuild_##TokenName\r
-#define FixedPcdGet64(TokenName)    _gPcd_FixedAtBuild_##TokenName\r
-#define FixedPcdGetBool(TokenName)  _gPcd_FixedAtBuild_##TokenName\r
+#define FixedPcdGet8(TokenName)             _PCD_VALUE_##TokenName\r
+#define FixedPcdGet16(TokenName)            _PCD_VALUE_##TokenName\r
+#define FixedPcdGet32(TokenName)            _PCD_VALUE_##TokenName\r
+#define FixedPcdGet64(TokenName)            _PCD_VALUE_##TokenName\r
+#define FixedPcdGetBool(TokenName)          _PCD_VALUE_##TokenName\r
 \r
 \r
-//\r
-// BugBug: This works for strings, but not constants.\r
-//\r
-#define FixedPcdGetPtr(TokenName)    ((VOID *)_gPcd_FixedAtBuild_##TokenName)\r
+#define FixedPcdGetPtr(TokenName)           ((VOID *)_PCD_VALUE_##TokenName)\r
 \r
 \r
 //\r
 // (Binary) Patch is in the form of a global variable\r
 //\r
-#define PatchPcdGet8(TokenName)     _gPcd_BinaryPatch_##TokenName\r
-#define PatchPcdGet16(TokenName)    _gPcd_BinaryPatch_##TokenName\r
-#define PatchPcdGet32(TokenName)    _gPcd_BinaryPatch_##TokenName\r
-#define PatchPcdGet64(TokenName)    _gPcd_BinaryPatch_##TokenName\r
-#define PatchPcdGetBool(TokenName)  _gPcd_BinaryPatch_##TokenName\r
-#define PatchPcdGetPtr(TokenName)   ((VOID *)_gPcd_BinaryPatch_##TokenName)\r
-\r
-#define PatchPcdSet8(TokenName, Value)     (_gPcd_BinaryPatch_##TokenName = Value)\r
-#define PatchPcdSet16(TokenName, Value)    (_gPcd_BinaryPatch_##TokenName = Value)\r
-#define PatchPcdSet32(TokenName, Value)    (_gPcd_BinaryPatch_##TokenName = Value)\r
-#define PatchPcdSet64(TokenName, Value)    (_gPcd_BinaryPatch_##TokenName = Value)\r
-#define PatchPcdSetBool(TokenName, Value)  (_gPcd_BinaryPatch_##TokenName = Value)\r
-#define PatchPcdSetPtr(TokenName, Size, Buffer)   CopyMem (_gPcd_BinaryPatch_##TokenName, Buffer, Size)\r
+#define PatchPcdGet8(TokenName)             _gPcd_BinaryPatch_##TokenName\r
+#define PatchPcdGet16(TokenName)            _gPcd_BinaryPatch_##TokenName\r
+#define PatchPcdGet32(TokenName)            _gPcd_BinaryPatch_##TokenName\r
+#define PatchPcdGet64(TokenName)            _gPcd_BinaryPatch_##TokenName\r
+#define PatchPcdGetBool(TokenName)          _gPcd_BinaryPatch_##TokenName\r
+#define PatchPcdGetPtr(TokenName)           ((VOID *)_gPcd_BinaryPatch_##TokenName)\r
+\r
+#define PatchPcdSet8(TokenName, Value)      (_gPcd_BinaryPatch_##TokenName = (Value))\r
+#define PatchPcdSet16(TokenName, Value)     (_gPcd_BinaryPatch_##TokenName = (Value))\r
+#define PatchPcdSet32(TokenName, Value)     (_gPcd_BinaryPatch_##TokenName = (Value))\r
+#define PatchPcdSet64(TokenName, Value)     (_gPcd_BinaryPatch_##TokenName = (Value))\r
+#define PatchPcdSetBool(TokenName, Value)   (_gPcd_BinaryPatch_##TokenName = (Value))\r
+#define PatchPcdSetPtr(TokenName, Size, Buffer) \\r
+                                            LibPatchPcdSetPtr (                        \\r
+                                              _gPcd_BinaryPatch_##TokenName,           \\r
+                                              (UINTN)_PCD_PATCHABLE_##TokenName##_SIZE, \\r
+                                              (Size),                                  \\r
+                                              (Buffer)                                 \\r
+                                              )\r
 \r
 //\r
 // Dynamic is via the protocol with only the TokenNumber as argument\r
 //  It can also be Patch or Fixed type based on a build option\r
 //\r
-#define PcdGet8(TokenName)          _PCD_MODE_8_##TokenName\r
-#define PcdGet16(TokenName)         _PCD_MODE_16_##TokenName\r
-#define PcdGet32(TokenName)         _PCD_MODE_32_##TokenName\r
-#define PcdGet64(TokenName)         _PCD_MODE_64_##TokenName\r
-#define PcdGetPtr(TokenName)        _PCD_MODE_PTR_##TokenName\r
-#define PcdGetBool(TokenName)       _PCD_MODE_BOOL_##TokenName\r
-\r
+#define PcdGet8(TokenName)                  _PCD_GET_MODE_8_##TokenName\r
+#define PcdGet16(TokenName)                 _PCD_GET_MODE_16_##TokenName\r
+#define PcdGet32(TokenName)                 _PCD_GET_MODE_32_##TokenName\r
+#define PcdGet64(TokenName)                 _PCD_GET_MODE_64_##TokenName\r
+#define PcdGetPtr(TokenName)                _PCD_GET_MODE_PTR_##TokenName\r
+#define PcdGetBool(TokenName)               _PCD_GET_MODE_BOOL_##TokenName\r
 \r
 //\r
-// Dynamic Ex is to support binary distribution\r
+// Dynamic Set\r
 //\r
-#define PcdGetEx8(TokenName)     LibPcdGetEx8 (&_gPcd_DynamicEx_TokenSpaceGuid_##TokenName, _PCD_TOKEN_##TokenName)\r
-#define PcdGetEx16(TokenName)    LibPcdGetEx16 (&_gPcd_DynamicEx_TokenSpaceGuid_##TokenName, _PCD_TOKEN_##TokenName)\r
-#define PcdGetEx32(TokenName)    LibPcdGetEx32 (&_gPcd_DynamicEx_TokenSpaceGuid_##TokenName, _PCD_TOKEN_##TokenName)\r
-#define PcdGetEx64(TokenName)    LibPcdGetEx64 (&_gPcd_DynamicEx_TokenSpaceGuid_##TokenName, _PCD_TOKEN_##TokenName)\r
-#define PcdGetExPtr(TokenName)   LibPcdGetExPtr (&_gPcd_DynamicEx_TokenSpaceGuid_##TokenName, _PCD_TOKEN_##TokenName)\r
-#define PcdGetExBool(TokenName)  LibPcdGetExBool (&_gPcd_DynamicEx_TokenSpaceGuid_##TokenName, _PCD_TOKEN_##TokenName)\r
-\r
+#define PcdSet8(TokenName, Value)           _PCD_SET_MODE_8_##TokenName     ((Value))\r
+#define PcdSet16(TokenName, Value)          _PCD_SET_MODE_16_##TokenName    ((Value))\r
+#define PcdSet32(TokenName, Value)          _PCD_SET_MODE_32_##TokenName    ((Value))\r
+#define PcdSet64(TokenName, Value)          _PCD_SET_MODE_64_##TokenName    ((Value))\r
+#define PcdSetPtr(TokenName, SizeOfBuffer, Buffer) \\r
+                                            _PCD_SET_MODE_PTR_##TokenName   ((SizeOfBuffer), (Buffer))\r
+#define PcdSetBool(TokenName, Value)        _PCD_SET_MODE_BOOL_##TokenName  ((Value))\r
 \r
 //\r
-// Dynamic Set\r
+// Dynamic Ex is to support binary distribution\r
 //\r
-#define PcdSet8(TokenName, Value)       LibPcdSet8   (_PCD_TOKEN_##TokenName, Value)\r
-#define PcdSet16(TokenName, Value)      LibPcdSet16  (_PCD_TOKEN_##TokenName, Value)\r
-#define PcdSet32(TokenName, Value)      LibPcdSet32  (_PCD_TOKEN_##TokenName, Value)\r
-#define PcdSet64(TokenName, Value)      LibPcdSet64  (_PCD_TOKEN_##TokenName, Value)\r
-#define PcdSetPtr(TokenName, SizeOfBuffer, Buffer)     LibPcdSetPtr (_PCD_TOKEN_##TokenName, SizeOfBuffer, Buffer)\r
-#define PcdSetBool(TokenName, Value)    LibPcdSetBool(_PCD_TOKEN_##TokenName, Value)\r
-\r
+#define PcdGetEx8(Guid, TokenName)          LibPcdGetEx8    ((Guid), _PCD_TOKEN_##TokenName)\r
+#define PcdGetEx16(Guid, TokenName)         LibPcdGetEx16   ((Guid), _PCD_TOKEN_##TokenName)\r
+#define PcdGetEx32(Guid, TokenName)         LibPcdGetEx32   ((Guid), _PCD_TOKEN_##TokenName)\r
+#define PcdGetEx64(Guid, TokenName)         LibPcdGetEx64   ((Guid), _PCD_TOKEN_##TokenName)\r
+#define PcdGetExPtr(Guid, TokenName)        LibPcdGetExPtr  ((Guid), _PCD_TOKEN_##TokenName)\r
+#define PcdGetExBool(Guid, TokenName)       LibPcdGetExBool ((Guid), _PCD_TOKEN_##TokenName)\r
 \r
 //\r
 // Dynamic Set Ex\r
 //\r
-#define PcdSetEx8(TokenName, Value)      LibPcdSetEx8   (&_gPcd_DynamicEx_TokenSpaceGuid_##TokenName, _PCD_TOKEN_##TokenName, Value)\r
-#define PcdSetEx16(TokenName, Value)     LibPcdSetEx16  (&_gPcd_DynamicEx_TokenSpaceGuid_##TokenName, _PCD_TOKEN_##TokenName, Value)\r
-#define PcdSetEx32(TokenName, Value)     LibPcdSetEx32  (&_gPcd_DynamicEx_TokenSpaceGuid_##TokenName, _PCD_TOKEN_##TokenName, Value)\r
-#define PcdSetEx64(TokenName, Value)     LibPcdSetEx64  (&_gPcd_DynamicEx_TokenSpaceGuid_##TokenName, _PCD_TOKEN_##TokenName, Value)\r
-#define PcdSetExPtr(TokenName, SizeOfBuffer, Buffer)    LibPcdSetExPtr (&_gPcd_DynamicEx_TokenSpaceGuid_##TokenName, _PCD_TOKEN_##TokenName, SizeOfBuffer, Buffer)\r
-#define PcdSetExBool(TokenName, Value)   LibPcdSetExBool(&_gPcd_DynamicEx_TokenSpaceGuid_##TokenName, _PCD_TOKEN_##TokenName, Value)\r
+#define PcdSetEx8(Guid, TokenName, Value)   LibPcdSetEx8   ((Guid), _PCD_TOKEN_##TokenName, (Value))\r
+#define PcdSetEx16(Guid, TokenName, Value)  LibPcdSetEx16  ((Guid), _PCD_TOKEN_##TokenName, (Value))\r
+#define PcdSetEx32(Guid, TokenName, Value)  LibPcdSetEx32  ((Guid), _PCD_TOKEN_##TokenName, (Value))\r
+#define PcdSetEx64(Guid, TokenName, Value)  LibPcdSetEx64  ((Guid), _PCD_TOKEN_##TokenName, (Value))\r
+#define PcdSetExPtr(Guid, TokenName, SizeOfBuffer, Buffer) \\r
+                                            LibPcdSetExPtr ((Guid), _PCD_TOKEN_##TokenName, (SizeOfBuffer), (Buffer))\r
+#define PcdSetExBool(Guid, TokenName, Value) \\r
+                                            LibPcdSetExBool((Guid), _PCD_TOKEN_##TokenName, (Value))\r
 \r
 \r
 /**\r
@@ -434,11 +434,20 @@ LibPcdSet64 (
 \r
 \r
 /**\r
-  Sets a buffer for the token specified by TokenNumber to \r
-  the value specified by Value.     Value is returned.\r
-  If Value is NULL, then ASSERT().\r
+  Sets a buffer for the token specified by TokenNumber to the value \r
+  specified by Buffer and SizeOfValue.  Buffer is returned.  \r
+  If SizeOfValue is greater than the maximum size support by TokenNumber, \r
+  then set SizeOfValue to the maximum size supported by TokenNumber and \r
+  return NULL to indicate that the set operation was not actually performed.  \r
+\r
+  If SizeOfValue is set to MAX_ADDRESS, then SizeOfValue must be set to the \r
+  maximum size supported by TokenName and NULL must be returned.\r
+  \r
+  If SizeOfValue is NULL, then ASSERT().\r
+  If SizeOfValue > 0 and Buffer is NULL, then ASSERT().\r
   \r
   @param[in]  TokenNumber The PCD token number to set a current value for.\r
+  @param[in,out] SizeOfBuffer The size, in bytes, of Buffer.\r
   @param[in]  Value A pointer to the buffer to set.\r
 \r
   @retval VOID* Return the pointer for the buffer been set.\r
@@ -447,9 +456,9 @@ LibPcdSet64 (
 VOID*\r
 EFIAPI\r
 LibPcdSetPtr (\r
-  IN UINTN             TokenNumber,\r
-  IN UINTN             SizeOfBuffer,\r
-  IN VOID              *Value\r
+  IN      UINTN             TokenNumber,\r
+  IN OUT  UINTN             *SizeOfBuffer,\r
+  IN      VOID              *Buffer\r
   );\r
 \r
 \r
@@ -560,26 +569,32 @@ LibPcdSetEx64 (
 \r
 \r
 /**\r
-  Sets a buffer for the token specified by TokenNumber and \r
-  Guid to the value specified by Value. Value is returned.\r
+  Sets a buffer for the token specified by TokenNumber to the value specified by \r
+  Buffer and SizeOfValue.  Buffer is returned.  If SizeOfValue is greater than \r
+  the maximum size support by TokenNumber, then set SizeOfValue to the maximum size \r
+  supported by TokenNumber and return NULL to indicate that the set operation \r
+  was not actually performed. \r
+  \r
   If Guid is NULL, then ASSERT().\r
-  If Value is NULL, then ASSERT().\r
+  If SizeOfValue is NULL, then ASSERT().\r
+  If SizeOfValue > 0 and Buffer is NULL, then ASSERT().\r
   \r
   @param[in]  Guid Pointer to a 128-bit unique value that \r
               designates which namespace to set a value from.\r
   @param[in]  TokenNumber The PCD token number to set a current value for.\r
-  @param[in]  Value The 8-bit value to set.\r
+  @param[in, out] SizeOfBuffer The size, in bytes, of Buffer.\r
+  @param[in]  Buffer A pointer to the buffer to set.\r
 \r
-  @retval VOID * Return the value been set.\r
+  @retval VOID * Return the pinter to the buffer been set.\r
 \r
 **/\r
 VOID *\r
 EFIAPI\r
 LibPcdSetExPtr (\r
-  IN CONST GUID        *Guid,\r
-  IN UINTN             TokenNumber,\r
-  IN UINTN             SizeOfBuffer,\r
-  IN VOID              *Value\r
+  IN      CONST GUID        *Guid,\r
+  IN      UINTN             TokenNumber,\r
+  IN OUT  UINTN             *SizeOfBuffer,\r
+  IN      VOID              *Buffer\r
   );\r
 \r
 \r
@@ -611,9 +626,17 @@ LibPcdSetExBool (
   If Guid is NULL, then the default token space is used. \r
   If NotificationFunction is NULL, then ASSERT().\r
 \r
+  This notification function serves two purposes. Firstly, it notifies the module which \r
+  did the registration that the value of this PCD token has been set. Secondly, \r
+  it provides a mechanism for the module which did the registration to intercept \r
+  the set operation and override the value been set if necessary. After the invocation \r
+  of the callback function, TokenData will be used by PCD service PEIM or driver to \r
+  modify the internal data in PCD database. \r
+\r
+\r
   @param[in]  CallBackGuid The PCD token GUID being set.\r
   @param[in]  CallBackToken The PCD token number being set.\r
-  @param[in]  TokenData A pointer to the token data being set.\r
+  @param[in, out]  TokenData A pointer to the token data being set.\r
   @param[in]  TokenDataSize The size, in bytes, of the data being set.\r
 \r
   @retval VOID\r
@@ -696,4 +719,58 @@ LibPcdGetNextToken (
   IN UINTN                    TokenNumber\r
   );\r
 \r
+\r
+\r
+/**\r
+  Retrieves the next PCD token space from a token space specified by Guid.\r
+  Guid of NULL is reserved to mark the default local token namespace on the current\r
+  platform. If Guid is NULL, then the GUID of the first non-local token space of the \r
+  current platform is returned. If Guid is the last non-local token space, \r
+  then NULL is returned. \r
+\r
+  If Guid is not NULL and is not a valid token space in the current platform, then ASSERT().\r
+\r
+\r
+  \r
+  @param[in]  Guid Pointer to a 128-bit unique value that designates from which namespace \r
+              to start the search.\r
+\r
+  @retval CONST GUID *  The next valid token namespace.\r
+\r
+**/\r
+GUID *           \r
+EFIAPI\r
+LibPcdGetNextTokenSpace (\r
+  IN CONST GUID  *Guid\r
+  );\r
+\r
+\r
+/**\r
+  Sets the PCD entry specified by PatchVariable to the value specified by Buffer \r
+  and SizeOfValue.  Buffer is returned.  If SizeOfValue is greater than \r
+  MaximumDatumSize, then set SizeOfValue to MaximumDatumSize and return \r
+  NULL to indicate that the set operation was not actually performed.  \r
+  If SizeOfValue is set to MAX_ADDRESS, then SizeOfValue must be set to \r
+  MaximumDatumSize and NULL must be returned.\r
+  \r
+  If PatchVariable is NULL, then ASSERT().\r
+  If SizeOfValue is NULL, then ASSERT().\r
+  If SizeOfValue > 0 and Buffer is NULL, then ASSERT().\r
+\r
+  @param[in] PatchVariable      A pointer to the global variable in a module that is \r
+                                the target of the set operation.\r
+  @param[in] MaximumDatumSize   The maximum size allowed for the PCD entry specified by PatchVariable.\r
+  @param[in, out] SizeOfBuffer  A pointer to the size, in bytes, of Buffer.\r
+  @param[in] Buffer             A pointer to the buffer to used to set the target variable.\r
+\r
+**/\r
+VOID *\r
+EFIAPI\r
+LibPatchPcdSetPtr (\r
+  IN        VOID        *PatchVariable,\r
+  IN        UINTN       MaximumDatumSize,\r
+  IN OUT    UINTN       *SizeOfBuffer,\r
+  IN CONST  VOID        *Buffer\r
+  );\r
+\r
 #endif\r