1 /** @file 2 Implementation of PcdLib class library for PEI phase. 3 4 Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR> 5 This program and the accompanying materials 6 are licensed and made available under the terms and conditions of the BSD License 7 which accompanies this distribution. The full text of the license may be found at 8 http://opensource.org/licenses/bsd-license.php 9 10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 12 13 14 **/ 15 16 17 18 19 #include <PiPei.h> 20 21 #include <Ppi/Pcd.h> 22 #include <Ppi/PiPcd.h> 23 #include <Ppi/PcdInfo.h> 24 #include <Ppi/PiPcdInfo.h> 25 26 #include <Library/PeiServicesLib.h> 27 #include <Library/PcdLib.h> 28 #include <Library/DebugLib.h> 29 #include <Library/BaseMemoryLib.h> 30 31 /** 32 Retrieve the PCD_PPI pointer. 33 34 This function is to locate PCD_PPI PPI via PeiService. 35 If fail to locate PCD_PPI, then ASSERT_EFI_ERROR(). 36 37 @retval PCD_PPI * The pointer to the PCD_PPI. 38 39 **/ 40 PCD_PPI * 41 GetPcdPpiPointer ( 42 VOID 43 ) 44 { 45 EFI_STATUS Status; 46 PCD_PPI *PcdPpi; 47 48 Status = PeiServicesLocatePpi (&gPcdPpiGuid, 0, NULL, (VOID **)&PcdPpi); 49 ASSERT_EFI_ERROR (Status); 50 51 return PcdPpi; 52 } 53 54 /** 55 Retrieve the pointer of EFI_PEI_PCD_PPI defined in PI 1.2 Vol 3. 56 57 This function is to locate EFI_PEI_PCD_PPI PPI via PeiService. 58 If fail to locate EFI_PEI_PCD_PPI, then ASSERT_EFI_ERROR(). 59 60 @retval EFI_PEI_PCD_PPI * The pointer to the EFI_PEI_PCD_PPI. 61 62 **/ 63 EFI_PEI_PCD_PPI * 64 GetPiPcdPpiPointer ( 65 VOID 66 ) 67 { 68 EFI_STATUS Status; 69 EFI_PEI_PCD_PPI *PiPcdPpi; 70 71 Status = PeiServicesLocatePpi (&gEfiPeiPcdPpiGuid, 0, NULL, (VOID **)&PiPcdPpi); 72 ASSERT_EFI_ERROR (Status); 73 74 return PiPcdPpi; 75 } 76 77 /** 78 Retrieve the GET_PCD_INFO_PPI pointer. 79 80 This function is to locate GET_PCD_INFO_PPI PPI via PeiService. 81 If fail to locate GET_PCD_INFO_PPI, then ASSERT_EFI_ERROR(). 82 83 @retval GET_PCD_INFO_PPI * The pointer to the GET_PCD_INFO_PPI. 84 85 **/ 86 GET_PCD_INFO_PPI * 87 GetPcdInfoPpiPointer ( 88 VOID 89 ) 90 { 91 EFI_STATUS Status; 92 GET_PCD_INFO_PPI *PcdInfoPpi; 93 94 Status = PeiServicesLocatePpi (&gGetPcdInfoPpiGuid, 0, NULL, (VOID **)&PcdInfoPpi); 95 ASSERT_EFI_ERROR (Status); 96 97 return PcdInfoPpi; 98 } 99 100 /** 101 Retrieve the pointer of EFI_GET_PCD_INFO_PPI defined in PI 1.2.1 Vol 3. 102 103 This function is to locate EFI_GET_PCD_INFO_PPI PPI via PeiService. 104 If fail to locate EFI_GET_PCD_INFO_PPI, then ASSERT_EFI_ERROR(). 105 106 @retval EFI_GET_PCD_INFO_PPI * The pointer to the EFI_GET_PCD_INFO_PPI. 107 108 **/ 109 EFI_GET_PCD_INFO_PPI * 110 GetPiPcdInfoPpiPointer ( 111 VOID 112 ) 113 { 114 EFI_STATUS Status; 115 EFI_GET_PCD_INFO_PPI *PiPcdInfoPpi; 116 117 Status = PeiServicesLocatePpi (&gEfiGetPcdInfoPpiGuid, 0, NULL, (VOID **)&PiPcdInfoPpi); 118 ASSERT_EFI_ERROR (Status); 119 120 return PiPcdInfoPpi; 121 } 122 123 /** 124 This function provides a means by which SKU support can be established in the PCD infrastructure. 125 126 Sets the current SKU in the PCD database to the value specified by SkuId. SkuId is returned. 127 128 @param SkuId The SKU value that will be used when the PCD service retrieves 129 and sets values associated with a PCD token. 130 131 @return Return the SKU ID that just be set. 132 133 **/ 134 UINTN 135 EFIAPI 136 LibPcdSetSku ( 137 IN UINTN SkuId 138 ) 139 { 140 GetPiPcdPpiPointer()->SetSku (SkuId); 141 142 return SkuId; 143 } 144 145 146 147 /** 148 This function provides a means by which to retrieve a value for a given PCD token. 149 150 Returns the 8-bit value for the token specified by TokenNumber. 151 152 @param[in] TokenNumber The PCD token number to retrieve a current value for. 153 154 @return Returns the 8-bit value for the token specified by TokenNumber. 155 156 **/ 157 UINT8 158 EFIAPI 159 LibPcdGet8 ( 160 IN UINTN TokenNumber 161 ) 162 { 163 return (GetPcdPpiPointer ())->Get8 (TokenNumber); 164 } 165 166 167 168 /** 169 This function provides a means by which to retrieve a value for a given PCD token. 170 171 Returns the 16-bit value for the token specified by TokenNumber. 172 173 @param[in] TokenNumber The PCD token number to retrieve a current value for. 174 175 @return Returns the 16-bit value for the token specified by TokenNumber. 176 177 **/ 178 UINT16 179 EFIAPI 180 LibPcdGet16 ( 181 IN UINTN TokenNumber 182 ) 183 { 184 return (GetPcdPpiPointer ())->Get16 (TokenNumber); 185 } 186 187 188 189 /** 190 This function provides a means by which to retrieve a value for a given PCD token. 191 192 Returns the 32-bit value for the token specified by TokenNumber. 193 194 @param[in] TokenNumber The PCD token number to retrieve a current value for. 195 196 @return Returns the 32-bit value for the token specified by TokenNumber. 197 198 **/ 199 UINT32 200 EFIAPI 201 LibPcdGet32 ( 202 IN UINTN TokenNumber 203 ) 204 { 205 return (GetPcdPpiPointer ())->Get32 (TokenNumber); 206 } 207 208 209 210 /** 211 This function provides a means by which to retrieve a value for a given PCD token. 212 213 Returns the 64-bit value for the token specified by TokenNumber. 214 215 @param[in] TokenNumber The PCD token number to retrieve a current value for. 216 217 @return Returns the 64-bit value for the token specified by TokenNumber. 218 219 **/ 220 UINT64 221 EFIAPI 222 LibPcdGet64 ( 223 IN UINTN TokenNumber 224 ) 225 { 226 return (GetPcdPpiPointer ())->Get64 (TokenNumber); 227 } 228 229 230 231 /** 232 This function provides a means by which to retrieve a value for a given PCD token. 233 234 Returns the pointer to the buffer of the token specified by TokenNumber. 235 236 @param[in] TokenNumber The PCD token number to retrieve a current value for. 237 238 @return Returns the pointer to the token specified by TokenNumber. 239 240 **/ 241 VOID * 242 EFIAPI 243 LibPcdGetPtr ( 244 IN UINTN TokenNumber 245 ) 246 { 247 return (GetPcdPpiPointer ())->GetPtr (TokenNumber); 248 } 249 250 251 252 /** 253 This function provides a means by which to retrieve a value for a given PCD token. 254 255 Returns the Boolean value of the token specified by TokenNumber. 256 257 @param[in] TokenNumber The PCD token number to retrieve a current value for. 258 259 @return Returns the Boolean value of the token specified by TokenNumber. 260 261 **/ 262 BOOLEAN 263 EFIAPI 264 LibPcdGetBool ( 265 IN UINTN TokenNumber 266 ) 267 { 268 return (GetPcdPpiPointer ())->GetBool (TokenNumber); 269 } 270 271 272 273 /** 274 This function provides a means by which to retrieve the size of a given PCD token. 275 276 @param[in] TokenNumber The PCD token number to retrieve a current value for. 277 278 @return Returns the size of the token specified by TokenNumber. 279 280 **/ 281 UINTN 282 EFIAPI 283 LibPcdGetSize ( 284 IN UINTN TokenNumber 285 ) 286 { 287 return (GetPcdPpiPointer ())->GetSize (TokenNumber); 288 } 289 290 291 292 /** 293 This function provides a means by which to retrieve a value for a given PCD token. 294 295 Returns the 8-bit value for the token specified by TokenNumber and Guid. 296 297 If Guid is NULL, then ASSERT(). 298 299 @param[in] Guid The pointer to a 128-bit unique value that designates 300 which namespace to retrieve a value from. 301 @param[in] TokenNumber The PCD token number to retrieve a current value for. 302 303 @return Return the UINT8. 304 305 **/ 306 UINT8 307 EFIAPI 308 LibPcdGetEx8 ( 309 IN CONST GUID *Guid, 310 IN UINTN TokenNumber 311 ) 312 { 313 ASSERT (Guid != NULL); 314 315 return (GetPiPcdPpiPointer ())->Get8 (Guid, TokenNumber); 316 } 317 318 319 320 /** 321 This function provides a means by which to retrieve a value for a given PCD token. 322 323 Returns the 16-bit value for the token specified by TokenNumber and Guid. 324 325 If Guid is NULL, then ASSERT(). 326 327 @param[in] Guid The pointer to a 128-bit unique value that designates 328 which namespace to retrieve a value from. 329 @param[in] TokenNumber The PCD token number to retrieve a current value for. 330 331 @return Return the UINT16. 332 333 **/ 334 UINT16 335 EFIAPI 336 LibPcdGetEx16 ( 337 IN CONST GUID *Guid, 338 IN UINTN TokenNumber 339 ) 340 { 341 342 ASSERT (Guid != NULL); 343 344 return (GetPiPcdPpiPointer ())->Get16 (Guid, TokenNumber); 345 } 346 347 348 349 /** 350 Returns the 32-bit value for the token specified by TokenNumber and Guid. 351 If Guid is NULL, then ASSERT(). 352 353 @param[in] Guid The pointer to a 128-bit unique value that designates 354 which namespace to retrieve a value from. 355 @param[in] TokenNumber The PCD token number to retrieve a current value for. 356 357 @return Return the UINT32. 358 359 **/ 360 UINT32 361 EFIAPI 362 LibPcdGetEx32 ( 363 IN CONST GUID *Guid, 364 IN UINTN TokenNumber 365 ) 366 { 367 ASSERT (Guid != NULL); 368 369 return (GetPiPcdPpiPointer ())->Get32 (Guid, TokenNumber); 370 } 371 372 373 374 375 /** 376 This function provides a means by which to retrieve a value for a given PCD token. 377 378 Returns the 64-bit value for the token specified by TokenNumber and Guid. 379 380 If Guid is NULL, then ASSERT(). 381 382 @param[in] Guid The pointer to a 128-bit unique value that designates 383 which namespace to retrieve a value from. 384 @param[in] TokenNumber The PCD token number to retrieve a current value for. 385 386 @return Return the UINT64. 387 388 **/ 389 UINT64 390 EFIAPI 391 LibPcdGetEx64 ( 392 IN CONST GUID *Guid, 393 IN UINTN TokenNumber 394 ) 395 { 396 ASSERT (Guid != NULL); 397 return (GetPiPcdPpiPointer ())->Get64 (Guid, TokenNumber); 398 } 399 400 401 402 /** 403 This function provides a means by which to retrieve a value for a given PCD token. 404 405 Returns the pointer to the buffer of token specified by TokenNumber and Guid. 406 407 If Guid is NULL, then ASSERT(). 408 409 @param[in] Guid The pointer to a 128-bit unique value that designates 410 which namespace to retrieve a value from. 411 @param[in] TokenNumber The PCD token number to retrieve a current value for. 412 413 @return Return the VOID* pointer. 414 415 **/ 416 VOID * 417 EFIAPI 418 LibPcdGetExPtr ( 419 IN CONST GUID *Guid, 420 IN UINTN TokenNumber 421 ) 422 { 423 ASSERT (Guid != NULL); 424 425 return (GetPiPcdPpiPointer ())->GetPtr (Guid, TokenNumber); 426 } 427 428 429 430 /** 431 This function provides a means by which to retrieve a value for a given PCD token. 432 433 Returns the Boolean value of the token specified by TokenNumber and Guid. 434 435 If Guid is NULL, then ASSERT(). 436 437 @param[in] Guid The pointer to a 128-bit unique value that designates 438 which namespace to retrieve a value from. 439 @param[in] TokenNumber The PCD token number to retrieve a current value for. 440 441 @return Return the BOOLEAN. 442 443 **/ 444 BOOLEAN 445 EFIAPI 446 LibPcdGetExBool ( 447 IN CONST GUID *Guid, 448 IN UINTN TokenNumber 449 ) 450 { 451 ASSERT (Guid != NULL); 452 return (GetPiPcdPpiPointer ())->GetBool (Guid, TokenNumber); 453 } 454 455 456 457 /** 458 This function provides a means by which to retrieve the size of a given PCD token. 459 460 Returns the size of the token specified by TokenNumber and Guid. 461 462 If Guid is NULL, then ASSERT(). 463 464 @param[in] Guid The pointer to a 128-bit unique value that designates 465 which namespace to retrieve a value from. 466 @param[in] TokenNumber The PCD token number to retrieve a current value for. 467 468 @return Return the size. 469 470 **/ 471 UINTN 472 EFIAPI 473 LibPcdGetExSize ( 474 IN CONST GUID *Guid, 475 IN UINTN TokenNumber 476 ) 477 { 478 ASSERT (Guid != NULL); 479 return (GetPiPcdPpiPointer ())->GetSize (Guid, TokenNumber); 480 } 481 482 483 484 #ifndef DISABLE_NEW_DEPRECATED_INTERFACES 485 /** 486 This function provides a means by which to set a value for a given PCD token. 487 488 Sets the 8-bit value for the token specified by TokenNumber 489 to the value specified by Value. Value is returned. 490 491 @param[in] TokenNumber The PCD token number to set a current value for. 492 @param[in] Value The 8-bit value to set. 493 494 @return Return the value that was set. 495 496 **/ 497 UINT8 498 EFIAPI 499 LibPcdSet8 ( 500 IN UINTN TokenNumber, 501 IN UINT8 Value 502 ) 503 { 504 (GetPcdPpiPointer ())->Set8 (TokenNumber, Value); 505 506 return Value; 507 } 508 509 510 511 /** 512 This function provides a means by which to set a value for a given PCD token. 513 514 Sets the 16-bit value for the token specified by TokenNumber 515 to the value specified by Value. Value is returned. 516 517 @param[in] TokenNumber The PCD token number to set a current value for. 518 @param[in] Value The 16-bit value to set. 519 520 @return Return the value that was set. 521 522 **/ 523 UINT16 524 EFIAPI 525 LibPcdSet16 ( 526 IN UINTN TokenNumber, 527 IN UINT16 Value 528 ) 529 { 530 (GetPcdPpiPointer ())->Set16 (TokenNumber, Value); 531 532 return Value; 533 } 534 535 536 537 /** 538 This function provides a means by which to set a value for a given PCD token. 539 540 Sets the 32-bit value for the token specified by TokenNumber 541 to the value specified by Value. Value is returned. 542 543 @param[in] TokenNumber The PCD token number to set a current value for. 544 @param[in] Value The 32-bit value to set. 545 546 @return Return the value that was set. 547 548 **/ 549 UINT32 550 EFIAPI 551 LibPcdSet32 ( 552 IN UINTN TokenNumber, 553 IN UINT32 Value 554 ) 555 { 556 (GetPcdPpiPointer ())->Set32 (TokenNumber, Value); 557 558 return Value; 559 } 560 561 562 563 /** 564 This function provides a means by which to set a value for a given PCD token. 565 566 Sets the 64-bit value for the token specified by TokenNumber 567 to the value specified by Value. Value is returned. 568 569 @param[in] TokenNumber The PCD token number to set a current value for. 570 @param[in] Value The 64-bit value to set. 571 572 @return Return the value that was set. 573 574 **/ 575 UINT64 576 EFIAPI 577 LibPcdSet64 ( 578 IN UINTN TokenNumber, 579 IN UINT64 Value 580 ) 581 { 582 (GetPcdPpiPointer ())->Set64 (TokenNumber, Value); 583 584 return Value; 585 } 586 587 588 589 /** 590 This function provides a means by which to set a value for a given PCD token. 591 592 Sets a buffer for the token specified by TokenNumber to the value 593 specified by Buffer and SizeOfBuffer. Buffer is returned. 594 If SizeOfBuffer is greater than the maximum size support by TokenNumber, 595 then set SizeOfBuffer to the maximum size supported by TokenNumber and 596 return NULL to indicate that the set operation was not actually performed. 597 598 If SizeOfBuffer is set to MAX_ADDRESS, then SizeOfBuffer must be set to the 599 maximum size supported by TokenName and NULL must be returned. 600 601 If SizeOfBuffer is NULL, then ASSERT(). 602 If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT(). 603 604 @param[in] TokenNumber The PCD token number to set a current value for. 605 @param[in, out] SizeOfBuffer The size, in bytes, of Buffer. 606 @param[in] Buffer A pointer to the buffer to set. 607 608 @return Return the pointer for the buffer been set. 609 610 **/ 611 VOID * 612 EFIAPI 613 LibPcdSetPtr ( 614 IN UINTN TokenNumber, 615 IN OUT UINTN *SizeOfBuffer, 616 IN CONST VOID *Buffer 617 ) 618 { 619 EFI_STATUS Status; 620 UINTN InputSizeOfBuffer; 621 622 ASSERT (SizeOfBuffer != NULL); 623 624 if (*SizeOfBuffer > 0) { 625 ASSERT (Buffer != NULL); 626 } 627 628 InputSizeOfBuffer = *SizeOfBuffer; 629 Status = (GetPcdPpiPointer ())->SetPtr (TokenNumber, SizeOfBuffer, (VOID *) Buffer); 630 if (EFI_ERROR (Status) && (*SizeOfBuffer < InputSizeOfBuffer)) { 631 return NULL; 632 } 633 634 return (VOID *) Buffer; 635 } 636 637 638 639 /** 640 This function provides a means by which to set a value for a given PCD token. 641 642 Sets the Boolean value for the token specified by TokenNumber 643 to the value specified by Value. Value is returned. 644 645 @param[in] TokenNumber The PCD token number to set a current value for. 646 @param[in] Value The boolean value to set. 647 648 @return Return the value that was set. 649 650 **/ 651 BOOLEAN 652 EFIAPI 653 LibPcdSetBool ( 654 IN UINTN TokenNumber, 655 IN BOOLEAN Value 656 ) 657 { 658 (GetPcdPpiPointer ())->SetBool (TokenNumber, Value); 659 660 return Value; 661 } 662 663 664 665 /** 666 This function provides a means by which to set a value for a given PCD token. 667 668 Sets the 8-bit value for the token specified by TokenNumber and 669 Guid to the value specified by Value. Value is returned. 670 671 If Guid is NULL, then ASSERT(). 672 673 @param[in] Guid The pointer to a 128-bit unique value that 674 designates which namespace to set a value from. 675 @param[in] TokenNumber The PCD token number to set a current value for. 676 @param[in] Value The 8-bit value to set. 677 678 @return Return the value that was set. 679 680 **/ 681 UINT8 682 EFIAPI 683 LibPcdSetEx8 ( 684 IN CONST GUID *Guid, 685 IN UINTN TokenNumber, 686 IN UINT8 Value 687 ) 688 { 689 ASSERT (Guid != NULL); 690 691 (GetPiPcdPpiPointer ())->Set8 (Guid, TokenNumber, Value); 692 693 return Value; 694 } 695 696 697 698 /** 699 This function provides a means by which to set a value for a given PCD token. 700 701 Sets the 16-bit value for the token specified by TokenNumber and 702 Guid to the value specified by Value. Value is returned. 703 704 If Guid is NULL, then ASSERT(). 705 706 @param[in] Guid The pointer to a 128-bit unique value that 707 designates which namespace to set a value from. 708 @param[in] TokenNumber The PCD token number to set a current value for. 709 @param[in] Value The 16-bit value to set. 710 711 @return Return the value that was set. 712 713 **/ 714 UINT16 715 EFIAPI 716 LibPcdSetEx16 ( 717 IN CONST GUID *Guid, 718 IN UINTN TokenNumber, 719 IN UINT16 Value 720 ) 721 { 722 ASSERT (Guid != NULL); 723 724 (GetPiPcdPpiPointer ())->Set16 (Guid, TokenNumber, Value); 725 726 return Value; 727 } 728 729 730 731 /** 732 This function provides a means by which to set a value for a given PCD token. 733 734 Sets the 32-bit value for the token specified by TokenNumber and 735 Guid to the value specified by Value. Value is returned. 736 737 If Guid is NULL, then ASSERT(). 738 739 @param[in] Guid The pointer to a 128-bit unique value that 740 designates which namespace to set a value from. 741 @param[in] TokenNumber The PCD token number to set a current value for. 742 @param[in] Value The 32-bit value to set. 743 744 @return Return the value that was set. 745 746 **/ 747 UINT32 748 EFIAPI 749 LibPcdSetEx32 ( 750 IN CONST GUID *Guid, 751 IN UINTN TokenNumber, 752 IN UINT32 Value 753 ) 754 { 755 ASSERT (Guid != NULL); 756 757 (GetPiPcdPpiPointer ())->Set32 (Guid, TokenNumber, Value); 758 759 return Value; 760 } 761 762 763 764 /** 765 This function provides a means by which to set a value for a given PCD token. 766 767 Sets the 64-bit value for the token specified by TokenNumber and 768 Guid to the value specified by Value. Value is returned. 769 770 If Guid is NULL, then ASSERT(). 771 772 @param[in] Guid The pointer to a 128-bit unique value that 773 designates which namespace to set a value from. 774 @param[in] TokenNumber The PCD token number to set a current value for. 775 @param[in] Value The 64-bit value to set. 776 777 @return Return the value that was set. 778 779 **/ 780 UINT64 781 EFIAPI 782 LibPcdSetEx64 ( 783 IN CONST GUID *Guid, 784 IN UINTN TokenNumber, 785 IN UINT64 Value 786 ) 787 { 788 ASSERT (Guid != NULL); 789 790 (GetPiPcdPpiPointer ())->Set64 (Guid, TokenNumber, Value); 791 792 return Value; 793 } 794 795 796 797 /** 798 This function provides a means by which to set a value for a given PCD token. 799 800 Sets a buffer for the token specified by TokenNumber to the value specified by 801 Buffer and SizeOfBuffer. Buffer is returned. If SizeOfBuffer is greater than 802 the maximum size support by TokenNumber, then set SizeOfBuffer to the maximum size 803 supported by TokenNumber and return NULL to indicate that the set operation 804 was not actually performed. 805 806 If Guid is NULL, then ASSERT(). 807 If SizeOfBuffer is NULL, then ASSERT(). 808 If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT(). 809 810 @param[in] Guid The pointer to a 128-bit unique value that 811 designates which namespace to set a value from. 812 @param[in] TokenNumber The PCD token number to set a current value for. 813 @param[in, out] SizeOfBuffer The size, in bytes, of Buffer. 814 @param[in] Buffer A pointer to the buffer to set. 815 816 @return Return the pinter to the buffer been set. 817 818 **/ 819 VOID * 820 EFIAPI 821 LibPcdSetExPtr ( 822 IN CONST GUID *Guid, 823 IN UINTN TokenNumber, 824 IN OUT UINTN *SizeOfBuffer, 825 IN VOID *Buffer 826 ) 827 { 828 EFI_STATUS Status; 829 UINTN InputSizeOfBuffer; 830 831 ASSERT (SizeOfBuffer != NULL); 832 if (*SizeOfBuffer > 0) { 833 ASSERT (Buffer != NULL); 834 } 835 ASSERT (Guid != NULL); 836 837 InputSizeOfBuffer = *SizeOfBuffer; 838 Status = (GetPiPcdPpiPointer ())->SetPtr (Guid, TokenNumber, SizeOfBuffer, Buffer); 839 if (EFI_ERROR (Status) && (*SizeOfBuffer < InputSizeOfBuffer)) { 840 return NULL; 841 } 842 843 return Buffer; 844 } 845 846 847 848 /** 849 This function provides a means by which to set a value for a given PCD token. 850 851 Sets the Boolean value for the token specified by TokenNumber and 852 Guid to the value specified by Value. Value is returned. 853 854 If Guid is NULL, then ASSERT(). 855 856 @param[in] Guid The pointer to a 128-bit unique value that 857 designates which namespace to set a value from. 858 @param[in] TokenNumber The PCD token number to set a current value for. 859 @param[in] Value The Boolean value to set. 860 861 @return Return the value that was set. 862 863 **/ 864 BOOLEAN 865 EFIAPI 866 LibPcdSetExBool ( 867 IN CONST GUID *Guid, 868 IN UINTN TokenNumber, 869 IN BOOLEAN Value 870 ) 871 { 872 ASSERT (Guid != NULL); 873 874 (GetPiPcdPpiPointer ())->SetBool (Guid, TokenNumber, Value); 875 876 return Value; 877 } 878 #endif 879 880 /** 881 This function provides a means by which to set a value for a given PCD token. 882 883 Sets the 8-bit value for the token specified by TokenNumber 884 to the value specified by Value. 885 886 @param[in] TokenNumber The PCD token number to set a current value for. 887 @param[in] Value The 8-bit value to set. 888 889 @return The status of the set operation. 890 891 **/ 892 RETURN_STATUS 893 EFIAPI 894 LibPcdSet8S ( 895 IN UINTN TokenNumber, 896 IN UINT8 Value 897 ) 898 { 899 return (GetPcdPpiPointer ())->Set8 (TokenNumber, Value); 900 } 901 902 /** 903 This function provides a means by which to set a value for a given PCD token. 904 905 Sets the 16-bit value for the token specified by TokenNumber 906 to the value specified by Value. 907 908 @param[in] TokenNumber The PCD token number to set a current value for. 909 @param[in] Value The 16-bit value to set. 910 911 @return The status of the set operation. 912 913 **/ 914 RETURN_STATUS 915 EFIAPI 916 LibPcdSet16S ( 917 IN UINTN TokenNumber, 918 IN UINT16 Value 919 ) 920 { 921 return (GetPcdPpiPointer ())->Set16 (TokenNumber, Value); 922 } 923 924 /** 925 This function provides a means by which to set a value for a given PCD token. 926 927 Sets the 32-bit value for the token specified by TokenNumber 928 to the value specified by Value. 929 930 @param[in] TokenNumber The PCD token number to set a current value for. 931 @param[in] Value The 32-bit value to set. 932 933 @return The status of the set operation. 934 935 **/ 936 RETURN_STATUS 937 EFIAPI 938 LibPcdSet32S ( 939 IN UINTN TokenNumber, 940 IN UINT32 Value 941 ) 942 { 943 return (GetPcdPpiPointer ())->Set32 (TokenNumber, Value); 944 } 945 946 /** 947 This function provides a means by which to set a value for a given PCD token. 948 949 Sets the 64-bit value for the token specified by TokenNumber 950 to the value specified by Value. 951 952 @param[in] TokenNumber The PCD token number to set a current value for. 953 @param[in] Value The 64-bit value to set. 954 955 @return The status of the set operation. 956 957 **/ 958 RETURN_STATUS 959 EFIAPI 960 LibPcdSet64S ( 961 IN UINTN TokenNumber, 962 IN UINT64 Value 963 ) 964 { 965 return (GetPcdPpiPointer ())->Set64 (TokenNumber, Value); 966 } 967 968 /** 969 This function provides a means by which to set a value for a given PCD token. 970 971 Sets a buffer for the token specified by TokenNumber to the value specified 972 by Buffer and SizeOfBuffer. If SizeOfBuffer is greater than the maximum size 973 support by TokenNumber, then set SizeOfBuffer to the maximum size supported by 974 TokenNumber and return EFI_INVALID_PARAMETER to indicate that the set operation 975 was not actually performed. 976 977 If SizeOfBuffer is set to MAX_ADDRESS, then SizeOfBuffer must be set to the 978 maximum size supported by TokenName and EFI_INVALID_PARAMETER must be returned. 979 980 If SizeOfBuffer is NULL, then ASSERT(). 981 If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT(). 982 983 @param[in] TokenNumber The PCD token number to set a current value for. 984 @param[in, out] SizeOfBuffer The size, in bytes, of Buffer. 985 @param[in] Buffer A pointer to the buffer to set. 986 987 @return The status of the set operation. 988 989 **/ 990 RETURN_STATUS 991 EFIAPI 992 LibPcdSetPtrS ( 993 IN UINTN TokenNumber, 994 IN OUT UINTN *SizeOfBuffer, 995 IN CONST VOID *Buffer 996 ) 997 { 998 ASSERT (SizeOfBuffer != NULL); 999 1000 if (*SizeOfBuffer > 0) { 1001 ASSERT (Buffer != NULL); 1002 } 1003 1004 return (GetPcdPpiPointer ())->SetPtr (TokenNumber, SizeOfBuffer, (VOID *) Buffer); 1005 } 1006 1007 /** 1008 This function provides a means by which to set a value for a given PCD token. 1009 1010 Sets the boolean value for the token specified by TokenNumber 1011 to the value specified by Value. 1012 1013 @param[in] TokenNumber The PCD token number to set a current value for. 1014 @param[in] Value The boolean value to set. 1015 1016 @return The status of the set operation. 1017 1018 **/ 1019 RETURN_STATUS 1020 EFIAPI 1021 LibPcdSetBoolS ( 1022 IN UINTN TokenNumber, 1023 IN BOOLEAN Value 1024 ) 1025 { 1026 return (GetPcdPpiPointer ())->SetBool (TokenNumber, Value); 1027 } 1028 1029 /** 1030 This function provides a means by which to set a value for a given PCD token. 1031 1032 Sets the 8-bit value for the token specified by TokenNumber 1033 to the value specified by Value. 1034 1035 If Guid is NULL, then ASSERT(). 1036 1037 @param[in] Guid The pointer to a 128-bit unique value that 1038 designates which namespace to set a value from. 1039 @param[in] TokenNumber The PCD token number to set a current value for. 1040 @param[in] Value The 8-bit value to set. 1041 1042 @return The status of the set operation. 1043 1044 **/ 1045 RETURN_STATUS 1046 EFIAPI 1047 LibPcdSetEx8S ( 1048 IN CONST GUID *Guid, 1049 IN UINTN TokenNumber, 1050 IN UINT8 Value 1051 ) 1052 { 1053 ASSERT (Guid != NULL); 1054 1055 return (GetPiPcdPpiPointer ())->Set8 (Guid, TokenNumber, Value); 1056 } 1057 1058 /** 1059 This function provides a means by which to set a value for a given PCD token. 1060 1061 Sets the 16-bit value for the token specified by TokenNumber 1062 to the value specified by Value. 1063 1064 If Guid is NULL, then ASSERT(). 1065 1066 @param[in] Guid The pointer to a 128-bit unique value that 1067 designates which namespace to set a value from. 1068 @param[in] TokenNumber The PCD token number to set a current value for. 1069 @param[in] Value The 16-bit value to set. 1070 1071 @return The status of the set operation. 1072 1073 **/ 1074 RETURN_STATUS 1075 EFIAPI 1076 LibPcdSetEx16S ( 1077 IN CONST GUID *Guid, 1078 IN UINTN TokenNumber, 1079 IN UINT16 Value 1080 ) 1081 { 1082 ASSERT (Guid != NULL); 1083 1084 return (GetPiPcdPpiPointer ())->Set16 (Guid, TokenNumber, Value); 1085 } 1086 1087 /** 1088 This function provides a means by which to set a value for a given PCD token. 1089 1090 Sets the 32-bit value for the token specified by TokenNumber 1091 to the value specified by Value. 1092 1093 If Guid is NULL, then ASSERT(). 1094 1095 @param[in] Guid The pointer to a 128-bit unique value that 1096 designates which namespace to set a value from. 1097 @param[in] TokenNumber The PCD token number to set a current value for. 1098 @param[in] Value The 32-bit value to set. 1099 1100 @return The status of the set operation. 1101 1102 **/ 1103 RETURN_STATUS 1104 EFIAPI 1105 LibPcdSetEx32S ( 1106 IN CONST GUID *Guid, 1107 IN UINTN TokenNumber, 1108 IN UINT32 Value 1109 ) 1110 { 1111 ASSERT (Guid != NULL); 1112 1113 return (GetPiPcdPpiPointer ())->Set32 (Guid, TokenNumber, Value); 1114 } 1115 1116 /** 1117 This function provides a means by which to set a value for a given PCD token. 1118 1119 Sets the 64-bit value for the token specified by TokenNumber 1120 to the value specified by Value. 1121 1122 If Guid is NULL, then ASSERT(). 1123 1124 @param[in] Guid The pointer to a 128-bit unique value that 1125 designates which namespace to set a value from. 1126 @param[in] TokenNumber The PCD token number to set a current value for. 1127 @param[in] Value The 64-bit value to set. 1128 1129 @return The status of the set operation. 1130 1131 **/ 1132 RETURN_STATUS 1133 EFIAPI 1134 LibPcdSetEx64S ( 1135 IN CONST GUID *Guid, 1136 IN UINTN TokenNumber, 1137 IN UINT64 Value 1138 ) 1139 { 1140 ASSERT (Guid != NULL); 1141 1142 return (GetPiPcdPpiPointer ())->Set64 (Guid, TokenNumber, Value); 1143 } 1144 1145 /** 1146 This function provides a means by which to set a value for a given PCD token. 1147 1148 Sets a buffer for the token specified by TokenNumber to the value specified by 1149 Buffer and SizeOfBuffer. If SizeOfBuffer is greater than the maximum size 1150 support by TokenNumber, then set SizeOfBuffer to the maximum size supported by 1151 TokenNumber and return EFI_INVALID_PARAMETER to indicate that the set operation 1152 was not actually performed. 1153 1154 If Guid is NULL, then ASSERT(). 1155 If SizeOfBuffer is NULL, then ASSERT(). 1156 If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT(). 1157 1158 @param[in] Guid Pointer to a 128-bit unique value that 1159 designates which namespace to set a value from. 1160 @param[in] TokenNumber The PCD token number to set a current value for. 1161 @param[in, out] SizeOfBuffer The size, in bytes, of Buffer. 1162 @param[in] Buffer A pointer to the buffer to set. 1163 1164 @return The status of the set operation. 1165 1166 **/ 1167 RETURN_STATUS 1168 EFIAPI 1169 LibPcdSetExPtrS ( 1170 IN CONST GUID *Guid, 1171 IN UINTN TokenNumber, 1172 IN OUT UINTN *SizeOfBuffer, 1173 IN VOID *Buffer 1174 ) 1175 { 1176 ASSERT (Guid != NULL); 1177 1178 ASSERT (SizeOfBuffer != NULL); 1179 1180 if (*SizeOfBuffer > 0) { 1181 ASSERT (Buffer != NULL); 1182 } 1183 1184 return (GetPiPcdPpiPointer ())->SetPtr (Guid, TokenNumber, SizeOfBuffer, Buffer); 1185 } 1186 1187 /** 1188 This function provides a means by which to set a value for a given PCD token. 1189 1190 Sets the boolean value for the token specified by TokenNumber 1191 to the value specified by Value. 1192 1193 If Guid is NULL, then ASSERT(). 1194 1195 @param[in] Guid The pointer to a 128-bit unique value that 1196 designates which namespace to set a value from. 1197 @param[in] TokenNumber The PCD token number to set a current value for. 1198 @param[in] Value The boolean value to set. 1199 1200 @return The status of the set operation. 1201 1202 **/ 1203 RETURN_STATUS 1204 EFIAPI 1205 LibPcdSetExBoolS ( 1206 IN CONST GUID *Guid, 1207 IN UINTN TokenNumber, 1208 IN BOOLEAN Value 1209 ) 1210 { 1211 ASSERT (Guid != NULL); 1212 1213 return (GetPiPcdPpiPointer ())->SetBool (Guid, TokenNumber, Value); 1214 } 1215 1216 /** 1217 Set up a notification function that is called when a specified token is set. 1218 1219 When the token specified by TokenNumber and Guid is set, 1220 then notification function specified by NotificationFunction is called. 1221 If Guid is NULL, then the default token space is used. 1222 If NotificationFunction is NULL, then ASSERT(). 1223 1224 @param[in] Guid The pointer to a 128-bit unique value that 1225 designates which namespace to set a value from. 1226 If NULL, then the default token space is used. 1227 @param[in] TokenNumber The PCD token number to monitor. 1228 @param[in] NotificationFunction The function to call when the token 1229 specified by Guid and TokenNumber is set. 1230 1231 **/ 1232 VOID 1233 EFIAPI 1234 LibPcdCallbackOnSet ( 1235 IN CONST GUID *Guid, OPTIONAL 1236 IN UINTN TokenNumber, 1237 IN PCD_CALLBACK NotificationFunction 1238 ) 1239 { 1240 EFI_STATUS Status; 1241 1242 ASSERT (NotificationFunction != NULL); 1243 1244 Status = (GetPiPcdPpiPointer ())->CallbackOnSet (Guid, TokenNumber, (EFI_PEI_PCD_PPI_CALLBACK) NotificationFunction); 1245 1246 ASSERT_EFI_ERROR (Status); 1247 1248 return; 1249 } 1250 1251 1252 1253 /** 1254 Disable a notification function that was established with LibPcdCallbackonSet(). 1255 1256 Disable a notification function that was previously established with LibPcdCallbackOnSet(). 1257 If NotificationFunction is NULL, then ASSERT(). 1258 If LibPcdCallbackOnSet() was not previously called with Guid, TokenNumber, 1259 and NotificationFunction, then ASSERT(). 1260 1261 @param[in] Guid Specify the GUID token space. 1262 @param[in] TokenNumber Specify the token number. 1263 @param[in] NotificationFunction The callback function to be unregistered. 1264 1265 **/ 1266 VOID 1267 EFIAPI 1268 LibPcdCancelCallback ( 1269 IN CONST GUID *Guid, OPTIONAL 1270 IN UINTN TokenNumber, 1271 IN PCD_CALLBACK NotificationFunction 1272 ) 1273 { 1274 EFI_STATUS Status; 1275 1276 ASSERT (NotificationFunction != NULL); 1277 1278 Status = (GetPiPcdPpiPointer ())->CancelCallback (Guid, TokenNumber, (EFI_PEI_PCD_PPI_CALLBACK) NotificationFunction); 1279 1280 ASSERT_EFI_ERROR (Status); 1281 1282 return; 1283 } 1284 1285 1286 1287 /** 1288 Retrieves the next token in a token space. 1289 1290 Retrieves the next PCD token number from the token space specified by Guid. 1291 If Guid is NULL, then the default token space is used. If TokenNumber is 0, 1292 then the first token number is returned. Otherwise, the token number that 1293 follows TokenNumber in the token space is returned. If TokenNumber is the last 1294 token number in the token space, then 0 is returned. 1295 1296 If TokenNumber is not 0 and is not in the token space specified by Guid, then ASSERT(). 1297 1298 @param[in] Guid The pointer to a 128-bit unique value that designates which namespace 1299 to set a value from. If NULL, then the default token space is used. 1300 @param[in] TokenNumber The previous PCD token number. If 0, then retrieves the first PCD 1301 token number. 1302 1303 @return The next valid token number. 1304 1305 **/ 1306 UINTN 1307 EFIAPI 1308 LibPcdGetNextToken ( 1309 IN CONST GUID *Guid, OPTIONAL 1310 IN UINTN TokenNumber 1311 ) 1312 { 1313 EFI_STATUS Status; 1314 1315 Status = (GetPiPcdPpiPointer ())->GetNextToken (Guid, &TokenNumber); 1316 ASSERT (!EFI_ERROR (Status) || TokenNumber == 0); 1317 1318 return TokenNumber; 1319 } 1320 1321 1322 /** 1323 Used to retrieve the list of available PCD token space GUIDs. 1324 1325 Returns the PCD token space GUID that follows TokenSpaceGuid in the list of token spaces 1326 in the platform. 1327 If TokenSpaceGuid is NULL, then a pointer to the first PCD token spaces returned. 1328 If TokenSpaceGuid is the last PCD token space GUID in the list, then NULL is returned. 1329 1330 @param TokenSpaceGuid The pointer to the a PCD token space GUID 1331 1332 @return The next valid token namespace. 1333 1334 **/ 1335 GUID * 1336 EFIAPI 1337 LibPcdGetNextTokenSpace ( 1338 IN CONST GUID *TokenSpaceGuid 1339 ) 1340 { 1341 (GetPiPcdPpiPointer ())->GetNextTokenSpace (&TokenSpaceGuid); 1342 1343 return (GUID *) TokenSpaceGuid; 1344 } 1345 1346 1347 1348 /** 1349 Sets a value of a patchable PCD entry that is type pointer. 1350 1351 Sets the PCD entry specified by PatchVariable to the value specified by Buffer 1352 and SizeOfBuffer. Buffer is returned. If SizeOfBuffer is greater than 1353 MaximumDatumSize, then set SizeOfBuffer to MaximumDatumSize and return 1354 NULL to indicate that the set operation was not actually performed. 1355 If SizeOfBuffer is set to MAX_ADDRESS, then SizeOfBuffer must be set to 1356 MaximumDatumSize and NULL must be returned. 1357 1358 If PatchVariable is NULL, then ASSERT(). 1359 If SizeOfBuffer is NULL, then ASSERT(). 1360 If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT(). 1361 1362 @param[out] PatchVariable A pointer to the global variable in a module that is 1363 the target of the set operation. 1364 @param[in] MaximumDatumSize The maximum size allowed for the PCD entry specified by PatchVariable. 1365 @param[in, out] SizeOfBuffer A pointer to the size, in bytes, of Buffer. 1366 @param[in] Buffer A pointer to the buffer to used to set the target variable. 1367 1368 @return Return the pointer to the buffer been set. 1369 1370 **/ 1371 VOID * 1372 EFIAPI 1373 LibPatchPcdSetPtr ( 1374 OUT VOID *PatchVariable, 1375 IN UINTN MaximumDatumSize, 1376 IN OUT UINTN *SizeOfBuffer, 1377 IN CONST VOID *Buffer 1378 ) 1379 { 1380 ASSERT (PatchVariable != NULL); 1381 ASSERT (SizeOfBuffer != NULL); 1382 1383 if (*SizeOfBuffer > 0) { 1384 ASSERT (Buffer != NULL); 1385 } 1386 1387 if ((*SizeOfBuffer > MaximumDatumSize) || 1388 (*SizeOfBuffer == MAX_ADDRESS)) { 1389 *SizeOfBuffer = MaximumDatumSize; 1390 return NULL; 1391 } 1392 1393 CopyMem (PatchVariable, Buffer, *SizeOfBuffer); 1394 1395 return (VOID *) Buffer; 1396 } 1397 1398 /** 1399 Sets a value of a patchable PCD entry that is type pointer. 1400 1401 Sets the PCD entry specified by PatchVariable to the value specified 1402 by Buffer and SizeOfBuffer. If SizeOfBuffer is greater than MaximumDatumSize, 1403 then set SizeOfBuffer to MaximumDatumSize and return RETURN_INVALID_PARAMETER 1404 to indicate that the set operation was not actually performed. 1405 If SizeOfBuffer is set to MAX_ADDRESS, then SizeOfBuffer must be set to 1406 MaximumDatumSize and RETURN_INVALID_PARAMETER must be returned. 1407 1408 If PatchVariable is NULL, then ASSERT(). 1409 If SizeOfBuffer is NULL, then ASSERT(). 1410 If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT(). 1411 1412 @param[out] PatchVariable A pointer to the global variable in a module that is 1413 the target of the set operation. 1414 @param[in] MaximumDatumSize The maximum size allowed for the PCD entry specified by PatchVariable. 1415 @param[in, out] SizeOfBuffer A pointer to the size, in bytes, of Buffer. 1416 @param[in] Buffer A pointer to the buffer to used to set the target variable. 1417 1418 @return The status of the set operation. 1419 1420 **/ 1421 RETURN_STATUS 1422 EFIAPI 1423 LibPatchPcdSetPtrS ( 1424 OUT VOID *PatchVariable, 1425 IN UINTN MaximumDatumSize, 1426 IN OUT UINTN *SizeOfBuffer, 1427 IN CONST VOID *Buffer 1428 ) 1429 { 1430 ASSERT (PatchVariable != NULL); 1431 ASSERT (SizeOfBuffer != NULL); 1432 1433 if (*SizeOfBuffer > 0) { 1434 ASSERT (Buffer != NULL); 1435 } 1436 1437 if ((*SizeOfBuffer > MaximumDatumSize) || 1438 (*SizeOfBuffer == MAX_ADDRESS)) { 1439 *SizeOfBuffer = MaximumDatumSize; 1440 return RETURN_INVALID_PARAMETER; 1441 } 1442 1443 CopyMem (PatchVariable, Buffer, *SizeOfBuffer); 1444 1445 return RETURN_SUCCESS; 1446 } 1447 1448 1449 /** 1450 Sets a value and size of a patchable PCD entry that is type pointer. 1451 1452 Sets the PCD entry specified by PatchVariable to the value specified by Buffer 1453 and SizeOfBuffer. Buffer is returned. If SizeOfBuffer is greater than 1454 MaximumDatumSize, then set SizeOfBuffer to MaximumDatumSize and return 1455 NULL to indicate that the set operation was not actually performed. 1456 If SizeOfBuffer is set to MAX_ADDRESS, then SizeOfBuffer must be set to 1457 MaximumDatumSize and NULL must be returned. 1458 1459 If PatchVariable is NULL, then ASSERT(). 1460 If SizeOfPatchVariable is NULL, then ASSERT(). 1461 If SizeOfBuffer is NULL, then ASSERT(). 1462 If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT(). 1463 1464 @param[out] PatchVariable A pointer to the global variable in a module that is 1465 the target of the set operation. 1466 @param[out] SizeOfPatchVariable A pointer to the size, in bytes, of PatchVariable. 1467 @param[in] MaximumDatumSize The maximum size allowed for the PCD entry specified by PatchVariable. 1468 @param[in, out] SizeOfBuffer A pointer to the size, in bytes, of Buffer. 1469 @param[in] Buffer A pointer to the buffer to used to set the target variable. 1470 1471 @return Return the pointer to the buffer been set. 1472 1473 **/ 1474 VOID * 1475 EFIAPI 1476 LibPatchPcdSetPtrAndSize ( 1477 OUT VOID *PatchVariable, 1478 OUT UINTN *SizeOfPatchVariable, 1479 IN UINTN MaximumDatumSize, 1480 IN OUT UINTN *SizeOfBuffer, 1481 IN CONST VOID *Buffer 1482 ) 1483 { 1484 ASSERT (PatchVariable != NULL); 1485 ASSERT (SizeOfPatchVariable != NULL); 1486 ASSERT (SizeOfBuffer != NULL); 1487 1488 if (*SizeOfBuffer > 0) { 1489 ASSERT (Buffer != NULL); 1490 } 1491 1492 if ((*SizeOfBuffer > MaximumDatumSize) || 1493 (*SizeOfBuffer == MAX_ADDRESS)) { 1494 *SizeOfBuffer = MaximumDatumSize; 1495 return NULL; 1496 } 1497 1498 CopyMem (PatchVariable, Buffer, *SizeOfBuffer); 1499 *SizeOfPatchVariable = *SizeOfBuffer; 1500 1501 return (VOID *) Buffer; 1502 } 1503 1504 /** 1505 Sets a value and size of a patchable PCD entry that is type pointer. 1506 1507 Sets the PCD entry specified by PatchVariable to the value specified 1508 by Buffer and SizeOfBuffer. If SizeOfBuffer is greater than MaximumDatumSize, 1509 then set SizeOfBuffer to MaximumDatumSize and return RETURN_INVALID_PARAMETER 1510 to indicate that the set operation was not actually performed. 1511 If SizeOfBuffer is set to MAX_ADDRESS, then SizeOfBuffer must be set to 1512 MaximumDatumSize and RETURN_INVALID_PARAMETER must be returned. 1513 1514 If PatchVariable is NULL, then ASSERT(). 1515 If SizeOfPatchVariable is NULL, then ASSERT(). 1516 If SizeOfBuffer is NULL, then ASSERT(). 1517 If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT(). 1518 1519 @param[out] PatchVariable A pointer to the global variable in a module that is 1520 the target of the set operation. 1521 @param[out] SizeOfPatchVariable A pointer to the size, in bytes, of PatchVariable. 1522 @param[in] MaximumDatumSize The maximum size allowed for the PCD entry specified by PatchVariable. 1523 @param[in, out] SizeOfBuffer A pointer to the size, in bytes, of Buffer. 1524 @param[in] Buffer A pointer to the buffer to used to set the target variable. 1525 1526 @return The status of the set operation. 1527 1528 **/ 1529 RETURN_STATUS 1530 EFIAPI 1531 LibPatchPcdSetPtrAndSizeS ( 1532 OUT VOID *PatchVariable, 1533 OUT UINTN *SizeOfPatchVariable, 1534 IN UINTN MaximumDatumSize, 1535 IN OUT UINTN *SizeOfBuffer, 1536 IN CONST VOID *Buffer 1537 ) 1538 { 1539 ASSERT (PatchVariable != NULL); 1540 ASSERT (SizeOfPatchVariable != NULL); 1541 ASSERT (SizeOfBuffer != NULL); 1542 1543 if (*SizeOfBuffer > 0) { 1544 ASSERT (Buffer != NULL); 1545 } 1546 1547 if ((*SizeOfBuffer > MaximumDatumSize) || 1548 (*SizeOfBuffer == MAX_ADDRESS)) { 1549 *SizeOfBuffer = MaximumDatumSize; 1550 return RETURN_INVALID_PARAMETER; 1551 } 1552 1553 CopyMem (PatchVariable, Buffer, *SizeOfBuffer); 1554 *SizeOfPatchVariable = *SizeOfBuffer; 1555 1556 return RETURN_SUCCESS; 1557 } 1558 1559 /** 1560 Retrieve additional information associated with a PCD token. 1561 1562 This includes information such as the type of value the TokenNumber is associated with as well as possible 1563 human readable name that is associated with the token. 1564 1565 If TokenNumber is not in the default token space specified, then ASSERT(). 1566 1567 @param[in] TokenNumber The PCD token number. 1568 @param[out] PcdInfo The returned information associated with the requested TokenNumber. 1569 The caller is responsible for freeing the buffer that is allocated by callee for PcdInfo->PcdName. 1570 **/ 1571 VOID 1572 EFIAPI 1573 LibPcdGetInfo ( 1574 IN UINTN TokenNumber, 1575 OUT PCD_INFO *PcdInfo 1576 ) 1577 { 1578 EFI_STATUS Status; 1579 1580 Status = GetPcdInfoPpiPointer()->GetInfo (TokenNumber, (EFI_PCD_INFO *) PcdInfo); 1581 ASSERT_EFI_ERROR (Status); 1582 } 1583 1584 /** 1585 Retrieve additional information associated with a PCD token. 1586 1587 This includes information such as the type of value the TokenNumber is associated with as well as possible 1588 human readable name that is associated with the token. 1589 1590 If TokenNumber is not in the token space specified by Guid, then ASSERT(). 1591 1592 @param[in] Guid The 128-bit unique value that designates the namespace from which to extract the value. 1593 @param[in] TokenNumber The PCD token number. 1594 @param[out] PcdInfo The returned information associated with the requested TokenNumber. 1595 The caller is responsible for freeing the buffer that is allocated by callee for PcdInfo->PcdName. 1596 **/ 1597 VOID 1598 EFIAPI 1599 LibPcdGetInfoEx ( 1600 IN CONST GUID *Guid, 1601 IN UINTN TokenNumber, 1602 OUT PCD_INFO *PcdInfo 1603 ) 1604 { 1605 EFI_STATUS Status; 1606 1607 Status = GetPiPcdInfoPpiPointer()->GetInfo (Guid, TokenNumber, (EFI_PCD_INFO *) PcdInfo); 1608 ASSERT_EFI_ERROR (Status); 1609 } 1610 1611 /** 1612 Retrieve the currently set SKU Id. 1613 1614 @return The currently set SKU Id. If the platform has not set at a SKU Id, then the 1615 default SKU Id value of 0 is returned. If the platform has set a SKU Id, then the currently set SKU 1616 Id is returned. 1617 **/ 1618 UINTN 1619 EFIAPI 1620 LibPcdGetSku ( 1621 VOID 1622 ) 1623 { 1624 return GetPiPcdInfoPpiPointer()->GetSku (); 1625 } 1626