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. **/
| 461 | |
| 462 | **/ |
| 463 | UINTN |
| 464 | EFIAPI |
| 465 | DxePcdGetSize ( |
| 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. |
no test coverage detected