diff options
author | bbahnsen <bbahnsen@6f19259b-4bc3-4df7-8a09-765794883524> | 2006-04-21 22:54:32 +0000 |
---|---|---|
committer | bbahnsen <bbahnsen@6f19259b-4bc3-4df7-8a09-765794883524> | 2006-04-21 22:54:32 +0000 |
commit | 878ddf1fc3540a715f63594ed22b6929e881afb4 (patch) | |
tree | c56c44dac138137b510e1fba7c3efe5e4d84bea2 /EdkModulePkg/Universal/PCD/Common/PcdCommon.h | |
download | edk2-platforms-878ddf1fc3540a715f63594ed22b6929e881afb4.tar.xz |
Initial import.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@3 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'EdkModulePkg/Universal/PCD/Common/PcdCommon.h')
-rw-r--r-- | EdkModulePkg/Universal/PCD/Common/PcdCommon.h | 386 |
1 files changed, 386 insertions, 0 deletions
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 <PCD_IMAGE> 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 <PCD_IMAGE> 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
|