]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkModulePkg/Universal/PCD/Dxe/Service.h
Check in the Pcd service Driver/PEIM according to the new way of generating PCD Database
[mirror_edk2.git] / EdkModulePkg / Universal / PCD / Dxe / Service.h
index 86e3dfdee31ea37bc1b8006f8daa3eb563e57c4f..fd2087146e5c4987748db9832fbd6f2c88ae2b90 100644 (file)
@@ -18,27 +18,251 @@ Module Name: Service.h
 #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
@@ -48,11 +272,6 @@ DxeRegisterCallBackWorker (
   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
@@ -60,10 +279,26 @@ DxeGetNextTokenWorker (
   );\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
@@ -339,61 +574,20 @@ DxePcdGetNextToken (
   )\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