#ifndef _SERVICE_H\r
#define _SERVICE_H\r
\r
-#define USE_AUTOGEN\r
-\r
-#ifndef USE_AUTOGEN\r
//\r
-// The following definition will be generated by build tool \r
+// Please make sure the PCD Serivce PEIM Version is consistent with\r
+// the version of PCD Database generation tool\r
//\r
+#define PCD_DXE_SERVICE_DRIVER_VERSION 2\r
\r
//\r
-// Common definitions\r
-//\r
-#define PCD_TYPE_SHIFT 24\r
-\r
-\r
-#define PCD_TYPE_DATA (0x00 << PCD_TYPE_SHIFT)\r
-#define PCD_TYPE_HII (0x80 << PCD_TYPE_SHIFT)\r
-#define PCD_TYPE_VPD (0x40 << PCD_TYPE_SHIFT)\r
-#define PCD_TYPE_SKU_ENABLED (0x20 << PCD_TYPE_SHIFT)\r
-\r
-\r
-#define PCD_DATABASE_OFFSET_MASK (~(PCD_TYPE_HII | PCD_TYPE_VPD | PCD_TYPE_SKU_ENABLED))\r
-\r
-typedef struct {\r
- UINT32 ExTokenNumber;\r
- UINT32 LocalTokenNumber; // PCD Number of this particular platform build\r
- UINT16 ExGuidIndex; // Index of GuidTable\r
-} DYNAMICEX_MAPPING;\r
-\r
-\r
-typedef struct {\r
- UINT32 SkuDataStartOffset; //We have to use offsetof MACRO as we don't know padding done by compiler\r
- UINT32 SkuIdTableOffset; //Offset from the PCD_DB\r
-} SKU_HEAD;\r
-\r
-\r
-typedef struct {\r
- UINT16 GuidTableIndex; // Offset in Guid Table in units of GUID.\r
- UINT16 StringIndex; // Offset in String Table in units of UINT16.\r
- UINT16 Offset; // Offset in Variable\r
-} VARIABLE_HEAD ;\r
-\r
-\r
-typedef struct {\r
- UINT32 Offset;\r
-} VPD_HEAD;\r
-\r
-typedef struct {\r
- UINT32 LocalTokenNumber;\r
- UINT16 TokenNumber;\r
- UINT16 Size;\r
-} SIZEINFO;\r
-\r
-#define offsetof(s,m) (UINT32)&(((s *)0)->m)\r
-\r
-\r
-\r
-//\r
-// C Structure generate for PEI PCD Database\r
-//\r
-#define PEI_EXMAPPING_TABLE_SIZE 1\r
-#define PEI_GUID_TABLE_SIZE 1\r
-#define PEI_LOCAL_TOKEN_NUMBER 1\r
-#define PEI_EXTOKEN_NUMBER 1\r
-#define PEI_STRING_TABLE_SIZE 2\r
-#define PEI_SKUID_TABLE_SIZE 3\r
-#define PEI_SIZE_TABLE_SIZE 1\r
-\r
-#define PEI_DATABASE_EMPTRY FALSE\r
-#define PEI_DYNAMICEX_MAPPING_EMPTY FALSE\r
-#define PEI_GUID_TABLE_EMPTY FALSE\r
-#define PEI_STRINGTABLE_EMPTY FALSE\r
-#define PEI_SIZETABLE_EMPTY FALSE\r
-#define PEI_SKUID_TABLE_EMPTY FALSE\r
-\r
-\r
-typedef struct {\r
-\r
- DYNAMICEX_MAPPING ExMapTable[PEI_EXMAPPING_TABLE_SIZE];\r
- EFI_GUID GuidTable[PEI_GUID_TABLE_SIZE];\r
-\r
- UINT32 LocalTokenNumberTable[PEI_LOCAL_TOKEN_NUMBER];\r
-\r
-\r
- UINT16 StringTable[PEI_STRING_TABLE_SIZE];\r
- UINT16 SizeTable[PEI_LOCAL_TOKEN_NUMBER];\r
- \r
- SKU_ID SkuIdTable[PEI_SKUID_TABLE_SIZE];\r
- \r
- SKU_ID SystemSkuId;\r
-\r
-} PEI_PCD_DATABASE_INIT;\r
-\r
-typedef struct {\r
- UINT8 Dummy;\r
-} PEI_PCD_DATABASE_UNINIT;\r
-\r
-//\r
-// Following code should be generated for PCD DXE driver\r
-//\r
-\r
-#define DXE_EXMAPPING_TABLE_SIZE 1\r
-#define DXE_GUID_TABLE_SIZE 1\r
-#define DXE_TOKEN_NUMBER 1\r
-#define DXE_EXTOKEN_NUMBER 1\r
-#define DXE_STRING_TABLE_SIZE 2\r
-#define DXE_SKUID_TABLE_SIZE 3\r
-#define DXE_SIZE_TABLE_SIZE 1\r
-\r
-#define DXE_DATABASE_EMPTRY FALSE\r
-#define DXE_DYNAMICEX_MAPPING_EMPTY FALSE\r
-#define DXE_GUID_TABLE_EMPTY FALSE\r
-#define DXE_STRINGTABLE_EMPTY FALSE\r
-#define DXE_SIZETABLE_EMPTY FALSE\r
-#define DXE_SKUID_TABLE_EMPTY FALSE\r
-\r
-typedef struct {\r
- DYNAMICEX_MAPPING ExMapTable[DXE_EXMAPPING_TABLE_SIZE];\r
- EFI_GUID GuidTable[DXE_GUID_TABLE_SIZE];\r
-\r
- UINT32 LocalTokenNumberTable[DXE_TOKEN_NUMBER];\r
-\r
-\r
- UINT16 StringTable[DXE_STRING_TABLE_SIZE];\r
- UINT16 SizeTable[DXE_TOKEN_NUMBER];\r
- \r
- SKU_ID SkuIdTable[DXE_SKUID_TABLE_SIZE];\r
- \r
-} DXE_PCD_DATABASE_INIT;\r
-\r
-typedef struct {\r
- UINT8 Dummy;\r
-} DXE_PCD_DATABASE_UNINIT;\r
-\r
-\r
-#define DXE_PCD_DB_INIT_VALUE \\r
- /* ExMapTable */ \\r
- { \\r
- { /* ExTokenNumber */ 0x00000001, /* LocalTokenNumberIndex */ 0, /* ExGuidIndex */ 0} \\r
- }, \\r
- \\r
- /* GuidTable */ \\r
- { \\r
- { 0xBB25CF6F, 0xF1D4, 0x11D2, {0x9A, 0x0C, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0xFD }} \\r
- }, \\r
- \\r
- /* LocalTokenNumberTable */ \\r
- { \\r
- 0 \\r
- }, \\r
- \\r
- /* StringTable */ \\r
- { \\r
- L"\0" \\r
- }, \\r
- \\r
- /* SizeTable */ \\r
- { \\r
- 4 \\r
- }, \\r
- \\r
- /* SkuIdTable */ \\r
- { \\r
- /*MaxSku*/ 2, /*SkuId*/ 100, /*SkuId*/200 \\r
- },\\r
- \\r
-\r
-//\r
-// End of Autogen Code\r
+// PCD_DXE_DATABASE_GENTOOL_VERSION is defined in Autogen.h\r
+// and generated by PCD Database generation tool.\r
//\r
+#if (PCD_DXE_SERVICE_PEIM_VERSION != PCD_DXE_DATABASE_GENTOOL_VERSION)\r
+ #error "Please make sure the version of PCD Service DXE Driver and PCD DXE Database Generation Tool matches"\r
#endif\r
\r
-/*\r
-typedef struct {\r
- PEI_PCD_DATABASE_INIT Init;\r
- PEI_PCD_DATABASE_UNINIT Uninit;\r
-} PEI_PCD_DATABASE;\r
-\r
-\r
-\r
-typedef struct {\r
- DXE_PCD_DATABASE_INIT Init;\r
- DXE_PCD_DATABASE_UNINIT Uninit;\r
-} DXE_PCD_DATABASE;\r
-\r
-\r
-typedef struct {\r
- PEI_PCD_DATABASE PeiDb;\r
- DXE_PCD_DATABASE DxeDb;\r
-} PCD_DATABASE;\r
-*/\r
-\r
-\r
-//\r
-// Internal Functions\r
-//\r
-\r
-EFI_STATUS\r
-SetWorker (\r
- UINTN TokenNumber,\r
- VOID *Data,\r
- UINTN Size,\r
- BOOLEAN PtrType\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-ExSetWorker (\r
- IN UINT32 ExTokenNumber,\r
- IN CONST EFI_GUID *Guid,\r
- VOID *Data,\r
- UINTN Size,\r
- BOOLEAN PtrType\r
- )\r
-;\r
-\r
-\r
-VOID *\r
-GetWorker (\r
- UINTN TokenNumber\r
- )\r
-;\r
-\r
-VOID *\r
-ExGetWorker (\r
- IN CONST EFI_GUID *Guid,\r
- IN UINTN ExTokenNumber,\r
- IN UINTN GetSize\r
- ) \r
-;\r
-\r
-UINT32\r
-GetSkuEnabledTokenNumber (\r
- UINT32 LocalTokenNumber,\r
- UINTN Size,\r
- BOOLEAN IsPeiDb\r
- ) \r
-;\r
-\r
-EFI_STATUS\r
-GetHiiVariable (\r
- IN EFI_GUID *VariableGuid,\r
- IN UINT16 *VariableName,\r
- OUT VOID ** VariableData,\r
- OUT UINTN *VariableSize\r
- )\r
-;\r
-\r
-EFI_STATUS\r
-DxeRegisterCallBackWorker (\r
- IN UINTN TokenNumber,\r
- IN CONST EFI_GUID *Guid, OPTIONAL\r
- IN PCD_PROTOCOL_CALLBACK CallBackFunction,\r
- IN BOOLEAN Reigster\r
-);\r
-\r
-EFI_STATUS\r
-DxeGetNextTokenWorker (\r
- IN OUT UINTN *Token,\r
- IN CONST EFI_GUID *Guid OPTIONAL\r
- );\r
-\r
-VOID\r
-BuildPcdDxeDataBase (\r
- VOID\r
-);\r
-\r
-\r
-typedef struct {\r
- UINTN TokenNumber;\r
- UINTN Size;\r
- UINT32 LocalTokenNumberAlias;\r
- BOOLEAN IsPeiDb;\r
-} EX_PCD_ENTRY_ATTRIBUTE;\r
-\r
-VOID\r
-GetExPcdTokenAttributes (\r
- IN CONST EFI_GUID *Guid,\r
- IN UINT32 ExTokenNumber,\r
- OUT EX_PCD_ENTRY_ATTRIBUTE *ExAttr\r
- )\r
-;\r
-\r
//\r
// Protocol Interface function declaration.\r
//\r
-EFI_STATUS\r
+VOID\r
EFIAPI\r
DxePcdSetSku (\r
IN UINTN SkuId\r
UINT8\r
EFIAPI\r
DxePcdGet8 (\r
- IN UINTN TokenNumber\r
+ IN UINTN TokenNumber\r
)\r
;\r
\r
UINT16\r
EFIAPI\r
DxePcdGet16 (\r
- IN UINTN TokenNumber\r
+ IN UINTN TokenNumber\r
)\r
;\r
\r
UINT32\r
EFIAPI\r
DxePcdGet32 (\r
- IN UINTN TokenNumber\r
+ IN UINTN TokenNumber\r
)\r
;\r
\r
UINT64\r
EFIAPI\r
DxePcdGet64 (\r
- IN UINTN TokenNumber\r
+ IN UINTN TokenNumber\r
)\r
;\r
\r
VOID *\r
EFIAPI\r
DxePcdGetPtr (\r
- IN UINTN TokenNumber\r
+ IN UINTN TokenNumber\r
)\r
;\r
\r
BOOLEAN\r
EFIAPI\r
DxePcdGetBool (\r
- IN UINTN TokenNumber\r
+ IN UINTN TokenNumber\r
)\r
;\r
\r
UINTN\r
EFIAPI\r
DxePcdGetSize (\r
- IN UINTN TokenNumber\r
+ IN UINTN TokenNumber\r
)\r
;\r
\r
EFIAPI\r
DxePcdGet8Ex (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber\r
+ IN UINTN TokenNumber\r
)\r
;\r
\r
EFIAPI\r
DxePcdGet16Ex (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber\r
+ IN UINTN TokenNumber\r
)\r
;\r
\r
EFIAPI\r
DxePcdGet32Ex (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber\r
+ IN UINTN TokenNumber\r
)\r
;\r
\r
EFIAPI\r
DxePcdGet64Ex (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber\r
+ IN UINTN TokenNumber\r
)\r
;\r
\r
EFIAPI\r
DxePcdGetPtrEx (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber\r
+ IN UINTN TokenNumber\r
)\r
;\r
\r
EFIAPI\r
DxePcdGetBoolEx (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber\r
+ IN UINTN TokenNumber\r
)\r
;\r
\r
EFIAPI\r
DxePcdGetSizeEx (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber\r
+ IN UINTN TokenNumber\r
)\r
;\r
\r
EFI_STATUS\r
EFIAPI\r
DxePcdSet8 (\r
- IN UINTN TokenNumber,\r
+ IN UINTN TokenNumber,\r
IN UINT8 Value\r
)\r
;\r
EFI_STATUS\r
EFIAPI\r
DxePcdSet16 (\r
- IN UINTN TokenNumber,\r
+ IN UINTN TokenNumber,\r
IN UINT16 Value\r
)\r
;\r
EFI_STATUS\r
EFIAPI\r
DxePcdSet32 (\r
- IN UINTN TokenNumber,\r
+ IN UINTN TokenNumber,\r
IN UINT32 Value\r
)\r
;\r
EFI_STATUS\r
EFIAPI\r
DxePcdSet64 (\r
- IN UINTN TokenNumber,\r
+ IN UINTN TokenNumber,\r
IN UINT64 Value\r
)\r
;\r
EFI_STATUS\r
EFIAPI\r
DxePcdSetPtr (\r
- IN UINTN TokenNumber,\r
- IN CONST VOID *Value\r
+ IN UINTN TokenNumber,\r
+ IN UINTN *SizeOfBuffer,\r
+ IN VOID *Buffer\r
)\r
;\r
\r
EFI_STATUS\r
EFIAPI\r
DxePcdSetBool (\r
- IN UINTN TokenNumber,\r
+ IN UINTN TokenNumber,\r
IN BOOLEAN Value\r
)\r
;\r
EFIAPI\r
DxePcdSet8Ex (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber,\r
+ IN UINTN TokenNumber,\r
IN UINT8 Value\r
)\r
;\r
EFIAPI\r
DxePcdSet16Ex (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber,\r
+ IN UINTN TokenNumber,\r
IN UINT16 Value\r
)\r
;\r
EFIAPI\r
DxePcdSet32Ex (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber,\r
+ IN UINTN TokenNumber,\r
IN UINT32 Value\r
)\r
;\r
EFIAPI\r
DxePcdSet64Ex (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber,\r
+ IN UINTN TokenNumber,\r
IN UINT64 Value\r
)\r
;\r
EFI_STATUS\r
EFIAPI\r
DxePcdSetPtrEx (\r
- IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber,\r
- IN CONST VOID *Value\r
+ IN CONST EFI_GUID *Guid,\r
+ IN UINTN TokenNumber,\r
+ IN OUT UINTN *SizeOfBuffer,\r
+ IN VOID *Buffer\r
)\r
;\r
\r
EFI_STATUS\r
EFIAPI\r
DxePcdSetBoolEx (\r
- IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber,\r
+ IN CONST EFI_GUID *Guid,\r
+ IN UINTN TokenNumber,\r
IN BOOLEAN Value\r
)\r
;\r
\r
EFI_STATUS\r
EFIAPI\r
-PcdRegisterCallBackOnSet (\r
- IN UINTN TokenNumber,\r
- IN CONST EFI_GUID *Guid, OPTIONAL\r
+DxeRegisterCallBackOnSet (\r
+ IN CONST EFI_GUID *Guid, OPTIONAL\r
+ IN UINTN TokenNumber,\r
IN PCD_PROTOCOL_CALLBACK CallBackFunction\r
)\r
;\r
\r
EFI_STATUS\r
EFIAPI\r
-PcdUnRegisterCallBackOnSet (\r
- IN UINTN TokenNumber,\r
- IN CONST EFI_GUID *Guid, OPTIONAL\r
+DxeUnRegisterCallBackOnSet (\r
+ IN CONST EFI_GUID *Guid, OPTIONAL\r
+ IN UINTN TokenNumber,\r
IN PCD_PROTOCOL_CALLBACK CallBackFunction\r
)\r
;\r
EFIAPI\r
DxePcdGetNextToken (\r
IN CONST EFI_GUID *Guid, OPTIONAL\r
- IN OUT UINTN *TokenNumber\r
+ IN OUT UINTN *TokenNumber\r
+ )\r
+;\r
+\r
+\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+DxePcdGetNextTokenSpace (\r
+ IN OUT CONST EFI_GUID **Guid\r
+ )\r
+;\r
+\r
+\r
+typedef struct {\r
+ LIST_ENTRY Node;\r
+ PCD_PROTOCOL_CALLBACK CallbackFn;\r
+} CALLBACK_FN_ENTRY;\r
+\r
+#define CR_FNENTRY_FROM_LISTNODE(Record, Type, Field) _CR(Record, Type, Field)\r
+\r
+//\r
+// Internal Functions\r
+//\r
+\r
+EFI_STATUS\r
+SetValueWorker (\r
+ IN UINTN TokenNumber,\r
+ IN VOID *Data,\r
+ IN UINTN Size\r
+ )\r
+;\r
+\r
+EFI_STATUS\r
+SetWorker (\r
+ IN UINTN TokenNumber,\r
+ IN VOID *Data,\r
+ IN OUT UINTN *Size,\r
+ IN BOOLEAN PtrType\r
+ )\r
+;\r
+\r
+\r
+EFI_STATUS\r
+ExSetValueWorker (\r
+ IN UINTN ExTokenNumber,\r
+ IN CONST EFI_GUID *Guid,\r
+ IN VOID *Data,\r
+ IN UINTN SetSize\r
+ )\r
+;\r
+\r
+\r
+\r
+EFI_STATUS\r
+ExSetWorker (\r
+ IN UINTN ExTokenNumber,\r
+ IN CONST EFI_GUID *Guid,\r
+ IN VOID *Data,\r
+ IN OUT UINTN *Size,\r
+ IN BOOLEAN PtrType\r
+ )\r
+;\r
+\r
+\r
+VOID *\r
+GetWorker (\r
+ IN UINTN TokenNumber,\r
+ IN UINTN GetSize\r
+ )\r
+;\r
+\r
+VOID *\r
+ExGetWorker (\r
+ IN CONST EFI_GUID *Guid,\r
+ IN UINTN ExTokenNumber,\r
+ IN UINTN GetSize\r
+ ) \r
+;\r
+\r
+UINT32\r
+GetSkuEnabledTokenNumber (\r
+ UINT32 LocalTokenNumber,\r
+ UINTN Size,\r
+ BOOLEAN IsPeiDb\r
+ ) \r
+;\r
+\r
+EFI_STATUS\r
+GetHiiVariable (\r
+ IN EFI_GUID *VariableGuid,\r
+ IN UINT16 *VariableName,\r
+ OUT UINT8 **VariableData,\r
+ OUT UINTN *VariableSize\r
+ )\r
+;\r
+\r
+EFI_STATUS\r
+SetHiiVariable (\r
+ IN EFI_GUID *VariableGuid,\r
+ IN UINT16 *VariableName,\r
+ IN CONST VOID *Data,\r
+ IN UINTN DataSize,\r
+ IN UINTN Offset\r
)\r
;\r
\r
EFI_STATUS\r
-SetWorkerByLocalTokenNumber (\r
- UINT32 LocalTokenNumber,\r
- VOID *Data,\r
- UINTN Size,\r
- BOOLEAN PtrType,\r
- BOOLEAN IsPeiDb\r
+DxeRegisterCallBackWorker (\r
+ IN UINTN TokenNumber,\r
+ IN CONST EFI_GUID *Guid, OPTIONAL\r
+ IN PCD_PROTOCOL_CALLBACK CallBackFunction\r
+);\r
+\r
+EFI_STATUS\r
+DxeUnRegisterCallBackWorker (\r
+ IN UINTN TokenNumber,\r
+ IN CONST EFI_GUID *Guid, OPTIONAL\r
+ IN PCD_PROTOCOL_CALLBACK CallBackFunction\r
+);\r
+\r
+VOID\r
+BuildPcdDxeDataBase (\r
+ VOID\r
+);\r
+\r
+\r
+UINTN \r
+GetExPcdTokenNumber (\r
+ IN CONST EFI_GUID *Guid,\r
+ IN UINT32 ExTokenNumber\r
+ )\r
+;\r
+\r
+\r
+\r
+EFI_STATUS \r
+ExGetNextTokeNumber (\r
+ IN CONST EFI_GUID *Guid,\r
+ IN OUT UINTN *TokenNumber,\r
+ IN EFI_GUID *GuidTable,\r
+ IN UINTN SizeOfGuidTable,\r
+ IN DYNAMICEX_MAPPING *ExMapTable,\r
+ IN UINTN SizeOfExMapTable\r
+ )\r
+;\r
+\r
+\r
+UINTN\r
+GetPtrTypeSize (\r
+ IN UINTN LocalTokenNumberTableIdx,\r
+ OUT UINTN *MaxSize\r
+ )\r
+;\r
+\r
+\r
+\r
+BOOLEAN\r
+SetPtrTypeSize (\r
+ IN UINTN LocalTokenNumberTableIdx,\r
+ IN OUT UINTN *CurrentSize\r
)\r
;\r
\r
extern EFI_GUID gPcdDataBaseHobGuid;\r
\r
-extern PCD_DATABASE * gPcdDatabase;\r
+extern PCD_DATABASE * mPcdDatabase;\r
\r
extern DXE_PCD_DATABASE_INIT gDXEPcdDbInit;\r
\r
+extern EFI_LOCK mPcdDatabaseLock;\r
+\r
#endif\r