#ifndef _SERVICE_H\r
#define _SERVICE_H\r
\r
-VOID \r
-DxeGetPcdEntryWorker (\r
- IN UINTN Token,\r
- IN CONST EFI_GUID *Guid, OPTIONAL\r
- IN PCD_DATA_TYPE Type,\r
- OUT VOID *Data\r
- );\r
+#define USE_AUTOGEN\r
\r
-EFI_STATUS \r
-DxeSetPcdEntryWorker (\r
- IN UINTN Token,\r
- IN CONST EFI_GUID *Guid, OPTIONAL\r
- IN PCD_DATA_TYPE Type,\r
- IN CONST VOID *Data\r
- );\r
+#ifndef USE_AUTOGEN\r
+//\r
+// The following definition will be generated by build tool \r
+//\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
+//\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
-UINTN\r
-DxeGetPcdEntrySizeWorker (\r
- IN UINTN Token,\r
- IN CONST EFI_GUID *Guid OPTIONAL\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 BOOLEAN Reigster\r
);\r
\r
-EFI_STATUS\r
-DxeSetSku (\r
- UINTN Id\r
-);\r
-\r
EFI_STATUS\r
DxeGetNextTokenWorker (\r
IN OUT UINTN *Token,\r
);\r
\r
VOID\r
-InitPcdDxeDataBase (\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
)\r
;\r
\r
+EFI_STATUS\r
+SetWorkerByLocalTokenNumber (\r
+ UINT32 LocalTokenNumber,\r
+ VOID *Data,\r
+ UINTN Size,\r
+ BOOLEAN PtrType,\r
+ BOOLEAN IsPeiDb\r
+ )\r
+;\r
\r
-/*\r
- This DXE_PCD_DATABASE layout. The difference of DXE_PCD_DATABASE\r
- and PEI_PCD_DATABASE is as follows:\r
-\r
- 1) No PCD_CALL_BACK_TABLE; DXE_PCD_DATABASE maintain a LinkList for the\r
- callback function registered.\r
-\r
- ---------------------------\r
- | LIST_ENTRY GuidSpaceHead|\r
- ---------------------------\r
- | PCD_DATABASE_HEADER |\r
- ---------------------------\r
- | GUID_TABLE | Aligned on GUID (128 bits)\r
- ---------------------------\r
- | PCD_INDEX_TABLE | Aligned on PCD_INDEX (see PCD_INDEX's declaration)\r
- ---------------------------\r
- | IMAGE_STRING_TABLE | Aligned on 16 Bits\r
- ---------------------------\r
- | IMAGE_PCD_INDEX | Unaligned\r
- ---------------------------\r
- | Data Defaults | Unaligned\r
- ---------------------------\r
- | Data Buffer |\r
- | for entries without |\r
- | defaults |\r
- ---------------------------\r
-\r
-*/\r
-\r
-\r
-typedef struct {\r
- LIST_ENTRY ListNode;\r
- LIST_ENTRY TokenSpaceHead;\r
- CONST EFI_GUID *GuidSpace;\r
-} PCD_GUID_SPACE;\r
-\r
-typedef struct {\r
- LIST_ENTRY ListNode;\r
- LIST_ENTRY CallbackListHead;\r
- UINTN TokeNumber;\r
-} PCD_TOKEN_SPACE;\r
-\r
-typedef struct {\r
- LIST_ENTRY ListNode;\r
- PCD_PROTOCOL_CALLBACK CallbackFunction;\r
-} PCD_CALLBACK_ENTRY;\r
-\r
-#define PCD_GUID_SPACE_FROM_LISTNODE(a) \\r
- _CR(a, PCD_GUID_SPACE, ListNode)\r
+extern EFI_GUID gPcdDataBaseHobGuid;\r
\r
-#define PCD_TOKEN_SPACE_FROM_LISTNODE(a) \\r
- _CR(a, PCD_TOKEN_SPACE, ListNode)\r
+extern PCD_DATABASE * gPcdDatabase;\r
\r
-#define PCD_CALLBACK_ENTRY_FROM_LISTNODE(a) \\r
- _CR(a, PCD_CALLBACK_ENTRY, ListNode)\r
+extern DXE_PCD_DATABASE_INIT gDXEPcdDbInit;\r
\r
#endif\r