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