]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkModulePkg/Universal/PCD/Pei/Service.h
Check in the Pcd service Driver/PEIM according to the new way of generating PCD Database
[mirror_edk2.git] / EdkModulePkg / Universal / PCD / Pei / Service.h
index d775a12a170612104757ba61a44af06ee76b75fc..647a0068e1e98dd557c456dac782053eb5a36af0 100644 (file)
@@ -18,53 +18,213 @@ Module Name: Service.h
 #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
 //\r
-// Offset of StateByte\r
+\r
 //\r
-#define PCD_STATEBYTE_HIIENABLE           0x01\r
-#define PCD_STATEBYTE_SKUENABLE           0x02\r
-#define PCD_STATEBYTE_VPDENABLE           0x04\r
-#define PCD_STATEBYTE_SKUDATAARRAYENABLE  0x08\r
-#define PCD_STATEBYTE_DATUMTYPE           0x70\r
-#define PCD_STATEBYTE_EXTENDEDGUIDPRESENT 0x80\r
+// Common definitions that is shared by PEI and DXE PCD database\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
-#define PCD_DATUMTYPE_OFFSET 4\r
 \r
+\r
+\r
+\r
+//\r
+// C Structure generate for PEI PCD Database\r
 //\r
-// The definitions for interpreting DatumType\r
+#define PEI_EXMAPPING_TABLE_SIZE  1\r
+#define PEI_GUID_TABLE_SIZE         1\r
+#define PEI_LOCAL_TOKEN_NUMBER            1\r
+#define PEI_STRING_TABLE_SIZE        2\r
+#define PEI_SKUID_TABLE_SIZE         3\r
+\r
+\r
+#define PEI_DATABASE_EMPTRY          FALSE\r
+#define PEI_EXMAP_TABLE_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
+  UINT8             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
+#define PEI_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
+  /* SystemSkuId */ \\r
+  0 \\r
+\r
+\r
 //\r
-#define PCD_BYTE8   (0x00 << PCD_DATUMTYPE_OFFSET)\r
-#define PCD_BYTE16  (0x01 << PCD_DATUMTYPE_OFFSET)\r
-#define PCD_BYTE32  (0x02 << PCD_DATUMTYPE_OFFSET)\r
-#define PCD_BYTE64  (0x03 << PCD_DATUMTYPE_OFFSET)\r
-#define PCD_POINTER (0x04 << PCD_DATUMTYPE_OFFSET)\r
-#define PCD_BOOLEAN (0x05 << PCD_DATUMTYPE_OFFSET)\r
+// End of Autogen Code\r
+//\r
+#endif\r
 \r
-extern GUID gEfiPcdImageHobGuid;\r
+/*\r
+typedef struct {\r
+  PEI_PCD_DATABASE_INIT Init;\r
+  PEI_PCD_DATABASE_UNINIT Uninit;\r
+} PEI_PCD_DATABASE;\r
+*/\r
 \r
 /* Internal Function definitions */\r
 \r
-VOID\r
-PeiGetPcdEntryWorker (\r
-  IN UINTN Token,\r
-  IN CONST GUID       *Guid,  OPTIONAL\r
-  IN PCD_DATA_TYPE    Type,\r
-  OUT VOID            *Data\r
-  );\r
+PEI_PCD_DATABASE *\r
+GetPcdDatabase (\r
+  VOID\r
+  )\r
+;\r
 \r
 EFI_STATUS\r
-PeiSetPcdEntryWorker (\r
-  IN UINTN Token,\r
-  IN CONST GUID       *Guid,  OPTIONAL\r
-  IN PCD_DATA_TYPE    Type,\r
-  IN VOID       *Data\r
-  );\r
+SetWorker (\r
+  IN UINTN         TokenNumber,\r
+  IN VOID          *Data,\r
+  IN UINTN         Size,\r
+  IN BOOLEAN       PtrType\r
+  )\r
+;\r
 \r
-UINTN\r
-PeiGetPcdEntrySizeWorker (\r
-  IN UINTN Token,\r
-  IN CONST GUID       *Guid  OPTIONAL\r
-  );\r
+EFI_STATUS\r
+SetWorkerByLocalTokenNumber (\r
+  UINT32        LocalTokenNumber,\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
+VOID *\r
+GetWorker (\r
+  UINTN     TokenNumber,\r
+  UINTN     GetSize\r
+  )\r
+;\r
+\r
+VOID *\r
+ExGetWorker (\r
+  IN CONST EFI_GUID   *Guid,\r
+  IN UINT32           ExTokenNumber,\r
+  IN UINTN            GetSize\r
+  )\r
+;\r
+\r
+typedef struct {\r
+  UINTN   TokenNumber;\r
+  UINTN   Size;\r
+  UINT32  LocalTokenNumberAlias;\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
 EFI_STATUS\r
 PeiRegisterCallBackWorker (\r
@@ -74,25 +234,9 @@ PeiRegisterCallBackWorker (
   IN  BOOLEAN                 Register\r
 );\r
 \r
-EFI_STATUS\r
-PeiSetSku (\r
-  UINTN Id\r
-);\r
-\r
-EFI_STATUS\r
-PeiGetNextTokenWorker (\r
-  IN OUT UINTN *Token,\r
-  IN CONST GUID           *Guid     OPTIONAL\r
-  );\r
-\r
-UINT8 *\r
-LocatePcdImage (\r
-  VOID\r
-);\r
-\r
 VOID\r
 BuildPcdDatabase (\r
-  UINT8 *PcdImageOnFlash\r
+  VOID\r
   )\r
 ;\r
 \r
@@ -368,4 +512,11 @@ PeiPcdGetNextToken (
   IN OUT  UINTN    *TokenNumber\r
   )\r
 ;\r
+\r
+extern EFI_GUID gPcdDataBaseHobGuid;\r
+\r
+extern EFI_GUID gPcdPeiCallbackFnTableHobGuid;\r
+\r
+extern PEI_PCD_DATABASE_INIT gPEIPcdDbInit;\r
+\r
 #endif\r