summaryrefslogtreecommitdiff
path: root/EdkModulePkg
diff options
context:
space:
mode:
authorqwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524>2006-06-23 04:30:23 +0000
committerqwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524>2006-06-23 04:30:23 +0000
commit58f1099f3dd6d1d7606cc57046e59488d4cbf023 (patch)
tree47bfe658743b7f4d7757893c54f2432d3f272986 /EdkModulePkg
parent90f7b6a81b96a112f196ff80e7cade4f951264a1 (diff)
downloadedk2-platforms-58f1099f3dd6d1d7606cc57046e59488d4cbf023.tar.xz
1) remove some dead code from WinNtBusDriver.c
2) change PCD_INVALID_TOKEN_NUMBER to 0 as stipulated in MWG spec and PCD spec. 3) support returning a Default Value when a read failure by variable service for PCD entry with Variable Enabled. 4) Remove a lot of unreferenced JAVA import from CollectPCDAction.java, PCDAutoGenAction.java, MemoryDatabaseManager.java, Token.java and UsageInstance.java. 5) Opimized to merge elements in all tables in PCD database for make the code compact. 6) Did a tighter check on how dynamic PCD entry is referenced in each module. 7) Update the PCD driver/PEIM and PCD database generation verion to 2. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@605 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'EdkModulePkg')
-rw-r--r--EdkModulePkg/Universal/PCD/Dxe/Pcd.c10
-rw-r--r--EdkModulePkg/Universal/PCD/Dxe/Service.c63
-rw-r--r--EdkModulePkg/Universal/PCD/Dxe/Service.h2
-rw-r--r--EdkModulePkg/Universal/PCD/Pei/Pcd.c38
-rw-r--r--EdkModulePkg/Universal/PCD/Pei/Service.c48
-rw-r--r--EdkModulePkg/Universal/PCD/Pei/Service.h2
6 files changed, 127 insertions, 36 deletions
diff --git a/EdkModulePkg/Universal/PCD/Dxe/Pcd.c b/EdkModulePkg/Universal/PCD/Dxe/Pcd.c
index 45a6c5932a..55040fe159 100644
--- a/EdkModulePkg/Universal/PCD/Dxe/Pcd.c
+++ b/EdkModulePkg/Universal/PCD/Dxe/Pcd.c
@@ -183,7 +183,13 @@ DxePcdGetSize (
)
{
UINT16 * SizeTable;
-
+ //
+ // TokenNumber Zero is reserved as PCD_INVALID_TOKEN_NUMBER.
+ // We have to decrement TokenNumber by 1 to make it usable
+ // as the array index.
+ //
+ TokenNumber--;
+
SizeTable = (TokenNumber < PEI_LOCAL_TOKEN_NUMBER) ? mPcdDatabase->PeiDb.Init.SizeTable :
mPcdDatabase->DxeDb.Init.SizeTable;
@@ -493,7 +499,7 @@ DxeUnRegisterCallBackOnSet (
{
ASSERT (CallBackFunction != NULL);
- return DxeRegisterCallBackWorker (TokenNumber, Guid, CallBackFunction);
+ return DxeUnRegisterCallBackWorker (TokenNumber, Guid, CallBackFunction);
}
diff --git a/EdkModulePkg/Universal/PCD/Dxe/Service.c b/EdkModulePkg/Universal/PCD/Dxe/Service.c
index 36e859c779..9513143f26 100644
--- a/EdkModulePkg/Universal/PCD/Dxe/Service.c
+++ b/EdkModulePkg/Universal/PCD/Dxe/Service.c
@@ -50,10 +50,16 @@ GetWorker (
UINT16 StringTableIdx;
UINT32 LocalTokenNumber;
-
+ //
+ // TokenNumber Zero is reserved as PCD_INVALID_TOKEN_NUMBER.
+ // We have to decrement TokenNumber by 1 to make it usable
+ // as the array index.
+ //
+ TokenNumber--;
+
ASSERT (TokenNumber < PCD_TOTAL_TOKEN_NUMBER);
- Size = DxePcdGetSize (TokenNumber);
+ Size = DxePcdGetSize (TokenNumber + 1);
ASSERT (GetSize == Size || GetSize == 0);
@@ -100,11 +106,10 @@ GetWorker (
return (UINT8 *) Data + VariableHead->Offset;
} else {
//
- // BugBug: Need to support default value. The current implementation
- // will return a memory buffer with ALL ZERO.
- //
- return AllocateZeroPool (Size);
- }
+ // Return the default value specified by Platform Integrator
+ //
+ return (VOID *) ((UINT8 *) PcdDb + VariableHead->DefaultValueOffset);
+ }
case PCD_TYPE_STRING:
StringTableIdx = (UINT16) *((UINT8 *) PcdDb + Offset);
@@ -143,6 +148,13 @@ DxeRegisterCallBackWorker (
TokenNumber = GetExPcdTokenNumber (Guid, (UINT32) TokenNumber);
}
+ //
+ // TokenNumber Zero is reserved as PCD_INVALID_TOKEN_NUMBER.
+ // We have to decrement TokenNumber by 1 to make it usable
+ // as the array index.
+ //
+ TokenNumber--;
+
ListHead = &mCallbackFnTable[TokenNumber];
ListNode = GetFirstNode (ListHead);
@@ -186,6 +198,13 @@ DxeUnRegisterCallBackWorker (
TokenNumber = GetExPcdTokenNumber (Guid, (UINT32) TokenNumber);
}
+ //
+ // TokenNumber Zero is reserved as PCD_INVALID_TOKEN_NUMBER.
+ // We have to decrement TokenNumber by 1 to make it usable
+ // as the array index.
+ //
+ TokenNumber--;
+
ListHead = &mCallbackFnTable[TokenNumber];
ListNode = GetFirstNode (ListHead);
@@ -342,13 +361,17 @@ GetHiiVariable (
EFI_STATUS Status;
VOID *Buffer;
+ Size = 0;
+ Buffer = NULL;
+
Status = EfiGetVariable (
(UINT16 *)VariableName,
VariableGuid,
NULL,
&Size,
- NULL
+ Buffer
);
+
if (Status == EFI_BUFFER_TOO_SMALL) {
Buffer = AllocatePool (Size);
@@ -366,6 +389,9 @@ GetHiiVariable (
ASSERT (Status == EFI_SUCCESS);
}
+ *VariableData = Buffer;
+ *VariableSize = Size;
+
return Status;
}
@@ -444,6 +470,13 @@ InvokeCallbackOnSet (
LIST_ENTRY *ListHead;
LIST_ENTRY *ListNode;
+ //
+ // TokenNumber Zero is reserved as PCD_INVALID_TOKEN_NUMBER.
+ // We have to decrement TokenNumber by 1 to make it usable
+ // as the array index.
+ //
+ TokenNumber--;
+
ListHead = &mCallbackFnTable[TokenNumber];
ListNode = GetFirstNode (ListHead);
@@ -485,13 +518,19 @@ SetWorker (
UINTN Offset;
UINT8 *PcdDb;
-
+ //
+ // TokenNumber Zero is reserved as PCD_INVALID_TOKEN_NUMBER.
+ // We have to decrement TokenNumber by 1 to make it usable
+ // as the array index.
+ //
+ TokenNumber--;
+
ASSERT (TokenNumber < PCD_TOTAL_TOKEN_NUMBER);
if (PtrType) {
- ASSERT (Size <= DxePcdGetSize (TokenNumber));
+ ASSERT (Size <= DxePcdGetSize (TokenNumber + 1));
} else {
- ASSERT (Size == DxePcdGetSize (TokenNumber));
+ ASSERT (Size == DxePcdGetSize (TokenNumber + 1));
}
IsPeiDb = (TokenNumber < PEI_LOCAL_TOKEN_NUMBER) ? TRUE : FALSE;
@@ -501,7 +540,7 @@ SetWorker (
if ((TokenNumber < PEI_NEX_TOKEN_NUMBER) ||
(TokenNumber >= PEI_LOCAL_TOKEN_NUMBER || TokenNumber < (PEI_LOCAL_TOKEN_NUMBER + DXE_NEX_TOKEN_NUMBER))) {
- InvokeCallbackOnSet (0, NULL, TokenNumber, Data, Size);
+ InvokeCallbackOnSet (0, NULL, TokenNumber + 1, Data, Size);
}
TokenNumber = IsPeiDb ? TokenNumber
diff --git a/EdkModulePkg/Universal/PCD/Dxe/Service.h b/EdkModulePkg/Universal/PCD/Dxe/Service.h
index a1757ed056..c8bec08539 100644
--- a/EdkModulePkg/Universal/PCD/Dxe/Service.h
+++ b/EdkModulePkg/Universal/PCD/Dxe/Service.h
@@ -22,7 +22,7 @@ Module Name: Service.h
// Please make sure the PCD Serivce PEIM Version is consistent with
// the version of PCD Database generation tool
//
-#define PCD_DXE_SERVICE_DRIVER_VERSION 1
+#define PCD_DXE_SERVICE_DRIVER_VERSION 2
//
// PCD_DXE_DATABASE_GENTOOL_VERSION is defined in Autogen.h
diff --git a/EdkModulePkg/Universal/PCD/Pei/Pcd.c b/EdkModulePkg/Universal/PCD/Pei/Pcd.c
index b41d3ed09b..34af220f66 100644
--- a/EdkModulePkg/Universal/PCD/Pei/Pcd.c
+++ b/EdkModulePkg/Universal/PCD/Pei/Pcd.c
@@ -169,6 +169,13 @@ PeiPcdGetSize (
IN UINTN TokenNumber
)
{
+ //
+ // TokenNumber Zero is reserved as PCD_INVALID_TOKEN_NUMBER.
+ // We have to decrement TokenNumber by 1 to make it usable
+ // as the array index.
+ //
+ TokenNumber--;
+
ASSERT (TokenNumber < PEI_LOCAL_TOKEN_NUMBER);
return GetPcdDatabase()->Init.SizeTable[TokenNumber];
@@ -559,10 +566,10 @@ PeiPcdGetNextToken (
return EFI_SUCCESS;
}
-EFI_GUID *
+EFI_STATUS
EFIAPI
PeiPcdGetNextTokenSpaceGuid (
- IN CONST EFI_GUID *Guid
+ IN OUT CONST EFI_GUID **Guid
)
{
UINTN GuidTableIdx;
@@ -572,9 +579,17 @@ PeiPcdGetNextTokenSpaceGuid (
UINTN i;
BOOLEAN Found;
- if (PEI_EXMAP_TABLE_EMPTY) {
- return NULL;
- }
+ if (*Guid == NULL) {
+ if (PEI_EXMAP_TABLE_EMPTY) {
+ return EFI_SUCCESS;
+ } else {
+ //
+ // return the first Token Space Guid.
+ //
+ *Guid = &PeiPcdDb->Init.GuidTable[ExMapTable[0].ExGuidIndex];
+ return EFI_SUCCESS;
+ }
+ }
//
// Assume PCD Database AutoGen tool is sorting the ExMap based on the following order
@@ -583,10 +598,10 @@ PeiPcdGetNextTokenSpaceGuid (
//
PeiPcdDb = GetPcdDatabase ();
- MatchGuid = ScanGuid (PeiPcdDb->Init.GuidTable, sizeof(PeiPcdDb->Init.GuidTable), Guid);
+ MatchGuid = ScanGuid (PeiPcdDb->Init.GuidTable, sizeof(PeiPcdDb->Init.GuidTable), *Guid);
if (MatchGuid == NULL) {
- return NULL;
+ return EFI_NOT_FOUND;
}
GuidTableIdx = MatchGuid - PeiPcdDb->Init.GuidTable;
@@ -604,16 +619,13 @@ PeiPcdGetNextTokenSpaceGuid (
if (Found) {
for ( ; i < PEI_EXMAPPING_TABLE_SIZE; i++ ) {
if (ExMapTable[i].ExGuidIndex != GuidTableIdx ) {
- if (i < PEI_EXMAPPING_TABLE_SIZE) {
- return &PeiPcdDb->Init.GuidTable[ExMapTable[i].ExGuidIndex];
- } else {
- return NULL;
- }
+ *Guid = &PeiPcdDb->Init.GuidTable[ExMapTable[i].ExGuidIndex];
+ return EFI_SUCCESS;
}
}
}
- return NULL;
+ return EFI_NOT_FOUND;
}
diff --git a/EdkModulePkg/Universal/PCD/Pei/Service.c b/EdkModulePkg/Universal/PCD/Pei/Service.c
index 01fe0151bf..8d03d9c2b1 100644
--- a/EdkModulePkg/Universal/PCD/Pei/Service.c
+++ b/EdkModulePkg/Universal/PCD/Pei/Service.c
@@ -46,12 +46,27 @@ PeiRegisterCallBackWorker (
if (Guid == NULL) {
TokenNumber = ExTokenNumber;
+
+ //
+ // TokenNumber Zero is reserved as PCD_INVALID_TOKEN_NUMBER.
+ // We have to decrement TokenNumber by 1 to make it usable
+ // as the array index.
+ //
+ TokenNumber--;
ASSERT (TokenNumber < PEI_NEX_TOKEN_NUMBER);
} else {
TokenNumber = GetExPcdTokenNumber (Guid, ExTokenNumber);
+
+ //
+ // TokenNumber Zero is reserved as PCD_INVALID_TOKEN_NUMBER.
+ // We have to decrement TokenNumber by 1 to make it usable
+ // as the array index.
+ //
+ TokenNumber--;
ASSERT (TokenNumber < PEI_LOCAL_TOKEN_NUMBER);
}
+
LocalTokenNumber = GetPcdDatabase()->Init.LocalTokenNumberTable[TokenNumber];
ASSERT ((LocalTokenNumber & PCD_TYPE_HII) == 0);
@@ -248,6 +263,13 @@ InvokeCallbackOnSet (
PCD_PPI_CALLBACK *CallbackTable;
UINTN Idx;
+ //
+ // TokenNumber Zero is reserved as PCD_INVALID_TOKEN_NUMBER.
+ // We have to decrement TokenNumber by 1 to make it usable
+ // as the array index.
+ //
+ TokenNumber--;
+
if (Guid == NULL)
ASSERT (TokenNumber < PEI_LOCAL_TOKEN_NUMBER);
@@ -287,6 +309,13 @@ SetWorker (
UINTN Offset;
VOID *InternalData;
+ //
+ // TokenNumber Zero is reserved as PCD_INVALID_TOKEN_NUMBER.
+ // We have to decrement TokenNumber by 1 to make it usable
+ // as the array index.
+ //
+ TokenNumber--;
+
ASSERT (TokenNumber < PEI_LOCAL_TOKEN_NUMBER);
PeiPcdDb = GetPcdDatabase ();
@@ -305,7 +334,7 @@ SetWorker (
// type PCD entry in ExSetWorker.
//
if (TokenNumber < PEI_NEX_TOKEN_NUMBER) {
- InvokeCallbackOnSet (0, NULL, TokenNumber, Data, Size);
+ InvokeCallbackOnSet (0, NULL, TokenNumber + 1, Data, Size);
}
if ((LocalTokenNumber & PCD_TYPE_SKU_ENABLED) == PCD_TYPE_SKU_ENABLED) {
@@ -425,9 +454,16 @@ GetWorker (
UINT32 LocalTokenNumber;
UINTN Size;
+ //
+ // TokenNumber Zero is reserved as PCD_INVALID_TOKEN_NUMBER.
+ // We have to decrement TokenNumber by 1 to make it usable
+ // as the array index.
+ //
+ TokenNumber--;
+
ASSERT (TokenNumber < PEI_LOCAL_TOKEN_NUMBER);
- Size = PeiPcdGetSize(TokenNumber);
+ Size = PeiPcdGetSize(TokenNumber + 1);
ASSERT (GetSize == Size || GetSize == 0);
@@ -464,16 +500,14 @@ GetWorker (
return (VOID *) ((UINT8 *) Data + VariableHead->Offset);
} else {
//
- // BugBug: Need to support default value. The current implementation
- // will return a memory buffer with ALL ZERO.
- //
- return AllocateZeroPool (Size);
+ // Return the default value specified by Platform Integrator
+ //
+ return (VOID *) ((UINT8 *) PeiPcdDb + VariableHead->DefaultValueOffset);
}
}
case PCD_TYPE_DATA:
return (VOID *) ((UINT8 *)PeiPcdDb + Offset);
- break;
case PCD_TYPE_STRING:
StringTableIdx = (UINT16) *((UINT8 *) PeiPcdDb + Offset);
diff --git a/EdkModulePkg/Universal/PCD/Pei/Service.h b/EdkModulePkg/Universal/PCD/Pei/Service.h
index e62d0307a7..563e82ae22 100644
--- a/EdkModulePkg/Universal/PCD/Pei/Service.h
+++ b/EdkModulePkg/Universal/PCD/Pei/Service.h
@@ -22,7 +22,7 @@ Module Name: Service.h
// Please make sure the PCD Serivce PEIM Version is consistent with
// the version of PCD Database generation tool
//
-#define PCD_PEI_SERVICE_DRIVER_VERSION 1
+#define PCD_PEI_SERVICE_DRIVER_VERSION 2
//
// PCD_PEI_DATABASE_GENTOOL_VERSION is defined in Autogen.h