From 878ddf1fc3540a715f63594ed22b6929e881afb4 Mon Sep 17 00:00:00 2001 From: bbahnsen Date: Fri, 21 Apr 2006 22:54:32 +0000 Subject: Initial import. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@3 6f19259b-4bc3-4df7-8a09-765794883524 --- EdkModulePkg/Universal/PCD/Common/PcdCommon.h | 386 ++++++++++++++++++++++++++ 1 file changed, 386 insertions(+) create mode 100644 EdkModulePkg/Universal/PCD/Common/PcdCommon.h (limited to 'EdkModulePkg/Universal/PCD/Common/PcdCommon.h') diff --git a/EdkModulePkg/Universal/PCD/Common/PcdCommon.h b/EdkModulePkg/Universal/PCD/Common/PcdCommon.h new file mode 100644 index 0000000000..f61aa5be6a --- /dev/null +++ b/EdkModulePkg/Universal/PCD/Common/PcdCommon.h @@ -0,0 +1,386 @@ +/** @file +Common functions used by PCD PEIM and PCD DXE. + +Copyright (c) 2006, Intel Corporation +All rights reserved. This program and the accompanying materials +are licensed and made available under the terms and conditions of the BSD License +which accompanies this distribution. The full text of the license may be found at +http://opensource.org/licenses/bsd-license.php + +THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + + +Module Name: PcdCommon.h + +**/ + +#ifndef __PCD_COMMON_H__ +#define __PCD_COMMON_H__ + +// +// Enumeration for PCD_DATA_TYPE +// +typedef enum { + PcdByte8, + PcdByte16, + PcdByte32, + PcdByte64, + PcdPointer, + PcdBoolean +} PCD_DATA_TYPE; + + +// +// The definitions for Global PCD Length Fields +// +#define PCD_LENGTH_BIT8 0x01 +#define PCD_LENGTH_BIT16 0x02 +#define PCD_LENGTH_BIT24 0x03 +#define PCD_LENGTH_BIT32 0x04 + + + +/* + * This data structure is used in transverse + */ +typedef struct { + UINTN EntryCount; + UINTN GlobalOffsetLength; + UINTN GlobalTokenLength; + UINTN GlobalGuidTabIdxLength; + UINTN GlobalDatumLength; + UINTN GlobalStrTabIdxLength; + + CONST UINT8 *DataDefaultStart; + UINTN DataDefaultLength; + UINTN WholeDataDefaultLength; + CONST UINT8 *IndexStart; + UINTN IndexLength; + CONST GUID *GuidTableStart; + UINTN GuidTableLength; + CONST UINT16 *StringTableStart; + UINTN StringTableLength; + /* Length of the in byte. + This info is from Section header + in FFS */ + UINTN ImageLength; + CONST UINT8 *ImageStart; + +} PCD_IMAGE_RECORD; + + + +typedef struct { + BOOLEAN HiiEnable; + BOOLEAN SkuEnable; + BOOLEAN VpdEnable; + BOOLEAN SkuDataArrayEnable; + PCD_DATA_TYPE DataType; + BOOLEAN ExtendedGuidPresent; +} PCD_STATEBYTE; + + + +typedef struct { + // + // All Pointer's Offset in byte + // + UINT32 TokenNumber; + PCD_STATEBYTE StateByte; + UINT32 HiiData; + UINT32 SkuIdArray; //Pointer + UINT32 ExtendedDataOffset; + UINT32 DatumSize; + UINT16 DynamicExGuid; //Pointer + UINT8 SkuCount; +} PCD_INDEX; + + + +/* + * PCD Image Definition according PCD Specification 0.51. + * + */ +#pragma pack(1) +typedef struct { + UINT8 ImageLength[3]; + // + // The length of PCD_FFS_ENCODING is included + // in ImageLength + // + UINT8 DataBufferLength[3]; + UINT8 WholeDataBufferLength[3]; + UINT8 PcdIndexLength[3]; + UINT8 GuidTableLength[3]; + // + // The StringTable can be computed using: + // ImageLength, DataBufferLength, PcdIndexLength, GuidTableLength, + // and length of PCD_FFS_ENCODING + // + UINT8 EntryCount[3]; + UINT8 GlobalOffsetLength[1]; + UINT8 GlobalTokenLength[1]; + UINT8 GuidLength[1]; + UINT8 GlobalDatumLength[1]; + UINT8 GlobalStrTabIdxLength[1]; +} PCD_FFS_ENCODING; +#pragma pack() + + + +typedef struct { + UINTN DatabaseLen; + UINTN EntryCount; + UINTN InfoLength; + UINTN GuidTableOffset; + UINTN PcdIndexOffset; + UINTN StringTableOffset; + UINTN CallbackTableOffset; + UINTN ImageIndexOffset; + UINTN DataBufferOffset; + UINTN MaxCallbackNum; + UINTN HiiVariableOffsetLength; + UINTN HiiGuidOffsetLength; + UINTN ExtendedOffsetLength; + UINT8 *VpdStart; + UINTN SkuId; +} PCD_DATABASE_HEADER; + + + +typedef struct { + PCD_DATABASE_HEADER Info; + EFI_GUID GuidTable[1]; +} PCD_DATABASE; + +extern EFI_GUID gPcdDataBaseHobGuid; + + +/** + The function returns the actual address of item in the PCD + database according to its Segment and Offset. + + @param[out] Offset The offset within the segment. + @param[in] SegmentStart The starting address of the segment. + @param[in] DatabaseStart The base address of the PCD DataBase. + + + @retval EFI_SUCESS If data value is found according to SKU_ID. + @retval EFI_NOT_FOUND If not such a value is found. + +--*/ +UINT8 * +GetAbsoluteAddress ( + IN UINTN Offset, + IN UINTN SegmentStart, + IN CONST VOID *Base + ) +; + + + +/** + The function return the number of Unicode Character in a NULL terminated string. + The NULL is NOT counted. + + @param[in] String The unicode string starts from an unaligned address. + + @retval UINTN The number of Unicode characters. +--*/ +UINTN +GetUnalignedStrLen ( + UINT16 *String +); + + +/** + The function retrieves the PCD data value according to + TokenNumber and Guid space given. + + @param[in] Info The PCD Database Info. + @param[in] TokenNumber The token number. + @param[in] Guid The Guid space. + @param[in] Type The storage type. + @param[out] Data The output data. + + @retval VOID + +--*/ +VOID +GetPcdEntryWorker ( + IN CONST PCD_DATABASE_HEADER *Info, + IN UINTN TokenNumber, + IN CONST GUID *Guid, OPTIONAL + IN PCD_DATA_TYPE Type, + OUT VOID *Data + ) +; + + + +/** + The function retrieves the PCD data value according to + TokenNumber and Guid space given. + + @param[in] Info The PCD Database info. + @param[in] TokenNumber The token number. + @param[in] Guid The Guid space. + + @retval UINTN The size of the PCD Entry. + +--*/ +UINTN +GetPcdEntrySizeWorker ( + IN CONST PCD_DATABASE_HEADER *Info, + IN UINTN TokenNumber, + IN CONST GUID *Guid OPTIONAL + ) +; + + + +/** + The function looks for the next PCD ENTRY. + If *TokenNumber is 0, the first TokenNumber in + the GUID token space is return. + If there is no next TokenNumber found, + *TokenNumber will be 0. + + @param[in] Info The PCD Database info. + @param[in,out] TokenNumber The token number. + @param[in] Guid The Guid space. + + @retval EFI_NOT_FOUND Can't find the PCD_ENTRY. + @retval EFI_SUCCESS Operation succesful. + +--*/ +EFI_STATUS +GetNextTokenWorker ( + IN CONST PCD_DATABASE_HEADER *Info, + IN OUT UINTN *TokenNumber, + IN CONST GUID *Guid OPTIONAL + ) +; + + + +/** + The function is the worker function to set the data of a PCD entry. + + @param[in] PcdIndex The PCD Index. + @param[in] Info The attributes of the PCD database. + @param[in] Data The input data. + + @retval VOID +--*/ +EFI_STATUS +SetPcdData ( + IN CONST PCD_INDEX *PcdIndex, + IN CONST PCD_DATABASE_HEADER *Info, + IN CONST VOID *Data + ) +; + + +/** + The function is provided by PCD PEIM and PCD DXE driver to + do the work of reading a HII variable from variable service. + + @param[in] VariableGuid The Variable GUID. + @param[in] VariableName The Variable Name. + @param[out] VariableData The output data. + @param[out] VariableSize The size of the variable. + + @retval EFI_SUCCESS Operation successful. + @retval EFI_SUCCESS Variablel not found. +--*/ +EFI_STATUS +GetHiiVariable ( + IN EFI_GUID *VariableGuid, + IN UINT16 *VariableName, + OUT VOID **VariableData, + OUT UINTN *VariableSize + ) +; + + + +/** + The function is provided by PCD PEIM and PCD DXE driver to + do the work of reading a HII variable from variable service. + + @param[in] VariableGuid The Variable GUID. + @param[in] VariableName The Variable Name. + @param[in] Data The input data. + @param[out] VariableSize The size of the variable. + @param[in] Offset The offset of the variable data that a PCD entry will starts from. + + @retval EFI_SUCCESS Operation successful. + @retval EFI_SUCCESS Variablel not found. +--*/ +EFI_STATUS +SetHiiVariable ( + IN EFI_GUID *VariableGuid, + IN UINT16 *VariableName, + IN CONST VOID *Data, + IN UINTN VariableSize, + IN UINTN Offset + ) +; + +/** + The function locates the PCD_INDEX according to TokeNumber and GUID space given. + + @param[in] TokenNumber The token number. + @param[in] Guid The GUID token space. + @param[out] Info The attributes of the PCD database. + + @retval PCD_INDEX* The PCD_INDEX found. +--*/ +PCD_INDEX * +FindPcdIndex ( + IN UINTN TokenNumber, + IN CONST GUID *Guid, + IN CONST PCD_DATABASE_HEADER *Info, + OUT UINTN *Index + ) +; + +/** + (WQBUGBUG: You must handle the new SKU_ID encoding. + The function is the worker function to get the data of a PCD entry. + + @param[in] PcdIndex The PCD Index. + @param[in] Info The attributes of the PCD database. + @param[out] Data The output data. + + @retval VOID +--*/ +UINT8* +GetPcdDataPtr ( + IN CONST PCD_INDEX *PcdIndex, + IN CONST PCD_DATABASE_HEADER *Info + ) +; + +/** + The function retrieves the PCD data value according to + the PCD_DATA_TYPE specified. + + @param[in] Type The PCD_DATA_TYPE used to interpret the data. + @param[in] InData The input data. + @param[in] OutData The output data. + @param[in] Len The length of the data; it is mainly used for PcdPointer type. + + @retval VOID +--*/ +VOID +GetDataBasedOnType ( + IN PCD_DATA_TYPE Type, + IN VOID *InData, + OUT VOID *OutData, + IN UINTN Len + ) +; +#endif -- cgit v1.2.3