]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkModulePkg/Universal/PCD/Dxe/Service.h
Add Lock for cirtical section in PCD database processing routines as PCD database...
[mirror_edk2.git] / EdkModulePkg / Universal / PCD / Dxe / Service.h
index 86e3dfdee31ea37bc1b8006f8daa3eb563e57c4f..572d172f3cf0fdec7e4e22b11ec7984bae231073 100644 (file)
@@ -18,56 +18,24 @@ 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
-\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
-\r
-UINTN\r
-DxeGetPcdEntrySizeWorker (\r
-  IN UINTN Token,\r
-  IN CONST EFI_GUID       *Guid  OPTIONAL\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
-DxeSetSku (\r
-  UINTN Id\r
-);\r
-\r
-EFI_STATUS\r
-DxeGetNextTokenWorker (\r
-  IN OUT UINTN *Token,\r
-  IN CONST EFI_GUID           *Guid     OPTIONAL\r
-  );\r
+//\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
-VOID\r
-InitPcdDxeDataBase (\r
-  VOID\r
-);\r
+//\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
 // Protocol Interface function declaration.\r
 //\r
-EFI_STATUS\r
+VOID\r
 EFIAPI\r
 DxePcdSetSku (\r
   IN  UINTN                  SkuId\r
@@ -78,7 +46,7 @@ DxePcdSetSku (
 UINT8\r
 EFIAPI\r
 DxePcdGet8 (\r
-  IN UINTN  TokenNumber\r
+  IN UINTN             TokenNumber\r
   )\r
 ;\r
 \r
@@ -86,7 +54,7 @@ DxePcdGet8 (
 UINT16\r
 EFIAPI\r
 DxePcdGet16 (\r
-  IN UINTN  TokenNumber\r
+  IN UINTN             TokenNumber\r
   )\r
 ;\r
 \r
@@ -94,7 +62,7 @@ DxePcdGet16 (
 UINT32\r
 EFIAPI\r
 DxePcdGet32 (\r
-  IN UINTN  TokenNumber\r
+  IN UINTN             TokenNumber\r
   )\r
 ;\r
 \r
@@ -102,7 +70,7 @@ DxePcdGet32 (
 UINT64\r
 EFIAPI\r
 DxePcdGet64 (\r
-  IN UINTN  TokenNumber\r
+  IN UINTN             TokenNumber\r
   )\r
 ;\r
 \r
@@ -110,7 +78,7 @@ DxePcdGet64 (
 VOID *\r
 EFIAPI\r
 DxePcdGetPtr (\r
-  IN UINTN  TokenNumber\r
+  IN UINTN             TokenNumber\r
   )\r
 ;\r
 \r
@@ -118,7 +86,7 @@ DxePcdGetPtr (
 BOOLEAN\r
 EFIAPI\r
 DxePcdGetBool (\r
-  IN UINTN  TokenNumber\r
+  IN UINTN             TokenNumber\r
   )\r
 ;\r
 \r
@@ -126,7 +94,7 @@ DxePcdGetBool (
 UINTN\r
 EFIAPI\r
 DxePcdGetSize (\r
-  IN UINTN  TokenNumber\r
+  IN UINTN             TokenNumber\r
   )\r
 ;\r
 \r
@@ -135,7 +103,7 @@ UINT8
 EFIAPI\r
 DxePcdGet8Ex (\r
   IN CONST EFI_GUID        *Guid,\r
-  IN UINTN  TokenNumber\r
+  IN UINTN             TokenNumber\r
   )\r
 ;\r
 \r
@@ -144,7 +112,7 @@ UINT16
 EFIAPI\r
 DxePcdGet16Ex (\r
   IN CONST EFI_GUID        *Guid,\r
-  IN UINTN  TokenNumber\r
+  IN UINTN             TokenNumber\r
   )\r
 ;\r
 \r
@@ -153,7 +121,7 @@ UINT32
 EFIAPI\r
 DxePcdGet32Ex (\r
   IN CONST EFI_GUID        *Guid,\r
-  IN UINTN  TokenNumber\r
+  IN UINTN             TokenNumber\r
   )\r
 ;\r
 \r
@@ -163,7 +131,7 @@ UINT64
 EFIAPI\r
 DxePcdGet64Ex (\r
   IN CONST EFI_GUID        *Guid,\r
-  IN UINTN  TokenNumber\r
+  IN UINTN             TokenNumber\r
   )\r
 ;\r
 \r
@@ -173,7 +141,7 @@ VOID *
 EFIAPI\r
 DxePcdGetPtrEx (\r
   IN CONST EFI_GUID        *Guid,\r
-  IN UINTN  TokenNumber\r
+  IN UINTN             TokenNumber\r
   )\r
 ;\r
 \r
@@ -182,7 +150,7 @@ BOOLEAN
 EFIAPI\r
 DxePcdGetBoolEx (\r
   IN CONST EFI_GUID        *Guid,\r
-  IN UINTN  TokenNumber\r
+  IN UINTN             TokenNumber\r
   )\r
 ;\r
 \r
@@ -191,7 +159,7 @@ UINTN
 EFIAPI\r
 DxePcdGetSizeEx (\r
   IN CONST EFI_GUID        *Guid,\r
-  IN UINTN  TokenNumber\r
+  IN UINTN             TokenNumber\r
   )\r
 ;\r
 \r
@@ -199,7 +167,7 @@ DxePcdGetSizeEx (
 EFI_STATUS\r
 EFIAPI\r
 DxePcdSet8 (\r
-  IN UINTN  TokenNumber,\r
+  IN UINTN             TokenNumber,\r
   IN UINT8             Value\r
   )\r
 ;\r
@@ -208,7 +176,7 @@ DxePcdSet8 (
 EFI_STATUS\r
 EFIAPI\r
 DxePcdSet16 (\r
-  IN UINTN  TokenNumber,\r
+  IN UINTN             TokenNumber,\r
   IN UINT16             Value\r
   )\r
 ;\r
@@ -217,7 +185,7 @@ DxePcdSet16 (
 EFI_STATUS\r
 EFIAPI\r
 DxePcdSet32 (\r
-  IN UINTN  TokenNumber,\r
+  IN UINTN             TokenNumber,\r
   IN UINT32             Value\r
   )\r
 ;\r
@@ -226,7 +194,7 @@ DxePcdSet32 (
 EFI_STATUS\r
 EFIAPI\r
 DxePcdSet64 (\r
-  IN UINTN  TokenNumber,\r
+  IN UINTN             TokenNumber,\r
   IN UINT64            Value\r
   )\r
 ;\r
@@ -235,8 +203,9 @@ DxePcdSet64 (
 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
@@ -244,7 +213,7 @@ DxePcdSetPtr (
 EFI_STATUS\r
 EFIAPI\r
 DxePcdSetBool (\r
-  IN UINTN  TokenNumber,\r
+  IN UINTN             TokenNumber,\r
   IN BOOLEAN           Value\r
   )\r
 ;\r
@@ -254,7 +223,7 @@ EFI_STATUS
 EFIAPI\r
 DxePcdSet8Ex (\r
   IN CONST EFI_GUID        *Guid,\r
-  IN UINTN  TokenNumber,\r
+  IN UINTN             TokenNumber,\r
   IN UINT8             Value\r
   )\r
 ;\r
@@ -264,7 +233,7 @@ EFI_STATUS
 EFIAPI\r
 DxePcdSet16Ex (\r
   IN CONST EFI_GUID        *Guid,\r
-  IN UINTN  TokenNumber,\r
+  IN UINTN             TokenNumber,\r
   IN UINT16            Value\r
   )\r
 ;\r
@@ -274,7 +243,7 @@ EFI_STATUS
 EFIAPI\r
 DxePcdSet32Ex (\r
   IN CONST EFI_GUID        *Guid,\r
-  IN UINTN  TokenNumber,\r
+  IN UINTN             TokenNumber,\r
   IN UINT32             Value\r
   )\r
 ;\r
@@ -284,7 +253,7 @@ EFI_STATUS
 EFIAPI\r
 DxePcdSet64Ex (\r
   IN CONST EFI_GUID        *Guid,\r
-  IN UINTN  TokenNumber,\r
+  IN UINTN             TokenNumber,\r
   IN UINT64            Value\r
   )\r
 ;\r
@@ -293,9 +262,10 @@ DxePcdSet64Ex (
 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
@@ -303,8 +273,8 @@ DxePcdSetPtrEx (
 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
@@ -313,9 +283,9 @@ DxePcdSetBoolEx (
 \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
@@ -323,9 +293,9 @@ PcdRegisterCallBackOnSet (
 \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
@@ -335,65 +305,176 @@ EFI_STATUS
 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
-/*\r
-  This DXE_PCD_DATABASE layout. The difference of DXE_PCD_DATABASE\r
-  and PEI_PCD_DATABASE is as follows:\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
-  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
+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
 \r
-typedef struct {\r
-  LIST_ENTRY       ListNode;\r
-  LIST_ENTRY       TokenSpaceHead;\r
-  CONST EFI_GUID   *GuidSpace;\r
-} PCD_GUID_SPACE;\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
-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
+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
+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
-#define PCD_GUID_SPACE_FROM_LISTNODE(a) \\r
-  _CR(a, PCD_GUID_SPACE, ListNode)\r
+extern PCD_DATABASE * mPcdDatabase;\r
 \r
-#define PCD_TOKEN_SPACE_FROM_LISTNODE(a) \\r
-  _CR(a, PCD_TOKEN_SPACE, ListNode)\r
+extern DXE_PCD_DATABASE_INIT gDXEPcdDbInit;\r
 \r
-#define PCD_CALLBACK_ENTRY_FROM_LISTNODE(a) \\r
-  _CR(a, PCD_CALLBACK_ENTRY, ListNode)\r
+extern EFI_LOCK mPcdDatabaseLock;\r
 \r
 #endif\r