Add in support for GetNextTokenNumber API.

Use PCD_TOKEN_NUMBER as type for parameter of internal APIs.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@312 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
qwang12
2006-05-29 10:42:13 +00:00
parent 19b362e879
commit 0653eb895d
6 changed files with 66 additions and 44 deletions

View File

@ -444,10 +444,10 @@ InvokeCallbackOnSet (
EFI_STATUS EFI_STATUS
SetWorker ( SetWorker (
UINTN TokenNumber, PCD_TOKEN_NUMBER TokenNumber,
VOID *Data, VOID *Data,
UINTN Size, UINTN Size,
BOOLEAN PtrType BOOLEAN PtrType
) )
{ {
UINT32 *LocalTokenNumberTable; UINT32 *LocalTokenNumberTable;
@ -467,11 +467,11 @@ SetWorker (
LocalTokenNumberTable = IsPeiDb ? mPcdDatabase->PeiDb.Init.LocalTokenNumberTable : LocalTokenNumberTable = IsPeiDb ? mPcdDatabase->PeiDb.Init.LocalTokenNumberTable :
mPcdDatabase->DxeDb.Init.LocalTokenNumberTable; mPcdDatabase->DxeDb.Init.LocalTokenNumberTable;
InvokeCallbackOnSet (0, NULL, TokenNumber, Data, Size);
TokenNumber = IsPeiDb ? TokenNumber TokenNumber = IsPeiDb ? TokenNumber
: TokenNumber - PEI_LOCAL_TOKEN_NUMBER; : TokenNumber - PEI_LOCAL_TOKEN_NUMBER;
InvokeCallbackOnSet (0, NULL, TokenNumber, Data, Size);
return SetWorkerByLocalTokenNumber (LocalTokenNumberTable[TokenNumber], Data, Size, PtrType, IsPeiDb); return SetWorkerByLocalTokenNumber (LocalTokenNumberTable[TokenNumber], Data, Size, PtrType, IsPeiDb);
} }
@ -505,7 +505,7 @@ ExGetWorker (
EFI_STATUS EFI_STATUS
ExSetWorker ( ExSetWorker (
IN UINT32 ExTokenNumber, IN PCD_TOKEN_NUMBER ExTokenNumber,
IN CONST EFI_GUID *Guid, IN CONST EFI_GUID *Guid,
VOID *Data, VOID *Data,
UINTN SetSize, UINTN SetSize,
@ -683,7 +683,7 @@ SetHiiVariable (
VOID VOID
GetExPcdTokenAttributes ( GetExPcdTokenAttributes (
IN CONST EFI_GUID *Guid, IN CONST EFI_GUID *Guid,
IN UINT32 ExTokenNumber, IN PCD_TOKEN_NUMBER ExTokenNumber,
OUT EX_PCD_ENTRY_ATTRIBUTE *ExAttr OUT EX_PCD_ENTRY_ATTRIBUTE *ExAttr
) )
{ {
@ -721,7 +721,7 @@ GetExPcdTokenAttributes (
ExAttr->IsPeiDb = FALSE; ExAttr->IsPeiDb = FALSE;
ExAttr->Size = SizeTable[i + DXE_NEX_TOKEN_NUMBER]; ExAttr->Size = SizeTable[i + DXE_NEX_TOKEN_NUMBER];
ExAttr->TokenNumber = i + DXE_NEX_TOKEN_NUMBER; ExAttr->TokenNumber = i + PEI_LOCAL_TOKEN_NUMBER;
ExAttr->LocalTokenNumberAlias = ExMap[i].LocalTokenNumber; ExAttr->LocalTokenNumberAlias = ExMap[i].LocalTokenNumber;
return; return;

View File

@ -46,16 +46,16 @@ typedef struct {
EFI_STATUS EFI_STATUS
SetWorker ( SetWorker (
UINTN TokenNumber, IN PCD_TOKEN_NUMBER TokenNumber,
VOID *Data, IN VOID *Data,
UINTN Size, IN UINTN Size,
BOOLEAN PtrType IN BOOLEAN PtrType
) )
; ;
EFI_STATUS EFI_STATUS
ExSetWorker ( ExSetWorker (
IN UINT32 ExTokenNumber, IN PCD_TOKEN_NUMBER ExTokenNumber,
IN CONST EFI_GUID *Guid, IN CONST EFI_GUID *Guid,
VOID *Data, VOID *Data,
UINTN Size, UINTN Size,
@ -66,14 +66,14 @@ ExSetWorker (
VOID * VOID *
GetWorker ( GetWorker (
UINTN TokenNumber PCD_TOKEN_NUMBER TokenNumber
) )
; ;
VOID * VOID *
ExGetWorker ( ExGetWorker (
IN CONST EFI_GUID *Guid, IN CONST EFI_GUID *Guid,
IN UINTN ExTokenNumber, IN PCD_TOKEN_NUMBER ExTokenNumber,
IN UINTN GetSize IN UINTN GetSize
) )
; ;
@ -90,21 +90,21 @@ EFI_STATUS
GetHiiVariable ( GetHiiVariable (
IN EFI_GUID *VariableGuid, IN EFI_GUID *VariableGuid,
IN UINT16 *VariableName, IN UINT16 *VariableName,
OUT VOID ** VariableData, OUT VOID **VariableData,
OUT UINTN *VariableSize OUT UINTN *VariableSize
) )
; ;
EFI_STATUS EFI_STATUS
DxeRegisterCallBackWorker ( DxeRegisterCallBackWorker (
IN UINTN TokenNumber, IN PCD_TOKEN_NUMBER TokenNumber,
IN CONST EFI_GUID *Guid, OPTIONAL IN CONST EFI_GUID *Guid, OPTIONAL
IN PCD_PROTOCOL_CALLBACK CallBackFunction IN PCD_PROTOCOL_CALLBACK CallBackFunction
); );
EFI_STATUS EFI_STATUS
DxeUnRegisterCallBackWorker ( DxeUnRegisterCallBackWorker (
IN UINTN TokenNumber, IN PCD_TOKEN_NUMBER TokenNumber,
IN CONST EFI_GUID *Guid, OPTIONAL IN CONST EFI_GUID *Guid, OPTIONAL
IN PCD_PROTOCOL_CALLBACK CallBackFunction IN PCD_PROTOCOL_CALLBACK CallBackFunction
); );
@ -125,7 +125,7 @@ typedef struct {
VOID VOID
GetExPcdTokenAttributes ( GetExPcdTokenAttributes (
IN CONST EFI_GUID *Guid, IN CONST EFI_GUID *Guid,
IN UINT32 ExTokenNumber, IN PCD_TOKEN_NUMBER ExTokenNumber,
OUT EX_PCD_ENTRY_ATTRIBUTE *ExAttr OUT EX_PCD_ENTRY_ATTRIBUTE *ExAttr
) )
; ;

View File

@ -500,13 +500,13 @@ PeiPcdGetNextToken (
(*TokenNumber)++; (*TokenNumber)++;
if (*TokenNumber >= PEI_NEX_TOKEN_NUMBER) { if (*TokenNumber >= PEI_NEX_TOKEN_NUMBER) {
*TokenNumber = 0; *TokenNumber = PCD_INVALID_TOKEN_NUMBER;
} }
} else { } else {
if (PEI_EXMAP_TABLE_EMPTY) { if (PEI_EXMAP_TABLE_EMPTY) {
*TokenNumber = (UINTN) PCD_INVALID_TOKEN_NUMBER; *TokenNumber = PCD_INVALID_TOKEN_NUMBER;
return EFI_NOT_FOUND; return EFI_NOT_FOUND;
} }

View File

@ -62,10 +62,12 @@ PeiRegisterCallBackWorker (
ASSERT (GuidHob != NULL); ASSERT (GuidHob != NULL);
CallbackTable = GET_GUID_HOB_DATA (GuidHob); CallbackTable = GET_GUID_HOB_DATA (GuidHob);
CallbackTable = CallbackTable + (TokenNumber * FixedPcdGet32(PcdMaxPeiPcdCallBackNumberPerPcdEntry));
Compare = Register? NULL: CallBackFunction; Compare = Register? NULL: CallBackFunction;
Assign = Register? CallBackFunction: NULL; Assign = Register? CallBackFunction: NULL;
for (Idx = 0; Idx < FixedPcdGet32(PcdMaxPeiPcdCallBackNumberPerPcdEntry); Idx++) { for (Idx = 0; Idx < FixedPcdGet32(PcdMaxPeiPcdCallBackNumberPerPcdEntry); Idx++) {
if (CallbackTable[Idx] == Compare) { if (CallbackTable[Idx] == Compare) {
CallbackTable[Idx] = Assign; CallbackTable[Idx] = Assign;

View File

@ -42,43 +42,43 @@ GetPcdDatabase (
EFI_STATUS EFI_STATUS
SetWorker ( SetWorker (
IN UINTN TokenNumber, IN PCD_TOKEN_NUMBER TokenNumber,
IN VOID *Data,
IN UINTN Size,
IN BOOLEAN PtrType
)
;
EFI_STATUS
SetWorkerByLocalTokenNumber (
IN UINT32 LocalTokenNumber,
IN VOID *Data, IN VOID *Data,
IN UINTN Size, IN UINTN Size,
IN BOOLEAN PtrType IN BOOLEAN PtrType
) )
; ;
EFI_STATUS
SetWorkerByLocalTokenNumber (
UINT32 LocalTokenNumber,
VOID *Data,
UINTN Size,
BOOLEAN PtrType
)
;
EFI_STATUS EFI_STATUS
ExSetWorker ( ExSetWorker (
IN UINT32 ExTokenNumber, IN PCD_TOKEN_NUMBER ExTokenNumber,
IN CONST EFI_GUID *Guid, IN CONST EFI_GUID *Guid,
VOID *Data, IN VOID *Data,
UINTN Size, IN UINTN Size,
BOOLEAN PtrType IN BOOLEAN PtrType
) )
; ;
VOID * VOID *
GetWorker ( GetWorker (
UINTN TokenNumber, IN PCD_TOKEN_NUMBER TokenNumber,
UINTN GetSize IN UINTN GetSize
) )
; ;
VOID * VOID *
ExGetWorker ( ExGetWorker (
IN CONST EFI_GUID *Guid, IN CONST EFI_GUID *Guid,
IN UINT32 ExTokenNumber, IN PCD_TOKEN_NUMBER ExTokenNumber,
IN UINTN GetSize IN UINTN GetSize
) )
; ;
@ -92,19 +92,25 @@ typedef struct {
VOID VOID
GetExPcdTokenAttributes ( GetExPcdTokenAttributes (
IN CONST EFI_GUID *Guid, IN CONST EFI_GUID *Guid,
IN UINT32 ExTokenNumber, IN PCD_TOKEN_NUMBER ExTokenNumber,
OUT EX_PCD_ENTRY_ATTRIBUTE *ExAttr OUT EX_PCD_ENTRY_ATTRIBUTE *ExAttr
) )
; ;
EFI_STATUS EFI_STATUS
PeiRegisterCallBackWorker ( PeiRegisterCallBackWorker (
IN UINTN TokenNumber, IN PCD_TOKEN_NUMBER TokenNumber,
IN CONST GUID *Guid, OPTIONAL IN CONST GUID *Guid, OPTIONAL
IN PCD_PPI_CALLBACK CallBackFunction, IN PCD_PPI_CALLBACK CallBackFunction,
IN BOOLEAN Register IN BOOLEAN Register
); );
VOID VOID
BuildPcdDatabase ( BuildPcdDatabase (
VOID VOID

View File

@ -23,9 +23,10 @@ CONST GUID Guid1 = GUID1;
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
OnsetCallback1 ( OnsetCallback1 (
IN UINT32 CallBackToken, IN CONST EFI_GUID *Guid,
IN VOID *TokenData, IN UINT32 CallBackToken,
IN UINTN TokenDataSize IN VOID *TokenData,
IN UINTN TokenDataSize
) )
{ {
DebugPrint (0x80000000, "In CallbackOnSet %x %d\n", * ((UINT32 *)TokenData), TokenDataSize); DebugPrint (0x80000000, "In CallbackOnSet %x %d\n", * ((UINT32 *)TokenData), TokenDataSize);
@ -42,6 +43,10 @@ DoTest(
UINT16 u16; UINT16 u16;
UINT32 u32; UINT32 u32;
UINT64 u64; UINT64 u64;
PCD_TOKEN_NUMBER Token;
LibPcdCallbackOnSet (NULL, PcdToken(PcdTestDynamicUint32), OnsetCallback1);
u32 = 0xafafafaf; u32 = 0xafafafaf;
PcdSet32(PcdTestDynamicUint32, u32); PcdSet32(PcdTestDynamicUint32, u32);
@ -57,6 +62,15 @@ DoTest(
ASSERT (u16 == 0x1234); ASSERT (u16 == 0x1234);
ASSERT (u64 == PcdGet64(PcdTestDynamicUint64)); ASSERT (u64 == PcdGet64(PcdTestDynamicUint64));
ASSERT (u32 == PcdGet32(PcdTestDynamicUint32)); ASSERT (u32 == PcdGet32(PcdTestDynamicUint32));
Token = PCD_INVALID_TOKEN_NUMBER;
do {
Token = LibPcdGetNextToken (NULL, Token);
DebugPrint (EFI_D_ERROR, "Next Token Number is %d\n", Token);
} while (Token != PCD_INVALID_TOKEN_NUMBER);
return; return;
} }