-/** @file\r
-PCD DXE driver\r
-\r
-Copyright (c) 2006 - 2007, Intel Corporation\r
-All rights reserved. This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-\r
-Module Name: Pcd.c\r
-\r
-**/\r
-\r
-#include "Service.h"\r
-\r
-EFI_LOCK mPcdDatabaseLock = EFI_INITIALIZE_LOCK_VARIABLE(TPL_CALLBACK);\r
-\r
-PCD_PROTOCOL mPcdInstance = {\r
- DxePcdSetSku,\r
-\r
- DxePcdGet8,\r
- DxePcdGet16,\r
- DxePcdGet32,\r
- DxePcdGet64,\r
- DxePcdGetPtr,\r
- DxePcdGetBool,\r
- DxePcdGetSize,\r
-\r
- DxePcdGet8Ex,\r
- DxePcdGet16Ex,\r
- DxePcdGet32Ex,\r
- DxePcdGet64Ex,\r
- DxePcdGetPtrEx,\r
- DxePcdGetBoolEx,\r
- DxePcdGetSizeEx,\r
-\r
- DxePcdSet8,\r
- DxePcdSet16,\r
- DxePcdSet32,\r
- DxePcdSet64,\r
- DxePcdSetPtr,\r
- DxePcdSetBool,\r
-\r
- DxePcdSet8Ex,\r
- DxePcdSet16Ex,\r
- DxePcdSet32Ex,\r
- DxePcdSet64Ex,\r
- DxePcdSetPtrEx,\r
- DxePcdSetBoolEx,\r
-\r
- DxeRegisterCallBackOnSet,\r
- DxeUnRegisterCallBackOnSet,\r
- DxePcdGetNextToken,\r
- DxePcdGetNextTokenSpace\r
-};\r
-\r
-\r
-//\r
-// Static global to reduce the code size\r
-//\r
-static EFI_HANDLE mNewHandle = NULL;\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-PcdDxeInit (\r
- IN EFI_HANDLE ImageHandle,\r
- IN EFI_SYSTEM_TABLE *SystemTable\r
- )\r
-{\r
- EFI_STATUS Status;\r
-\r
- //\r
- // Make sure the Pcd Protocol is not already installed in the system\r
- //\r
-\r
- ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gPcdProtocolGuid);\r
-\r
- BuildPcdDxeDataBase ();\r
-\r
- Status = gBS->InstallProtocolInterface (\r
- &mNewHandle,\r
- &gPcdProtocolGuid,\r
- EFI_NATIVE_INTERFACE,\r
- &mPcdInstance\r
- );\r
-\r
- ASSERT_EFI_ERROR (Status);\r
-\r
- return EFI_SUCCESS;\r
-\r
-}\r
-\r
-\r
-VOID\r
-EFIAPI\r
-DxePcdSetSku (\r
- IN UINTN SkuId\r
- )\r
-{\r
- mPcdDatabase->PeiDb.Init.SystemSkuId = (SKU_ID) SkuId;\r
- \r
- return;\r
-}\r
-\r
-\r
-\r
-UINT8\r
-EFIAPI\r
-DxePcdGet8 (\r
- IN UINTN TokenNumber\r
- )\r
-{\r
- return *((UINT8 *) GetWorker (TokenNumber, sizeof (UINT8)));\r
-}\r
-\r
-\r
-\r
-UINT16\r
-EFIAPI\r
-DxePcdGet16 (\r
- IN UINTN TokenNumber\r
- )\r
-{\r
- return ReadUnaligned16 (GetWorker (TokenNumber, sizeof (UINT16)));\r
-}\r
-\r
-\r
-\r
-UINT32\r
-EFIAPI\r
-DxePcdGet32 (\r
- IN UINTN TokenNumber\r
- )\r
-{\r
- return ReadUnaligned32 (GetWorker (TokenNumber, sizeof (UINT32)));\r
-}\r
-\r
-\r
-\r
-UINT64\r
-EFIAPI\r
-DxePcdGet64 (\r
- IN UINTN TokenNumber\r
- )\r
-{\r
- return ReadUnaligned64(GetWorker (TokenNumber, sizeof (UINT64)));\r
-}\r
-\r
-\r
-\r
-VOID *\r
-EFIAPI\r
-DxePcdGetPtr (\r
- IN UINTN TokenNumber\r
- )\r
-{\r
- return GetWorker (TokenNumber, 0);\r
-}\r
-\r
-\r
-\r
-BOOLEAN\r
-EFIAPI\r
-DxePcdGetBool (\r
- IN UINTN TokenNumber\r
- )\r
-{\r
- return *((BOOLEAN *) GetWorker (TokenNumber, sizeof (BOOLEAN)));\r
-}\r
-\r
-\r
-\r
-UINTN\r
-EFIAPI\r
-DxePcdGetSize (\r
- IN UINTN TokenNumber\r
- )\r
-{\r
- UINTN Size;\r
- UINT32 *LocalTokenNumberTable;\r
- BOOLEAN IsPeiDb;\r
- UINTN MaxSize;\r
- UINTN TmpTokenNumber;\r
- //\r
- // TokenNumber Zero is reserved as PCD_INVALID_TOKEN_NUMBER.\r
- // We have to decrement TokenNumber by 1 to make it usable\r
- // as the array index.\r
- //\r
- TokenNumber--;\r
-\r
- //\r
- // Backup the TokenNumber passed in as GetPtrTypeSize need the original TokenNumber\r
- // \r
- TmpTokenNumber = TokenNumber;\r
-\r
- // EBC compiler is very choosy. It may report warning about comparison\r
- // between UINTN and 0 . So we add 1 in each size of the \r
- // comparison.\r
- ASSERT (TokenNumber + 1 < PCD_TOTAL_TOKEN_NUMBER + 1);\r
-\r
- // EBC compiler is very choosy. It may report warning about comparison\r
- // between UINTN and 0 . So we add 1 in each size of the \r
- // comparison.\r
- IsPeiDb = (BOOLEAN) (TokenNumber + 1 < PEI_LOCAL_TOKEN_NUMBER + 1);\r
- \r
- TokenNumber = IsPeiDb ? TokenNumber : \r
- (TokenNumber - PEI_LOCAL_TOKEN_NUMBER);\r
-\r
- LocalTokenNumberTable = IsPeiDb ? mPcdDatabase->PeiDb.Init.LocalTokenNumberTable \r
- : mPcdDatabase->DxeDb.Init.LocalTokenNumberTable;\r
-\r
- Size = (LocalTokenNumberTable[TokenNumber] & PCD_DATUM_TYPE_ALL_SET) >> PCD_DATUM_TYPE_SHIFT;\r
-\r
- if (Size == 0) {\r
- //\r
- // For pointer type, we need to scan the SIZE_TABLE to get the current size.\r
- //\r
- return GetPtrTypeSize (TmpTokenNumber, &MaxSize);\r
- } else {\r
- return Size;\r
- }\r
-\r
-}\r
-\r
-\r
-\r
-UINT8\r
-EFIAPI\r
-DxePcdGet8Ex (\r
- IN CONST EFI_GUID *Guid,\r
- IN UINTN ExTokenNumber\r
- )\r
-{\r
- return *((UINT8 *) ExGetWorker (Guid, ExTokenNumber, sizeof(UINT8)));\r
-}\r
-\r
-\r
-\r
-UINT16\r
-EFIAPI\r
-DxePcdGet16Ex (\r
- IN CONST EFI_GUID *Guid,\r
- IN UINTN ExTokenNumber\r
- )\r
-{\r
- return ReadUnaligned16 (ExGetWorker (Guid, ExTokenNumber, sizeof(UINT16)));\r
-}\r
-\r
-\r
-\r
-UINT32\r
-EFIAPI\r
-DxePcdGet32Ex (\r
- IN CONST EFI_GUID *Guid,\r
- IN UINTN ExTokenNumber\r
- )\r
-{\r
- return ReadUnaligned32 (ExGetWorker (Guid, ExTokenNumber, sizeof(UINT32)));\r
-}\r
-\r
-\r
-\r
-UINT64\r
-EFIAPI\r
-DxePcdGet64Ex (\r
- IN CONST EFI_GUID *Guid,\r
- IN UINTN ExTokenNumber\r
- )\r
-{\r
- return ReadUnaligned64 (ExGetWorker (Guid, ExTokenNumber, sizeof(UINT64)));\r
-}\r
-\r
-\r
-\r
-VOID *\r
-EFIAPI\r
-DxePcdGetPtrEx (\r
- IN CONST EFI_GUID *Guid,\r
- IN UINTN ExTokenNumber\r
- )\r
-{\r
- return ExGetWorker (Guid, ExTokenNumber, 0);\r
-}\r
-\r
-\r
-\r
-BOOLEAN\r
-EFIAPI\r
-DxePcdGetBoolEx (\r
- IN CONST EFI_GUID *Guid,\r
- IN UINTN ExTokenNumber\r
- )\r
-{\r
- return *((BOOLEAN *) ExGetWorker (Guid, ExTokenNumber, sizeof(BOOLEAN)));\r
-}\r
-\r
-\r
-\r
-UINTN\r
-EFIAPI\r
-DxePcdGetSizeEx (\r
- IN CONST EFI_GUID *Guid,\r
- IN UINTN ExTokenNumber\r
- )\r
-{\r
- return DxePcdGetSize(GetExPcdTokenNumber (Guid, (UINT32) ExTokenNumber));\r
-}\r
-\r
-\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-DxePcdSet8 (\r
- IN UINTN TokenNumber,\r
- IN UINT8 Value\r
- )\r
-{\r
- return SetValueWorker (TokenNumber, &Value, sizeof (Value));\r
-}\r
-\r
-\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-DxePcdSet16 (\r
- IN UINTN TokenNumber,\r
- IN UINT16 Value\r
- )\r
-{\r
- return SetValueWorker (TokenNumber, &Value, sizeof (Value));\r
-}\r
-\r
-\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-DxePcdSet32 (\r
- IN UINTN TokenNumber,\r
- IN UINT32 Value\r
- )\r
-{\r
- return SetValueWorker (TokenNumber, &Value, sizeof (Value));\r
-}\r
-\r
-\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-DxePcdSet64 (\r
- IN UINTN TokenNumber,\r
- IN UINT64 Value\r
- )\r
-{\r
- return SetValueWorker (TokenNumber, &Value, sizeof (Value));\r
-}\r
-\r
-\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-DxePcdSetPtr (\r
- IN UINTN TokenNumber,\r
- IN OUT UINTN *SizeOfBuffer,\r
- IN VOID *Buffer\r
- )\r
-{\r
- return SetWorker (TokenNumber, Buffer, SizeOfBuffer, TRUE);\r
-}\r
-\r
-\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-DxePcdSetBool (\r
- IN UINTN TokenNumber,\r
- IN BOOLEAN Value\r
- )\r
-{\r
- return SetValueWorker (TokenNumber, &Value, sizeof (Value));\r
-}\r
-\r
-\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-DxePcdSet8Ex (\r
- IN CONST EFI_GUID *Guid,\r
- IN UINTN ExTokenNumber,\r
- IN UINT8 Value\r
- )\r
-{\r
- return ExSetValueWorker (ExTokenNumber, Guid, &Value, sizeof (Value));\r
-}\r
-\r
-\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-DxePcdSet16Ex (\r
- IN CONST EFI_GUID *Guid,\r
- IN UINTN ExTokenNumber,\r
- IN UINT16 Value\r
- )\r
-{\r
- return ExSetValueWorker (ExTokenNumber, Guid, &Value, sizeof (Value));\r
-}\r
-\r
-\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-DxePcdSet32Ex (\r
- IN CONST EFI_GUID *Guid,\r
- IN UINTN ExTokenNumber,\r
- IN UINT32 Value\r
- )\r
-{\r
- return ExSetValueWorker (ExTokenNumber, Guid, &Value, sizeof (Value));\r
-}\r
-\r
-\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-DxePcdSet64Ex (\r
- IN CONST EFI_GUID *Guid,\r
- IN UINTN ExTokenNumber,\r
- IN UINT64 Value\r
- )\r
-{\r
- return ExSetValueWorker (ExTokenNumber, Guid, &Value, sizeof (Value));\r
-}\r
-\r
-\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-DxePcdSetPtrEx (\r
- IN CONST EFI_GUID *Guid,\r
- IN UINTN ExTokenNumber,\r
- IN OUT UINTN *SizeOfBuffer,\r
- IN VOID *Buffer\r
- )\r
-{\r
- return ExSetWorker(ExTokenNumber, Guid, Buffer, SizeOfBuffer, TRUE);\r
-}\r
-\r
-\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-DxePcdSetBoolEx (\r
- IN CONST EFI_GUID *Guid,\r
- IN UINTN ExTokenNumber,\r
- IN BOOLEAN Value\r
- )\r
-{\r
- return ExSetValueWorker (ExTokenNumber, Guid, &Value, sizeof (Value));\r
-}\r
-\r
-\r
-\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-DxeRegisterCallBackOnSet (\r
- IN CONST EFI_GUID *Guid, OPTIONAL\r
- IN UINTN TokenNumber,\r
- IN PCD_PROTOCOL_CALLBACK CallBackFunction\r
- )\r
-{\r
- EFI_STATUS Status;\r
- \r
- ASSERT (CallBackFunction != NULL);\r
- \r
- //\r
- // Aquire lock to prevent reentrance from TPL_CALLBACK level\r
- //\r
- EfiAcquireLock (&mPcdDatabaseLock);\r
-\r
- Status = DxeRegisterCallBackWorker (TokenNumber, Guid, CallBackFunction);\r
-\r
- EfiReleaseLock (&mPcdDatabaseLock);\r
- \r
- return Status;\r
-}\r
-\r
-\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-DxeUnRegisterCallBackOnSet (\r
- IN CONST EFI_GUID *Guid, OPTIONAL\r
- IN UINTN TokenNumber,\r
- IN PCD_PROTOCOL_CALLBACK CallBackFunction\r
- )\r
-{\r
- EFI_STATUS Status;\r
- \r
- ASSERT (CallBackFunction != NULL);\r
-\r
- //\r
- // Aquire lock to prevent reentrance from TPL_CALLBACK level\r
- //\r
- EfiAcquireLock (&mPcdDatabaseLock);\r
- \r
- Status = DxeUnRegisterCallBackWorker (TokenNumber, Guid, CallBackFunction);\r
-\r
- EfiReleaseLock (&mPcdDatabaseLock);\r
- \r
- return Status;\r
-}\r
-\r
-\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-DxePcdGetNextToken (\r
- IN CONST EFI_GUID *Guid, OPTIONAL\r
- IN OUT UINTN *TokenNumber\r
- )\r
-{\r
- EFI_STATUS Status;\r
- BOOLEAN PeiExMapTableEmpty;\r
- BOOLEAN DxeExMapTableEmpty;\r
-\r
- if (!FeaturePcdGet (PcdDxePcdDatabaseTraverseEnabled)) {\r
- return EFI_UNSUPPORTED;\r
- }\r
-\r
- Status = EFI_NOT_FOUND;\r
- PeiExMapTableEmpty = PEI_EXMAP_TABLE_EMPTY;\r
- DxeExMapTableEmpty = DXE_EXMAP_TABLE_EMPTY;\r
-\r
- //\r
- // Scan the local token space\r
- //\r
- if (Guid == NULL) {\r
- // EBC compiler is very choosy. It may report warning about comparison\r
- // between UINTN and 0 . So we add 1 in each size of the \r
- // comparison.\r
- if (((*TokenNumber + 1 > PEI_NEX_TOKEN_NUMBER + 1) && (*TokenNumber + 1 < PEI_LOCAL_TOKEN_NUMBER + 1)) ||\r
- ((*TokenNumber + 1 > (PEI_LOCAL_TOKEN_NUMBER + DXE_NEX_TOKEN_NUMBER + 1)))) {\r
- return EFI_NOT_FOUND;\r
- }\r
- \r
- (*TokenNumber)++;\r
- if ((*TokenNumber + 1 > PEI_NEX_TOKEN_NUMBER + 1) &&\r
- (*TokenNumber <= PEI_LOCAL_TOKEN_NUMBER)) {\r
- //\r
- // The first Non-Ex type Token Number for DXE PCD \r
- // database is PEI_LOCAL_TOKEN_NUMBER\r
- //\r
- *TokenNumber = PEI_LOCAL_TOKEN_NUMBER;\r
- } else if (*TokenNumber + 1 > DXE_NEX_TOKEN_NUMBER + PEI_LOCAL_TOKEN_NUMBER + 1) {\r
- *TokenNumber = PCD_INVALID_TOKEN_NUMBER;\r
- }\r
- return EFI_SUCCESS;\r
- }\r
-\r
- if (PeiExMapTableEmpty && DxeExMapTableEmpty) {\r
- *TokenNumber = PCD_INVALID_TOKEN_NUMBER;\r
- return EFI_NOT_FOUND;\r
- }\r
-\r
- if (!PeiExMapTableEmpty) {\r
- Status = ExGetNextTokeNumber (\r
- Guid,\r
- TokenNumber,\r
- mPcdDatabase->PeiDb.Init.GuidTable,\r
- sizeof(mPcdDatabase->PeiDb.Init.GuidTable),\r
- mPcdDatabase->PeiDb.Init.ExMapTable,\r
- sizeof(mPcdDatabase->PeiDb.Init.ExMapTable)\r
- );\r
- }\r
-\r
- if (Status == EFI_SUCCESS) {\r
- return Status;\r
- }\r
-\r
- if (!DxeExMapTableEmpty) {\r
- Status = ExGetNextTokeNumber (\r
- Guid,\r
- TokenNumber,\r
- mPcdDatabase->DxeDb.Init.GuidTable,\r
- sizeof(mPcdDatabase->DxeDb.Init.GuidTable),\r
- mPcdDatabase->DxeDb.Init.ExMapTable,\r
- sizeof(mPcdDatabase->DxeDb.Init.ExMapTable)\r
- );\r
- }\r
-\r
- return Status;\r
-}\r
-\r
-STATIC\r
-EFI_GUID **\r
-GetDistinctTokenSpace (\r
- IN OUT UINTN *ExMapTableSize,\r
- IN DYNAMICEX_MAPPING *ExMapTable,\r
- IN EFI_GUID *GuidTable\r
- )\r
-{\r
- EFI_GUID **DistinctTokenSpace;\r
- UINTN OldGuidIndex;\r
- UINTN TsIdx;\r
- UINTN Idx;\r
-\r
-\r
- DistinctTokenSpace = AllocateZeroPool (*ExMapTableSize * sizeof (EFI_GUID *));\r
- ASSERT (DistinctTokenSpace != NULL);\r
-\r
- TsIdx = 0;\r
- OldGuidIndex = ExMapTable[0].ExGuidIndex;\r
- DistinctTokenSpace[TsIdx] = &GuidTable[OldGuidIndex];\r
- for (Idx = 1; Idx < *ExMapTableSize; Idx++) {\r
- if (ExMapTable[Idx].ExGuidIndex != OldGuidIndex) {\r
- OldGuidIndex = ExMapTable[Idx].ExGuidIndex;\r
- DistinctTokenSpace[++TsIdx] = &GuidTable[OldGuidIndex];\r
- }\r
- }\r
-\r
- //\r
- // The total number of Distinct Token Space\r
- // is TsIdx + 1 because we use TsIdx as a index\r
- // to the DistinctTokenSpace[]\r
- //\r
- *ExMapTableSize = TsIdx + 1;\r
- return DistinctTokenSpace;\r
- \r
-}\r
- \r
-//\r
-// Just pre-allocate a memory buffer that is big enough to\r
-// host all distinct TokenSpace guid in both\r
-// PEI ExMap and DXE ExMap.\r
-//\r
-STATIC EFI_GUID *TmpTokenSpaceBuffer[PEI_EXMAPPING_TABLE_SIZE + DXE_EXMAPPING_TABLE_SIZE] = { 0 };\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-DxePcdGetNextTokenSpace (\r
- IN OUT CONST EFI_GUID **Guid\r
- )\r
-{\r
- UINTN Idx;\r
- UINTN Idx2;\r
- UINTN Idx3;\r
- UINTN PeiTokenSpaceTableSize;\r
- UINTN DxeTokenSpaceTableSize;\r
- EFI_GUID **PeiTokenSpaceTable;\r
- EFI_GUID **DxeTokenSpaceTable;\r
- BOOLEAN Match;\r
- BOOLEAN PeiExMapTableEmpty;\r
- BOOLEAN DxeExMapTableEmpty;\r
-\r
- if (!FeaturePcdGet (PcdDxePcdDatabaseTraverseEnabled)) {\r
- return EFI_UNSUPPORTED;\r
- }\r
-\r
- ASSERT (Guid != NULL);\r
- \r
- PeiExMapTableEmpty = PEI_EXMAP_TABLE_EMPTY;\r
- DxeExMapTableEmpty = DXE_EXMAP_TABLE_EMPTY;\r
-\r
- if (PeiExMapTableEmpty && DxeExMapTableEmpty) {\r
- if (*Guid != NULL) {\r
- return EFI_NOT_FOUND;\r
- } else {\r
- return EFI_SUCCESS;\r
- }\r
- }\r
- \r
- \r
- if (TmpTokenSpaceBuffer[0] == NULL) {\r
- PeiTokenSpaceTableSize = 0;\r
-\r
- if (!PeiExMapTableEmpty) {\r
- PeiTokenSpaceTableSize = PEI_EXMAPPING_TABLE_SIZE;\r
- PeiTokenSpaceTable = GetDistinctTokenSpace (&PeiTokenSpaceTableSize,\r
- mPcdDatabase->PeiDb.Init.ExMapTable,\r
- mPcdDatabase->PeiDb.Init.GuidTable\r
- );\r
- CopyMem (TmpTokenSpaceBuffer, PeiTokenSpaceTable, sizeof (EFI_GUID*) * PeiTokenSpaceTableSize);\r
- }\r
-\r
- if (!DxeExMapTableEmpty) {\r
- DxeTokenSpaceTableSize = DXE_EXMAPPING_TABLE_SIZE;\r
- DxeTokenSpaceTable = GetDistinctTokenSpace (&DxeTokenSpaceTableSize,\r
- mPcdDatabase->DxeDb.Init.ExMapTable,\r
- mPcdDatabase->DxeDb.Init.GuidTable\r
- );\r
-\r
- //\r
- // Make sure EFI_GUID in DxeTokenSpaceTable does not exist in PeiTokenSpaceTable\r
- //\r
- for (Idx2 = 0, Idx3 = PeiTokenSpaceTableSize; Idx2 < DxeTokenSpaceTableSize; Idx2++) {\r
- Match = FALSE;\r
- for (Idx = 0; Idx < PeiTokenSpaceTableSize; Idx++) {\r
- if (CompareGuid (TmpTokenSpaceBuffer[Idx], DxeTokenSpaceTable[Idx2])) {\r
- Match = TRUE;\r
- break;\r
- }\r
- }\r
- if (!Match) {\r
- TmpTokenSpaceBuffer[Idx3++] = DxeTokenSpaceTable[Idx2];\r
- }\r
- }\r
- }\r
- }\r
-\r
- if (*Guid == NULL) {\r
- *Guid = TmpTokenSpaceBuffer[0];\r
- return EFI_SUCCESS;\r
- }\r
- \r
- for (Idx = 0; Idx < (PEI_EXMAPPING_TABLE_SIZE + DXE_EXMAPPING_TABLE_SIZE); Idx++) {\r
- if(CompareGuid (*Guid, TmpTokenSpaceBuffer[Idx])) {\r
- Idx++;\r
- *Guid = TmpTokenSpaceBuffer[Idx];\r
- return EFI_SUCCESS;\r
- }\r
- }\r
-\r
- return EFI_NOT_FOUND;\r
-\r
-}\r
-\r
-\r