mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-23 21:54:27 +02:00
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:
parent
9c2aaac08e
commit
c24ba2f612
@ -53,7 +53,8 @@ PCD_PROTOCOL mPcdInstance = {
|
|||||||
|
|
||||||
DxeRegisterCallBackOnSet,
|
DxeRegisterCallBackOnSet,
|
||||||
DxeUnRegisterCallBackOnSet,
|
DxeUnRegisterCallBackOnSet,
|
||||||
DxePcdGetNextToken
|
DxePcdGetNextToken,
|
||||||
|
DxePcdGetNextTokenSpace
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -505,31 +506,26 @@ DxePcdGetNextToken (
|
|||||||
//
|
//
|
||||||
if (Guid == NULL) {
|
if (Guid == NULL) {
|
||||||
(*TokenNumber)++;
|
(*TokenNumber)++;
|
||||||
if (*TokenNumber == PCD_INVALID_TOKEN_NUMBER) {
|
if (*TokenNumber > PEI_NEX_TOKEN_NUMBER &&
|
||||||
return EFI_SUCCESS;
|
*TokenNumber <= PEI_LOCAL_TOKEN_NUMBER) {
|
||||||
} else {
|
//
|
||||||
if (*TokenNumber >= PEI_NEX_TOKEN_NUMBER &&
|
// The first Non-Ex type Token Number for DXE PCD
|
||||||
*TokenNumber < PEI_LOCAL_TOKEN_NUMBER) {
|
// database is PEI_LOCAL_TOKEN_NUMBER
|
||||||
//
|
//
|
||||||
// The first Non-Ex type Token Number for DXE PCD
|
*TokenNumber = PEI_LOCAL_TOKEN_NUMBER;
|
||||||
// database is PEI_LOCAL_TOKEN_NUMBER
|
} else if (*TokenNumber > DXE_NEX_TOKEN_NUMBER + PEI_LOCAL_TOKEN_NUMBER) {
|
||||||
//
|
*TokenNumber = PCD_INVALID_TOKEN_NUMBER;
|
||||||
*TokenNumber = PEI_LOCAL_TOKEN_NUMBER;
|
|
||||||
return EFI_SUCCESS;
|
|
||||||
} else if (*TokenNumber >= DXE_NEX_TOKEN_NUMBER + PEI_LOCAL_TOKEN_NUMBER) {
|
|
||||||
*TokenNumber = PCD_INVALID_TOKEN_NUMBER;
|
|
||||||
return EFI_SUCCESS;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PEI_EXMAP_TABLE_EMPTY && PEI_EXMAP_TABLE_EMPTY) {
|
if (PEI_EXMAP_TABLE_EMPTY && DXE_EXMAP_TABLE_EMPTY) {
|
||||||
*TokenNumber = (UINTN) PCD_INVALID_TOKEN_NUMBER;
|
*TokenNumber = PCD_INVALID_TOKEN_NUMBER;
|
||||||
return EFI_NOT_FOUND;
|
return EFI_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
ExTokenNumber = *TokenNumber;
|
|
||||||
if (!PEI_EXMAP_TABLE_EMPTY) {
|
if (!PEI_EXMAP_TABLE_EMPTY) {
|
||||||
|
ExTokenNumber = *TokenNumber;
|
||||||
ExTokenNumber = ExGetNextTokeNumber (
|
ExTokenNumber = ExGetNextTokeNumber (
|
||||||
Guid,
|
Guid,
|
||||||
ExTokenNumber,
|
ExTokenNumber,
|
||||||
@ -543,13 +539,14 @@ DxePcdGetNextToken (
|
|||||||
if ((ExTokenNumber == PCD_INVALID_TOKEN_NUMBER) &&
|
if ((ExTokenNumber == PCD_INVALID_TOKEN_NUMBER) &&
|
||||||
!DXE_EXMAP_TABLE_EMPTY
|
!DXE_EXMAP_TABLE_EMPTY
|
||||||
) {
|
) {
|
||||||
|
ExTokenNumber = *TokenNumber;
|
||||||
ExTokenNumber = ExGetNextTokeNumber (
|
ExTokenNumber = ExGetNextTokeNumber (
|
||||||
Guid,
|
Guid,
|
||||||
ExTokenNumber,
|
ExTokenNumber,
|
||||||
mPcdDatabase->PeiDb.Init.GuidTable,
|
mPcdDatabase->DxeDb.Init.GuidTable,
|
||||||
sizeof(mPcdDatabase->PeiDb.Init.GuidTable),
|
sizeof(mPcdDatabase->DxeDb.Init.GuidTable),
|
||||||
mPcdDatabase->PeiDb.Init.ExMapTable,
|
mPcdDatabase->DxeDb.Init.ExMapTable,
|
||||||
sizeof(mPcdDatabase->PeiDb.Init.ExMapTable)
|
sizeof(mPcdDatabase->DxeDb.Init.ExMapTable)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -578,19 +575,28 @@ GetDistinctTokenSpace (
|
|||||||
TsIdx = 0;
|
TsIdx = 0;
|
||||||
OldGuidIndex = ExMapTable[0].ExGuidIndex;
|
OldGuidIndex = ExMapTable[0].ExGuidIndex;
|
||||||
DistinctTokenSpace[TsIdx] = &GuidTable[OldGuidIndex];
|
DistinctTokenSpace[TsIdx] = &GuidTable[OldGuidIndex];
|
||||||
for (Idx = 1; Idx < PEI_EXMAPPING_TABLE_SIZE; Idx++) {
|
for (Idx = 1; Idx < *ExMapTableSize; Idx++) {
|
||||||
if (ExMapTable[Idx].ExGuidIndex != OldGuidIndex) {
|
if (ExMapTable[Idx].ExGuidIndex != OldGuidIndex) {
|
||||||
OldGuidIndex = ExMapTable[Idx].ExGuidIndex;
|
OldGuidIndex = ExMapTable[Idx].ExGuidIndex;
|
||||||
DistinctTokenSpace[++TsIdx] = &GuidTable[OldGuidIndex];
|
DistinctTokenSpace[++TsIdx] = &GuidTable[OldGuidIndex];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
*ExMapTableSize = TsIdx;
|
//
|
||||||
|
// The total number of Distinct Token Space
|
||||||
|
// is TsIdx + 1 because we use TsIdx as a index
|
||||||
|
// to the DistinctTokenSpace[]
|
||||||
|
//
|
||||||
|
*ExMapTableSize = TsIdx + 1;
|
||||||
return DistinctTokenSpace;
|
return DistinctTokenSpace;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Just pre-allocate a memory buffer that is big enough to
|
||||||
|
// host all distinct TokenSpace guid in both
|
||||||
|
// PEI ExMap and DXE ExMap.
|
||||||
|
//
|
||||||
STATIC EFI_GUID *TmpTokenSpaceBuffer[PEI_EXMAPPING_TABLE_SIZE + DXE_EXMAPPING_TABLE_SIZE] = { 0 };
|
STATIC EFI_GUID *TmpTokenSpaceBuffer[PEI_EXMAPPING_TABLE_SIZE + DXE_EXMAPPING_TABLE_SIZE] = { 0 };
|
||||||
|
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
@ -619,7 +625,7 @@ DxePcdGetNextTokenSpace (
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (TmpTokenSpaceBuffer[0] != NULL) {
|
if (TmpTokenSpaceBuffer[0] == NULL) {
|
||||||
PeiTokenSpaceTableSize = 0;
|
PeiTokenSpaceTableSize = 0;
|
||||||
|
|
||||||
if (!PEI_EXMAP_TABLE_EMPTY) {
|
if (!PEI_EXMAP_TABLE_EMPTY) {
|
||||||
|
@ -32,144 +32,6 @@ Module Name: Service.h
|
|||||||
#error "Please make sure the version of PCD Service DXE Driver and PCD DXE Database Generation Tool matches"
|
#error "Please make sure the version of PCD Service DXE Driver and PCD DXE Database Generation Tool matches"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
LIST_ENTRY Node;
|
|
||||||
PCD_PROTOCOL_CALLBACK CallbackFn;
|
|
||||||
} CALLBACK_FN_ENTRY;
|
|
||||||
|
|
||||||
#define CR_FNENTRY_FROM_LISTNODE(Record, Type, Field) _CR(Record, Type, Field)
|
|
||||||
|
|
||||||
//
|
|
||||||
// Internal Functions
|
|
||||||
//
|
|
||||||
|
|
||||||
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 SetSize
|
|
||||||
)
|
|
||||||
;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
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
|
|
||||||
)
|
|
||||||
;
|
|
||||||
|
|
||||||
UINT32
|
|
||||||
GetSkuEnabledTokenNumber (
|
|
||||||
UINT32 LocalTokenNumber,
|
|
||||||
UINTN Size,
|
|
||||||
BOOLEAN IsPeiDb
|
|
||||||
)
|
|
||||||
;
|
|
||||||
|
|
||||||
EFI_STATUS
|
|
||||||
GetHiiVariable (
|
|
||||||
IN EFI_GUID *VariableGuid,
|
|
||||||
IN UINT16 *VariableName,
|
|
||||||
OUT VOID **VariableData,
|
|
||||||
OUT UINTN *VariableSize
|
|
||||||
)
|
|
||||||
;
|
|
||||||
|
|
||||||
EFI_STATUS
|
|
||||||
SetHiiVariable (
|
|
||||||
IN EFI_GUID *VariableGuid,
|
|
||||||
IN UINT16 *VariableName,
|
|
||||||
IN CONST VOID *Data,
|
|
||||||
IN UINTN DataSize,
|
|
||||||
IN UINTN Offset
|
|
||||||
)
|
|
||||||
;
|
|
||||||
|
|
||||||
EFI_STATUS
|
|
||||||
DxeRegisterCallBackWorker (
|
|
||||||
IN UINTN TokenNumber,
|
|
||||||
IN CONST EFI_GUID *Guid, OPTIONAL
|
|
||||||
IN PCD_PROTOCOL_CALLBACK CallBackFunction
|
|
||||||
);
|
|
||||||
|
|
||||||
EFI_STATUS
|
|
||||||
DxeUnRegisterCallBackWorker (
|
|
||||||
IN UINTN TokenNumber,
|
|
||||||
IN CONST EFI_GUID *Guid, OPTIONAL
|
|
||||||
IN PCD_PROTOCOL_CALLBACK CallBackFunction
|
|
||||||
);
|
|
||||||
|
|
||||||
VOID
|
|
||||||
BuildPcdDxeDataBase (
|
|
||||||
VOID
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
UINTN
|
|
||||||
GetExPcdTokenNumber (
|
|
||||||
IN CONST EFI_GUID *Guid,
|
|
||||||
IN UINT32 ExTokenNumber
|
|
||||||
)
|
|
||||||
;
|
|
||||||
|
|
||||||
|
|
||||||
UINTN
|
|
||||||
GetPtrTypeSize (
|
|
||||||
IN UINTN LocalTokenNumberTableIdx,
|
|
||||||
OUT UINTN *MaxSize
|
|
||||||
)
|
|
||||||
;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
BOOLEAN
|
|
||||||
SetPtrTypeSize (
|
|
||||||
IN UINTN LocalTokenNumberTableIdx,
|
|
||||||
IN OUT UINTN *CurrentSize
|
|
||||||
)
|
|
||||||
;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Protocol Interface function declaration.
|
// Protocol Interface function declaration.
|
||||||
//
|
//
|
||||||
@ -447,6 +309,138 @@ DxePcdGetNextToken (
|
|||||||
)
|
)
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
DxePcdGetNextTokenSpace (
|
||||||
|
IN OUT CONST EFI_GUID **Guid
|
||||||
|
)
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
LIST_ENTRY Node;
|
||||||
|
PCD_PROTOCOL_CALLBACK CallbackFn;
|
||||||
|
} CALLBACK_FN_ENTRY;
|
||||||
|
|
||||||
|
#define CR_FNENTRY_FROM_LISTNODE(Record, Type, Field) _CR(Record, Type, Field)
|
||||||
|
|
||||||
|
//
|
||||||
|
// Internal Functions
|
||||||
|
//
|
||||||
|
|
||||||
|
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 SetSize
|
||||||
|
)
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
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
|
||||||
|
)
|
||||||
|
;
|
||||||
|
|
||||||
|
UINT32
|
||||||
|
GetSkuEnabledTokenNumber (
|
||||||
|
UINT32 LocalTokenNumber,
|
||||||
|
UINTN Size,
|
||||||
|
BOOLEAN IsPeiDb
|
||||||
|
)
|
||||||
|
;
|
||||||
|
|
||||||
|
EFI_STATUS
|
||||||
|
GetHiiVariable (
|
||||||
|
IN EFI_GUID *VariableGuid,
|
||||||
|
IN UINT16 *VariableName,
|
||||||
|
OUT VOID **VariableData,
|
||||||
|
OUT UINTN *VariableSize
|
||||||
|
)
|
||||||
|
;
|
||||||
|
|
||||||
|
EFI_STATUS
|
||||||
|
SetHiiVariable (
|
||||||
|
IN EFI_GUID *VariableGuid,
|
||||||
|
IN UINT16 *VariableName,
|
||||||
|
IN CONST VOID *Data,
|
||||||
|
IN UINTN DataSize,
|
||||||
|
IN UINTN Offset
|
||||||
|
)
|
||||||
|
;
|
||||||
|
|
||||||
|
EFI_STATUS
|
||||||
|
DxeRegisterCallBackWorker (
|
||||||
|
IN UINTN TokenNumber,
|
||||||
|
IN CONST EFI_GUID *Guid, OPTIONAL
|
||||||
|
IN PCD_PROTOCOL_CALLBACK CallBackFunction
|
||||||
|
);
|
||||||
|
|
||||||
|
EFI_STATUS
|
||||||
|
DxeUnRegisterCallBackWorker (
|
||||||
|
IN UINTN TokenNumber,
|
||||||
|
IN CONST EFI_GUID *Guid, OPTIONAL
|
||||||
|
IN PCD_PROTOCOL_CALLBACK CallBackFunction
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
BuildPcdDxeDataBase (
|
||||||
|
VOID
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
UINTN
|
||||||
|
GetExPcdTokenNumber (
|
||||||
|
IN CONST EFI_GUID *Guid,
|
||||||
|
IN UINT32 ExTokenNumber
|
||||||
|
)
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
UINTN
|
UINTN
|
||||||
ExGetNextTokeNumber (
|
ExGetNextTokeNumber (
|
||||||
IN CONST EFI_GUID *Guid,
|
IN CONST EFI_GUID *Guid,
|
||||||
@ -458,6 +452,23 @@ ExGetNextTokeNumber (
|
|||||||
)
|
)
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
||||||
|
UINTN
|
||||||
|
GetPtrTypeSize (
|
||||||
|
IN UINTN LocalTokenNumberTableIdx,
|
||||||
|
OUT UINTN *MaxSize
|
||||||
|
)
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
BOOLEAN
|
||||||
|
SetPtrTypeSize (
|
||||||
|
IN UINTN LocalTokenNumberTableIdx,
|
||||||
|
IN OUT UINTN *CurrentSize
|
||||||
|
)
|
||||||
|
;
|
||||||
|
|
||||||
extern EFI_GUID gPcdDataBaseHobGuid;
|
extern EFI_GUID gPcdDataBaseHobGuid;
|
||||||
|
|
||||||
extern PCD_DATABASE * mPcdDatabase;
|
extern PCD_DATABASE * mPcdDatabase;
|
||||||
|
@ -481,16 +481,14 @@ PeiPcdGetNextToken (
|
|||||||
|
|
||||||
if (Guid == NULL) {
|
if (Guid == NULL) {
|
||||||
(*TokenNumber)++;
|
(*TokenNumber)++;
|
||||||
|
if (*TokenNumber > PEI_NEX_TOKEN_NUMBER) {
|
||||||
if (*TokenNumber >= PEI_NEX_TOKEN_NUMBER) {
|
|
||||||
*TokenNumber = PCD_INVALID_TOKEN_NUMBER;
|
*TokenNumber = PCD_INVALID_TOKEN_NUMBER;
|
||||||
}
|
}
|
||||||
|
return EFI_SUCCESS;
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
if (PEI_EXMAP_TABLE_EMPTY) {
|
if (PEI_EXMAP_TABLE_EMPTY) {
|
||||||
*TokenNumber = PCD_INVALID_TOKEN_NUMBER;
|
*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);
|
MatchGuid = ScanGuid (PeiPcdDb->Init.GuidTable, sizeof(PeiPcdDb->Init.GuidTable), Guid);
|
||||||
|
|
||||||
if (MatchGuid == NULL) {
|
if (MatchGuid == NULL) {
|
||||||
*TokenNumber = (UINTN) PCD_INVALID_TOKEN_NUMBER;
|
*TokenNumber = PCD_INVALID_TOKEN_NUMBER;
|
||||||
return EFI_NOT_FOUND;
|
return EFI_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -512,6 +510,9 @@ PeiPcdGetNextToken (
|
|||||||
ExMapTable = PeiPcdDb->Init.ExMapTable;
|
ExMapTable = PeiPcdDb->Init.ExMapTable;
|
||||||
|
|
||||||
Found = FALSE;
|
Found = FALSE;
|
||||||
|
//
|
||||||
|
// Locate the GUID in ExMapTable first.
|
||||||
|
//
|
||||||
for (i = 0; i < PEI_EXMAPPING_TABLE_SIZE; i++) {
|
for (i = 0; i < PEI_EXMAPPING_TABLE_SIZE; i++) {
|
||||||
if (ExMapTable[i].ExGuidIndex == GuidTableIdx) {
|
if (ExMapTable[i].ExGuidIndex == GuidTableIdx) {
|
||||||
Found = TRUE;
|
Found = TRUE;
|
||||||
@ -524,26 +525,31 @@ PeiPcdGetNextToken (
|
|||||||
*TokenNumber = ExMapTable[i].ExTokenNumber;
|
*TokenNumber = ExMapTable[i].ExTokenNumber;
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( ; ExMapTable[i].ExGuidIndex == GuidTableIdx; i++) {
|
for ( ; i < PEI_EXMAPPING_TABLE_SIZE; i++) {
|
||||||
if (ExMapTable[i].ExTokenNumber == *TokenNumber) {
|
if (ExMapTable[i].ExTokenNumber == *TokenNumber) {
|
||||||
i++;
|
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) {
|
if (ExMapTable[i].ExGuidIndex == GuidTableIdx) {
|
||||||
*TokenNumber = ExMapTable[i].ExTokenNumber;
|
*TokenNumber = ExMapTable[i].ExTokenNumber;
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
} else {
|
} else {
|
||||||
*TokenNumber = (UINTN) PCD_INVALID_TOKEN_NUMBER;
|
*TokenNumber = PCD_INVALID_TOKEN_NUMBER;
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return EFI_NOT_FOUND;
|
return EFI_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
return EFI_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -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"
|
#error "Please make sure the version of PCD Service PEIM and PCD PEI Database Generation Tool matches"
|
||||||
#endif
|
#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.
|
// 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 gPcdDataBaseHobGuid;
|
||||||
|
|
||||||
extern EFI_GUID gPcdPeiCallbackFnTableHobGuid;
|
extern EFI_GUID gPcdPeiCallbackFnTableHobGuid;
|
||||||
|
@ -430,7 +430,7 @@ class GuidTable {
|
|||||||
// If so, return the GuidTable index.
|
// If so, return the GuidTable index.
|
||||||
//
|
//
|
||||||
for (int i = 0; i < al.size(); i++) {
|
for (int i = 0; i < al.size(); i++) {
|
||||||
if (al.get(i).equals(uuid)) {
|
if (al.get(i).compareTo(uuid) == 0) {
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -752,7 +752,7 @@ class ExMapTable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private ArrayList<ExTriplet> al;
|
private ArrayList<ExTriplet> al;
|
||||||
private ArrayList<String> alComment;
|
private Map<ExTriplet, String> alComment;
|
||||||
private String phase;
|
private String phase;
|
||||||
private int len;
|
private int len;
|
||||||
private int bodyLineNum;
|
private int bodyLineNum;
|
||||||
@ -760,7 +760,7 @@ class ExMapTable {
|
|||||||
public ExMapTable (String phase) {
|
public ExMapTable (String phase) {
|
||||||
this.phase = phase;
|
this.phase = phase;
|
||||||
al = new ArrayList<ExTriplet>();
|
al = new ArrayList<ExTriplet>();
|
||||||
alComment = new ArrayList<String>();
|
alComment = new HashMap<ExTriplet, String>();
|
||||||
bodyLineNum = 0;
|
bodyLineNum = 0;
|
||||||
len = 0;
|
len = 0;
|
||||||
}
|
}
|
||||||
@ -815,7 +815,7 @@ class ExMapTable {
|
|||||||
str += e.localTokenIdx.toString() + ", ";
|
str += e.localTokenIdx.toString() + ", ";
|
||||||
str += e.guidTableIdx.toString();
|
str += e.guidTableIdx.toString();
|
||||||
|
|
||||||
str += "}" + " /* " + alComment.get(index) + " */" ;
|
str += "}" + " /* " + alComment.get(e) + " */" ;
|
||||||
|
|
||||||
if (index != al.size() - 1) {
|
if (index != al.size() - 1) {
|
||||||
str += ",";
|
str += ",";
|
||||||
@ -834,9 +834,11 @@ class ExMapTable {
|
|||||||
public int add (int localTokenIdx, long exTokenNum, int guidTableIdx, String name) {
|
public int add (int localTokenIdx, long exTokenNum, int guidTableIdx, String name) {
|
||||||
int index = len;
|
int index = len;
|
||||||
|
|
||||||
len++;
|
len++;
|
||||||
al.add(new ExTriplet(guidTableIdx, exTokenNum, localTokenIdx));
|
ExTriplet et = new ExTriplet(guidTableIdx, exTokenNum, localTokenIdx);
|
||||||
alComment.add(name);
|
|
||||||
|
al.add(et);
|
||||||
|
alComment.put(et, name);
|
||||||
|
|
||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user