MCPcopy Create free account
hub / github.com/CloverHackyColor/CloverBootloader / DxePcdGetSize

Function DxePcdGetSize

MdeModulePkg/Universal/PCD/Dxe/Pcd.c:463–513  ·  view source on GitHub ↗

Retrieves the size of the value for a given PCD token. Retrieves the current size of a particular PCD token. If the TokenNumber is invalid, the results are unpredictable. @param[in] TokenNumber The PCD token number. @return The size of the value for the PCD token. **/

Source from the content-addressed store, hash-verified

461
462**/
463UINTN
464EFIAPI
465DxePcdGetSize (
466 IN UINTN TokenNumber
467 )
468{
469 UINTN Size;
470 UINT32 *LocalTokenNumberTable;
471 BOOLEAN IsPeiDb;
472 UINTN MaxSize;
473 UINTN TmpTokenNumber;
474 //
475 // TokenNumber Zero is reserved as PCD_INVALID_TOKEN_NUMBER.
476 // We have to decrement TokenNumber by 1 to make it usable
477 // as the array index.
478 //
479 TokenNumber--;
480
481 //
482 // Backup the TokenNumber passed in as GetPtrTypeSize need the original TokenNumber
483 //
484 TmpTokenNumber = TokenNumber;
485
486 // EBC compiler is very choosy. It may report warning about comparison
487 // between UINTN and 0 . So we add 1 in each size of the
488 // comparison.
489 ASSERT (TokenNumber + 1 < mPcdTotalTokenCount + 1);
490
491 // EBC compiler is very choosy. It may report warning about comparison
492 // between UINTN and 0 . So we add 1 in each size of the
493 // comparison.
494 IsPeiDb = (BOOLEAN) (TokenNumber + 1 < mPeiLocalTokenCount + 1);
495
496 TokenNumber = IsPeiDb ? TokenNumber :
497 (TokenNumber - mPeiLocalTokenCount);
498
499 LocalTokenNumberTable = IsPeiDb ? (UINT32 *)((UINT8 *)mPcdDatabase.PeiDb + mPcdDatabase.PeiDb->LocalTokenNumberTableOffset)
500 : (UINT32 *)((UINT8 *)mPcdDatabase.DxeDb + mPcdDatabase.DxeDb->LocalTokenNumberTableOffset);
501
502 Size = (LocalTokenNumberTable[TokenNumber] & PCD_DATUM_TYPE_ALL_SET) >> PCD_DATUM_TYPE_SHIFT;
503
504 if (Size == 0) {
505 //
506 // For pointer type, we need to scan the SIZE_TABLE to get the current size.
507 //
508 return GetPtrTypeSize (TmpTokenNumber, &MaxSize);
509 } else {
510 return Size;
511 }
512
513}
514
515/**
516 Retrieves an 8-bit value for a given PCD token.

Callers 6

ExGetPcdInfoFunction · 0.85
DxeGetPcdInfoFunction · 0.85
GetWorkerFunction · 0.85
SetWorkerFunction · 0.85
DxePcdGetSizeExFunction · 0.85

Calls 1

GetPtrTypeSizeFunction · 0.70

Tested by

no test coverage detected