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
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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;
|
||||
|
||||
}
|
||||
|
||||
|
@@ -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);
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user