X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=EdkModulePkg%2FUniversal%2FPCD%2FPei%2FService.h;h=647a0068e1e98dd557c456dac782053eb5a36af0;hp=d775a12a170612104757ba61a44af06ee76b75fc;hb=52e1905d39d71e013d253845cf8f2cdabea7c4f9;hpb=878ddf1fc3540a715f63594ed22b6929e881afb4 diff --git a/EdkModulePkg/Universal/PCD/Pei/Service.h b/EdkModulePkg/Universal/PCD/Pei/Service.h index d775a12a17..647a0068e1 100644 --- a/EdkModulePkg/Universal/PCD/Pei/Service.h +++ b/EdkModulePkg/Universal/PCD/Pei/Service.h @@ -18,53 +18,213 @@ Module Name: Service.h #ifndef _SERVICE_H #define _SERVICE_H +#define USE_AUTOGEN + +#ifndef USE_AUTOGEN +// +// The following definition will be generated by build tool // -// Offset of StateByte + // -#define PCD_STATEBYTE_HIIENABLE 0x01 -#define PCD_STATEBYTE_SKUENABLE 0x02 -#define PCD_STATEBYTE_VPDENABLE 0x04 -#define PCD_STATEBYTE_SKUDATAARRAYENABLE 0x08 -#define PCD_STATEBYTE_DATUMTYPE 0x70 -#define PCD_STATEBYTE_EXTENDEDGUIDPRESENT 0x80 +// Common definitions that is shared by PEI and DXE PCD database +// +#define PCD_TYPE_SHIFT 24 + + +#define PCD_TYPE_DATA (0x00 << PCD_TYPE_SHIFT) +#define PCD_TYPE_HII (0x80 << PCD_TYPE_SHIFT) +#define PCD_TYPE_VPD (0x40 << PCD_TYPE_SHIFT) +#define PCD_TYPE_SKU_ENABLED (0x20 << PCD_TYPE_SHIFT) + + +#define PCD_DATABASE_OFFSET_MASK (~(PCD_TYPE_HII | PCD_TYPE_VPD | PCD_TYPE_SKU_ENABLED)) + +typedef struct { + UINT32 ExTokenNumber; + UINT32 LocalTokenNumber; // PCD Number of this particular platform build + UINT16 ExGuidIndex; // Index of GuidTable +} DYNAMICEX_MAPPING; + + +typedef struct { + UINT32 SkuDataStartOffset; //We have to use offsetof MACRO as we don't know padding done by compiler + UINT32 SkuIdTableOffset; //Offset from the PCD_DB +} SKU_HEAD; + + +typedef struct { + UINT16 GuidTableIndex; // Offset in Guid Table in units of GUID. + UINT16 StringIndex; // Offset in String Table in units of UINT16. + UINT16 Offset; // Offset in Variable +} VARIABLE_HEAD ; + + +typedef struct { + UINT32 Offset; +} VPD_HEAD; + +typedef struct { + UINT32 LocalTokenNumber; + UINT16 TokenNumber; + UINT16 Size; +} SIZEINFO; + +#define offsetof(s,m) (UINT32)&(((s *)0)->m) -#define PCD_DATUMTYPE_OFFSET 4 + + + +// +// C Structure generate for PEI PCD Database // -// The definitions for interpreting DatumType +#define PEI_EXMAPPING_TABLE_SIZE 1 +#define PEI_GUID_TABLE_SIZE 1 +#define PEI_LOCAL_TOKEN_NUMBER 1 +#define PEI_STRING_TABLE_SIZE 2 +#define PEI_SKUID_TABLE_SIZE 3 + + +#define PEI_DATABASE_EMPTRY FALSE +#define PEI_EXMAP_TABLE_EMPTY FALSE +#define PEI_GUID_TABLE_EMPTY FALSE +#define PEI_STRINGTABLE_EMPTY FALSE +#define PEI_SIZETABLE_EMPTY FALSE +#define PEI_SKUID_TABLE_EMPTY FALSE + + +typedef struct { + + DYNAMICEX_MAPPING ExMapTable[PEI_EXMAPPING_TABLE_SIZE]; + EFI_GUID GuidTable[PEI_GUID_TABLE_SIZE]; + + UINT32 LocalTokenNumberTable[PEI_LOCAL_TOKEN_NUMBER]; + + + UINT16 StringTable[PEI_STRING_TABLE_SIZE]; + UINT16 SizeTable[PEI_LOCAL_TOKEN_NUMBER]; + + UINT8 SkuIdTable[PEI_SKUID_TABLE_SIZE]; + + SKU_ID SystemSkuId; + +} PEI_PCD_DATABASE_INIT; + +typedef struct { + UINT8 Dummy; +} PEI_PCD_DATABASE_UNINIT; + +#define PEI_PCD_DB_INIT_VALUE \ + /* ExMapTable */ \ + { \ + { /* ExTokenNumber */ 0x00000001, /* LocalTokenNumberIndex */ 0, /* ExGuidIndex */ 0} \ + }, \ + \ + /* GuidTable */ \ + { \ + { 0xBB25CF6F, 0xF1D4, 0x11D2, {0x9A, 0x0C, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0xFD }} \ + }, \ + \ + /* LocalTokenNumberTable */ \ + { \ + 0 \ + }, \ + \ + /* StringTable */ \ + { \ + L"\0" \ + }, \ + \ + /* SizeTable */ \ + { \ + 4 \ + }, \ + \ + /* SkuIdTable */ \ + { \ + /*MaxSku*/ 2, /*SkuId*/ 100, /*SkuId*/200 \ + },\ + \ + /* SystemSkuId */ \ + 0 \ + + // -#define PCD_BYTE8 (0x00 << PCD_DATUMTYPE_OFFSET) -#define PCD_BYTE16 (0x01 << PCD_DATUMTYPE_OFFSET) -#define PCD_BYTE32 (0x02 << PCD_DATUMTYPE_OFFSET) -#define PCD_BYTE64 (0x03 << PCD_DATUMTYPE_OFFSET) -#define PCD_POINTER (0x04 << PCD_DATUMTYPE_OFFSET) -#define PCD_BOOLEAN (0x05 << PCD_DATUMTYPE_OFFSET) +// End of Autogen Code +// +#endif -extern GUID gEfiPcdImageHobGuid; +/* +typedef struct { + PEI_PCD_DATABASE_INIT Init; + PEI_PCD_DATABASE_UNINIT Uninit; +} PEI_PCD_DATABASE; +*/ /* Internal Function definitions */ -VOID -PeiGetPcdEntryWorker ( - IN UINTN Token, - IN CONST GUID *Guid, OPTIONAL - IN PCD_DATA_TYPE Type, - OUT VOID *Data - ); +PEI_PCD_DATABASE * +GetPcdDatabase ( + VOID + ) +; EFI_STATUS -PeiSetPcdEntryWorker ( - IN UINTN Token, - IN CONST GUID *Guid, OPTIONAL - IN PCD_DATA_TYPE Type, - IN VOID *Data - ); +SetWorker ( + IN UINTN TokenNumber, + IN VOID *Data, + IN UINTN Size, + IN BOOLEAN PtrType + ) +; -UINTN -PeiGetPcdEntrySizeWorker ( - IN UINTN Token, - IN CONST GUID *Guid OPTIONAL - ); +EFI_STATUS +SetWorkerByLocalTokenNumber ( + UINT32 LocalTokenNumber, + VOID *Data, + UINTN Size, + BOOLEAN PtrType + ) +; + +EFI_STATUS +ExSetWorker ( + IN UINT32 ExTokenNumber, + IN CONST EFI_GUID *Guid, + VOID *Data, + UINTN Size, + BOOLEAN PtrType + ) +; + +VOID * +GetWorker ( + UINTN TokenNumber, + UINTN GetSize + ) +; + +VOID * +ExGetWorker ( + IN CONST EFI_GUID *Guid, + IN UINT32 ExTokenNumber, + IN UINTN GetSize + ) +; + +typedef struct { + UINTN TokenNumber; + UINTN Size; + UINT32 LocalTokenNumberAlias; +} EX_PCD_ENTRY_ATTRIBUTE; + +VOID +GetExPcdTokenAttributes ( + IN CONST EFI_GUID *Guid, + IN UINT32 ExTokenNumber, + OUT EX_PCD_ENTRY_ATTRIBUTE *ExAttr + ) +; EFI_STATUS PeiRegisterCallBackWorker ( @@ -74,25 +234,9 @@ PeiRegisterCallBackWorker ( IN BOOLEAN Register ); -EFI_STATUS -PeiSetSku ( - UINTN Id -); - -EFI_STATUS -PeiGetNextTokenWorker ( - IN OUT UINTN *Token, - IN CONST GUID *Guid OPTIONAL - ); - -UINT8 * -LocatePcdImage ( - VOID -); - VOID BuildPcdDatabase ( - UINT8 *PcdImageOnFlash + VOID ) ; @@ -368,4 +512,11 @@ PeiPcdGetNextToken ( IN OUT UINTN *TokenNumber ) ; + +extern EFI_GUID gPcdDataBaseHobGuid; + +extern EFI_GUID gPcdPeiCallbackFnTableHobGuid; + +extern PEI_PCD_DATABASE_INIT gPEIPcdDbInit; + #endif