Fix bugs in GetNextTokenSpace and GetNextToken

Fix bugs in Pcd Build tool generation for ExMap

Fix a few other bugs.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@800 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
qwang12
2006-07-06 11:42:25 +00:00
parent 9c2aaac08e
commit c24ba2f612
5 changed files with 334 additions and 308 deletions

View File

@@ -481,16 +481,14 @@ PeiPcdGetNextToken (
if (Guid == NULL) {
(*TokenNumber)++;
if (*TokenNumber >= PEI_NEX_TOKEN_NUMBER) {
if (*TokenNumber > PEI_NEX_TOKEN_NUMBER) {
*TokenNumber = PCD_INVALID_TOKEN_NUMBER;
}
return EFI_SUCCESS;
} else {
if (PEI_EXMAP_TABLE_EMPTY) {
*TokenNumber = PCD_INVALID_TOKEN_NUMBER;
return EFI_NOT_FOUND;
return EFI_SUCCESS;
}
//
@@ -503,7 +501,7 @@ PeiPcdGetNextToken (
MatchGuid = ScanGuid (PeiPcdDb->Init.GuidTable, sizeof(PeiPcdDb->Init.GuidTable), Guid);
if (MatchGuid == NULL) {
*TokenNumber = (UINTN) PCD_INVALID_TOKEN_NUMBER;
*TokenNumber = PCD_INVALID_TOKEN_NUMBER;
return EFI_NOT_FOUND;
}
@@ -512,6 +510,9 @@ PeiPcdGetNextToken (
ExMapTable = PeiPcdDb->Init.ExMapTable;
Found = FALSE;
//
// Locate the GUID in ExMapTable first.
//
for (i = 0; i < PEI_EXMAPPING_TABLE_SIZE; i++) {
if (ExMapTable[i].ExGuidIndex == GuidTableIdx) {
Found = TRUE;
@@ -524,26 +525,31 @@ PeiPcdGetNextToken (
*TokenNumber = ExMapTable[i].ExTokenNumber;
return EFI_SUCCESS;
}
for ( ; ExMapTable[i].ExGuidIndex == GuidTableIdx; i++) {
for ( ; i < PEI_EXMAPPING_TABLE_SIZE; i++) {
if (ExMapTable[i].ExTokenNumber == *TokenNumber) {
i++;
if (i == PEI_EXMAPPING_TABLE_SIZE) {
//
// Exceed the length of ExMap Table
//
*TokenNumber = PCD_INVALID_TOKEN_NUMBER;
return EFI_SUCCESS;
}
if (ExMapTable[i].ExGuidIndex == GuidTableIdx) {
*TokenNumber = ExMapTable[i].ExTokenNumber;
return EFI_SUCCESS;
} else {
*TokenNumber = (UINTN) PCD_INVALID_TOKEN_NUMBER;
*TokenNumber = PCD_INVALID_TOKEN_NUMBER;
return EFI_SUCCESS;
}
}
}
return EFI_NOT_FOUND;
}
}
return EFI_SUCCESS;
return EFI_NOT_FOUND;
}

View File

@@ -32,130 +32,6 @@ Module Name: Service.h
#error "Please make sure the version of PCD Service PEIM and PCD PEI Database Generation Tool matches"
#endif
/* Internal Function definitions */
PEI_PCD_DATABASE *
GetPcdDatabase (
VOID
)
;
EFI_STATUS
SetValueWorker (
IN UINTN TokenNumber,
IN VOID *Data,
IN UINTN Size
)
;
EFI_STATUS
SetWorker (
IN UINTN TokenNumber,
IN VOID *Data,
IN OUT UINTN *Size,
IN BOOLEAN PtrType
)
;
EFI_STATUS
ExSetValueWorker (
IN UINTN ExTokenNumber,
IN CONST EFI_GUID *Guid,
IN VOID *Data,
IN UINTN Size
)
;
EFI_STATUS
ExSetWorker (
IN UINTN ExTokenNumber,
IN CONST EFI_GUID *Guid,
IN VOID *Data,
IN OUT UINTN *Size,
IN BOOLEAN PtrType
)
;
VOID *
GetWorker (
IN UINTN TokenNumber,
IN UINTN GetSize
)
;
VOID *
ExGetWorker (
IN CONST EFI_GUID *Guid,
IN UINTN ExTokenNumber,
IN UINTN GetSize
)
;
typedef struct {
UINTN TokenNumber;
UINTN Size;
UINT32 LocalTokenNumberAlias;
} EX_PCD_ENTRY_ATTRIBUTE;
UINTN
GetExPcdTokenNumber (
IN CONST EFI_GUID *Guid,
IN UINTN ExTokenNumber
)
;
EFI_STATUS
PeiRegisterCallBackWorker (
IN UINTN TokenNumber,
IN CONST GUID *Guid, OPTIONAL
IN PCD_PPI_CALLBACK CallBackFunction,
IN BOOLEAN Register
);
VOID
BuildPcdDatabase (
VOID
)
;
UINTN
GetPtrTypeSize (
IN UINTN LocalTokenNumberTableIdx,
OUT UINTN *MaxSize,
IN PEI_PCD_DATABASE *Database
)
;
BOOLEAN
SetPtrTypeSize (
IN UINTN LocalTokenNumberTableIdx,
IN OUT UINTN *CurrentSize,
IN PEI_PCD_DATABASE *Database
)
;
//
// PPI Interface Implementation Declaration.
//
@@ -436,6 +312,131 @@ PeiPcdGetNextTokenSpace (
)
;
/* Internal Function definitions */
PEI_PCD_DATABASE *
GetPcdDatabase (
VOID
)
;
EFI_STATUS
SetValueWorker (
IN UINTN TokenNumber,
IN VOID *Data,
IN UINTN Size
)
;
EFI_STATUS
SetWorker (
IN UINTN TokenNumber,
IN VOID *Data,
IN OUT UINTN *Size,
IN BOOLEAN PtrType
)
;
EFI_STATUS
ExSetValueWorker (
IN UINTN ExTokenNumber,
IN CONST EFI_GUID *Guid,
IN VOID *Data,
IN UINTN Size
)
;
EFI_STATUS
ExSetWorker (
IN UINTN ExTokenNumber,
IN CONST EFI_GUID *Guid,
IN VOID *Data,
IN OUT UINTN *Size,
IN BOOLEAN PtrType
)
;
VOID *
GetWorker (
IN UINTN TokenNumber,
IN UINTN GetSize
)
;
VOID *
ExGetWorker (
IN CONST EFI_GUID *Guid,
IN UINTN ExTokenNumber,
IN UINTN GetSize
)
;
typedef struct {
UINTN TokenNumber;
UINTN Size;
UINT32 LocalTokenNumberAlias;
} EX_PCD_ENTRY_ATTRIBUTE;
UINTN
GetExPcdTokenNumber (
IN CONST EFI_GUID *Guid,
IN UINTN ExTokenNumber
)
;
EFI_STATUS
PeiRegisterCallBackWorker (
IN UINTN TokenNumber,
IN CONST GUID *Guid, OPTIONAL
IN PCD_PPI_CALLBACK CallBackFunction,
IN BOOLEAN Register
);
VOID
BuildPcdDatabase (
VOID
)
;
UINTN
GetPtrTypeSize (
IN UINTN LocalTokenNumberTableIdx,
OUT UINTN *MaxSize,
IN PEI_PCD_DATABASE *Database
)
;
BOOLEAN
SetPtrTypeSize (
IN UINTN LocalTokenNumberTableIdx,
IN OUT UINTN *CurrentSize,
IN PEI_PCD_DATABASE *Database
)
;
extern EFI_GUID gPcdDataBaseHobGuid;
extern EFI_GUID gPcdPeiCallbackFnTableHobGuid;