1 /** @file 2 Native Platform Configuration Database (PCD) Protocol 3 4 Different with the EFI_PCD_PROTOCOL defined in PI 1.2 specification, the native 5 PCD protocol provide interfaces for dynamic and dynamic-ex type PCD. 6 The interfaces in dynamic type PCD do not require the token space guid as parameter, 7 but interfaces in dynamic-ex type PCD require token space guid as parameter. 8 9 Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR> 10 SPDX-License-Identifier: BSD-2-Clause-Patent 11 12 @par Revision Reference: 13 This Protocol was introduced in PI Specification 1.2. 14 15 **/ 16 17 #ifndef __PCD_H__ 18 #define __PCD_H__ 19 20 extern EFI_GUID gPcdProtocolGuid; 21 22 #define PCD_PROTOCOL_GUID \ 23 { 0x11b34006, 0xd85b, 0x4d0a, { 0xa2, 0x90, 0xd5, 0xa5, 0x71, 0x31, 0xe, 0xf7 } } 24 25 #define PCD_INVALID_TOKEN_NUMBER ((UINTN) 0) 26 27 /** 28 Sets the SKU value for subsequent calls to set or get PCD token values. 29 30 SetSku() sets the SKU Id to be used for subsequent calls to set or get PCD values. 31 SetSku() is normally called only once by the system. 32 33 For each item (token), the database can hold a single value that applies to all SKUs, 34 or multiple values, where each value is associated with a specific SKU Id. Items with multiple, 35 SKU-specific values are called SKU enabled. 36 37 The SKU Id of zero is reserved as a default. The valid SkuId range is 1 to 255. 38 For tokens that are not SKU enabled, the system ignores any set SKU Id and works with the 39 single value for that token. For SKU-enabled tokens, the system will use the SKU Id set by the 40 last call to SetSku(). If no SKU Id is set or the currently set SKU Id isn't valid for the specified token, 41 the system uses the default SKU Id. If the system attempts to use the default SKU Id and no value has been 42 set for that Id, the results are unpredictable. 43 44 @param[in] SkuId The SKU value that will be used when the PCD service will retrieve and 45 set values associated with a PCD token. 46 47 48 **/ 49 typedef 50 VOID 51 (EFIAPI *PCD_PROTOCOL_SET_SKU)( 52 IN UINTN SkuId 53 ); 54 55 /** 56 Retrieves an 8-bit value for a given PCD token. 57 58 Retrieves the current byte-sized value for a PCD token number. 59 If the TokenNumber is invalid, the results are unpredictable. 60 61 @param[in] TokenNumber The PCD token number. 62 63 @return The UINT8 value. 64 65 **/ 66 typedef 67 UINT8 68 (EFIAPI *PCD_PROTOCOL_GET8)( 69 IN UINTN TokenNumber 70 ); 71 72 /** 73 Retrieves a 16-bit value for a given PCD token. 74 75 Retrieves the current 16-bit value for a PCD token number. 76 If the TokenNumber is invalid, the results are unpredictable. 77 78 @param[in] TokenNumber The PCD token number. 79 80 @return The UINT16 value. 81 82 **/ 83 typedef 84 UINT16 85 (EFIAPI *PCD_PROTOCOL_GET16)( 86 IN UINTN TokenNumber 87 ); 88 89 /** 90 Retrieves a 32-bit value for a given PCD token. 91 92 Retrieves the current 32-bit value for a PCD token number. 93 If the TokenNumber is invalid, the results are unpredictable. 94 95 @param[in] TokenNumber The PCD token number. 96 97 @return The UINT32 value. 98 99 **/ 100 typedef 101 UINT32 102 (EFIAPI *PCD_PROTOCOL_GET32)( 103 IN UINTN TokenNumber 104 ); 105 106 /** 107 Retrieves a 64-bit value for a given PCD token. 108 109 Retrieves the current 64-bit value for a PCD token number. 110 If the TokenNumber is invalid, the results are unpredictable. 111 112 @param[in] TokenNumber The PCD token number. 113 114 @return The UINT64 value. 115 116 **/ 117 typedef 118 UINT64 119 (EFIAPI *PCD_PROTOCOL_GET64)( 120 IN UINTN TokenNumber 121 ); 122 123 /** 124 Retrieves a pointer to a value for a given PCD token. 125 126 Retrieves the current pointer to the buffer for a PCD token number. 127 Do not make any assumptions about the alignment of the pointer that 128 is returned by this function call. If the TokenNumber is invalid, 129 the results are unpredictable. 130 131 @param[in] TokenNumber The PCD token number. 132 133 @return The pointer to the buffer to be retrived. 134 135 **/ 136 typedef 137 VOID * 138 (EFIAPI *PCD_PROTOCOL_GET_POINTER)( 139 IN UINTN TokenNumber 140 ); 141 142 /** 143 Retrieves a Boolean value for a given PCD token. 144 145 Retrieves the current boolean value for a PCD token number. 146 Do not make any assumptions about the alignment of the pointer that 147 is returned by this function call. If the TokenNumber is invalid, 148 the results are unpredictable. 149 150 @param[in] TokenNumber The PCD token number. 151 152 @return The Boolean value. 153 154 **/ 155 typedef 156 BOOLEAN 157 (EFIAPI *PCD_PROTOCOL_GET_BOOLEAN)( 158 IN UINTN TokenNumber 159 ); 160 161 /** 162 Retrieves the size of the value for a given PCD token. 163 164 Retrieves the current size of a particular PCD token. 165 If the TokenNumber is invalid, the results are unpredictable. 166 167 @param[in] TokenNumber The PCD token number. 168 169 @return The size of the value for the PCD token. 170 171 **/ 172 typedef 173 UINTN 174 (EFIAPI *PCD_PROTOCOL_GET_SIZE)( 175 IN UINTN TokenNumber 176 ); 177 178 /** 179 Retrieves an 8-bit value for a given PCD token. 180 181 Retrieves the 8-bit value of a particular PCD token. 182 If the TokenNumber is invalid or the token space 183 specified by Guid does not exist, the results are 184 unpredictable. 185 186 @param[in] Guid The token space for the token number. 187 @param[in] TokenNumber The PCD token number. 188 189 @return The size 8-bit value for the PCD token. 190 191 **/ 192 typedef 193 UINT8 194 (EFIAPI *PCD_PROTOCOL_GET_EX_8)( 195 IN CONST EFI_GUID *Guid, 196 IN UINTN TokenNumber 197 ); 198 199 /** 200 Retrieves a 16-bit value for a given PCD token. 201 202 Retrieves the 16-bit value of a particular PCD token. 203 If the TokenNumber is invalid or the token space 204 specified by Guid does not exist, the results are 205 unpredictable. 206 207 @param[in] Guid The token space for the token number. 208 @param[in] TokenNumber The PCD token number. 209 210 @return The size 16-bit value for the PCD token. 211 212 **/ 213 typedef 214 UINT16 215 (EFIAPI *PCD_PROTOCOL_GET_EX_16)( 216 IN CONST EFI_GUID *Guid, 217 IN UINTN TokenNumber 218 ); 219 220 /** 221 Retrieves a 32-bit value for a given PCD token. 222 223 Retrieves the 32-bit value of a particular PCD token. 224 If the TokenNumber is invalid or the token space 225 specified by Guid does not exist, the results are 226 unpredictable. 227 228 @param[in] Guid The token space for the token number. 229 @param[in] TokenNumber The PCD token number. 230 231 @return The size 32-bit value for the PCD token. 232 233 **/ 234 typedef 235 UINT32 236 (EFIAPI *PCD_PROTOCOL_GET_EX_32)( 237 IN CONST EFI_GUID *Guid, 238 IN UINTN TokenNumber 239 ); 240 241 /** 242 Retrieves an 64-bit value for a given PCD token. 243 244 Retrieves the 64-bit value of a particular PCD token. 245 If the TokenNumber is invalid or the token space 246 specified by Guid does not exist, the results are 247 unpredictable. 248 249 @param[in] Guid The token space for the token number. 250 @param[in] TokenNumber The PCD token number. 251 252 @return The size 64-bit value for the PCD token. 253 254 **/ 255 typedef 256 UINT64 257 (EFIAPI *PCD_PROTOCOL_GET_EX_64)( 258 IN CONST EFI_GUID *Guid, 259 IN UINTN TokenNumber 260 ); 261 262 /** 263 Retrieves a pointer to a value for a given PCD token. 264 265 Retrieves the current pointer to the buffer for a PCD token number. 266 Do not make any assumptions about the alignment of the pointer that 267 is returned by this function call. If the TokenNumber is invalid, 268 the results are unpredictable. 269 270 @param[in] Guid The token space for the token number. 271 @param[in] TokenNumber The PCD token number. 272 273 @return The pointer to the buffer to be retrieved. 274 275 **/ 276 typedef 277 VOID * 278 (EFIAPI *PCD_PROTOCOL_GET_EX_POINTER)( 279 IN CONST EFI_GUID *Guid, 280 IN UINTN TokenNumber 281 ); 282 283 /** 284 Retrieves a Boolean value for a given PCD token. 285 286 Retrieves the Boolean value of a particular PCD token. 287 If the TokenNumber is invalid or the token space 288 specified by Guid does not exist, the results are 289 unpredictable. 290 291 @param[in] Guid The token space for the token number. 292 @param[in] TokenNumber The PCD token number. 293 294 @return The size Boolean value for the PCD token. 295 296 **/ 297 typedef 298 BOOLEAN 299 (EFIAPI *PCD_PROTOCOL_GET_EX_BOOLEAN)( 300 IN CONST EFI_GUID *Guid, 301 IN UINTN TokenNumber 302 ); 303 304 /** 305 Retrieves the size of the value for a given PCD token. 306 307 Retrieves the current size of a particular PCD token. 308 If the TokenNumber is invalid, the results are unpredictable. 309 310 @param[in] Guid The token space for the token number. 311 @param[in] TokenNumber The PCD token number. 312 313 @return The size of the value for the PCD token. 314 315 **/ 316 typedef 317 UINTN 318 (EFIAPI *PCD_PROTOCOL_GET_EX_SIZE)( 319 IN CONST EFI_GUID *Guid, 320 IN UINTN TokenNumber 321 ); 322 323 /** 324 Sets an 8-bit value for a given PCD token. 325 326 When the PCD service sets a value, it will check to ensure that the 327 size of the value being set is compatible with the Token's existing definition. 328 If it is not, an error will be returned. 329 330 @param[in] TokenNumber The PCD token number. 331 @param[in] Value The value to set for the PCD token. 332 333 @retval EFI_SUCCESS The procedure returned successfully. 334 @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data 335 being set was incompatible with a call to this function. 336 Use GetSize() to retrieve the size of the target data. 337 @retval EFI_NOT_FOUND The PCD service could not find the requested token number. 338 339 **/ 340 typedef 341 EFI_STATUS 342 (EFIAPI *PCD_PROTOCOL_SET8)( 343 IN UINTN TokenNumber, 344 IN UINT8 Value 345 ); 346 347 /** 348 Sets a 16-bit value for a given PCD token. 349 350 When the PCD service sets a value, it will check to ensure that the 351 size of the value being set is compatible with the Token's existing definition. 352 If it is not, an error will be returned. 353 354 @param[in] TokenNumber The PCD token number. 355 @param[in] Value The value to set for the PCD token. 356 357 @retval EFI_SUCCESS The procedure returned successfully. 358 @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data 359 being set was incompatible with a call to this function. 360 Use GetSize() to retrieve the size of the target data. 361 @retval EFI_NOT_FOUND The PCD service could not find the requested token number. 362 363 **/ 364 typedef 365 EFI_STATUS 366 (EFIAPI *PCD_PROTOCOL_SET16)( 367 IN UINTN TokenNumber, 368 IN UINT16 Value 369 ); 370 371 /** 372 Sets a 32-bit value for a given PCD token. 373 374 When the PCD service sets a value, it will check to ensure that the 375 size of the value being set is compatible with the Token's existing definition. 376 If it is not, an error will be returned. 377 378 @param[in] TokenNumber The PCD token number. 379 @param[in] Value The value to set for the PCD token. 380 381 @retval EFI_SUCCESS The procedure returned successfully. 382 @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data 383 being set was incompatible with a call to this function. 384 Use GetSize() to retrieve the size of the target data. 385 @retval EFI_NOT_FOUND The PCD service could not find the requested token number. 386 387 **/ 388 typedef 389 EFI_STATUS 390 (EFIAPI *PCD_PROTOCOL_SET32)( 391 IN UINTN TokenNumber, 392 IN UINT32 Value 393 ); 394 395 /** 396 Sets a 64-bit value for a given PCD token. 397 398 When the PCD service sets a value, it will check to ensure that the 399 size of the value being set is compatible with the Token's existing definition. 400 If it is not, an error will be returned. 401 402 @param[in] TokenNumber The PCD token number. 403 @param[in] Value The value to set for the PCD token. 404 405 @retval EFI_SUCCESS The procedure returned successfully. 406 @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data 407 being set was incompatible with a call to this function. 408 Use GetSize() to retrieve the size of the target data. 409 @retval EFI_NOT_FOUND The PCD service could not find the requested token number. 410 411 **/ 412 typedef 413 EFI_STATUS 414 (EFIAPI *PCD_PROTOCOL_SET64)( 415 IN UINTN TokenNumber, 416 IN UINT64 Value 417 ); 418 419 /** 420 Sets a value of a specified size for a given PCD token. 421 422 When the PCD service sets a value, it will check to ensure that the 423 size of the value being set is compatible with the Token's existing definition. 424 If it is not, an error will be returned. 425 426 @param[in] TokenNumber The PCD token number. 427 @param[in, out] SizeOfBuffer A pointer to the length of the value being set for the PCD token. 428 On input, if the SizeOfValue is greater than the maximum size supported 429 for this TokenNumber then the output value of SizeOfValue will reflect 430 the maximum size supported for this TokenNumber. 431 @param[in] Buffer The buffer to set for the PCD token. 432 433 @retval EFI_SUCCESS The procedure returned successfully. 434 @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data 435 being set was incompatible with a call to this function. 436 Use GetSize() to retrieve the size of the target data. 437 @retval EFI_NOT_FOUND The PCD service could not find the requested token number. 438 439 **/ 440 typedef 441 EFI_STATUS 442 (EFIAPI *PCD_PROTOCOL_SET_POINTER)( 443 IN UINTN TokenNumber, 444 IN OUT UINTN *SizeOfBuffer, 445 IN VOID *Buffer 446 ); 447 448 /** 449 Sets a Boolean value for a given PCD token. 450 451 When the PCD service sets a value, it will check to ensure that the 452 size of the value being set is compatible with the Token's existing definition. 453 If it is not, an error will be returned. 454 455 @param[in] TokenNumber The PCD token number. 456 @param[in] Value The value to set for the PCD token. 457 458 @retval EFI_SUCCESS The procedure returned successfully. 459 @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data 460 being set was incompatible with a call to this function. 461 Use GetSize() to retrieve the size of the target data. 462 @retval EFI_NOT_FOUND The PCD service could not find the requested token number. 463 464 **/ 465 typedef 466 EFI_STATUS 467 (EFIAPI *PCD_PROTOCOL_SET_BOOLEAN)( 468 IN UINTN TokenNumber, 469 IN BOOLEAN Value 470 ); 471 472 /** 473 Sets an 8-bit value for a given PCD token. 474 475 When the PCD service sets a value, it will check to ensure that the 476 size of the value being set is compatible with the Token's existing definition. 477 If it is not, an error will be returned. 478 479 @param[in] Guid The 128-bit unique value that designates the namespace from which to extract the value. 480 @param[in] TokenNumber The PCD token number. 481 @param[in] Value The value to set for the PCD token. 482 483 @retval EFI_SUCCESS The procedure returned successfully. 484 @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data 485 being set was incompatible with a call to this function. 486 Use GetSize() to retrieve the size of the target data. 487 @retval EFI_NOT_FOUND The PCD service could not find the requested token number. 488 489 **/ 490 typedef 491 EFI_STATUS 492 (EFIAPI *PCD_PROTOCOL_SET_EX_8)( 493 IN CONST EFI_GUID *Guid, 494 IN UINTN TokenNumber, 495 IN UINT8 Value 496 ); 497 498 /** 499 Sets an 16-bit value for a given PCD token. 500 501 When the PCD service sets a value, it will check to ensure that the 502 size of the value being set is compatible with the Token's existing definition. 503 If it is not, an error will be returned. 504 505 @param[in] Guid The 128-bit unique value that designates the namespace from which to extract the value. 506 @param[in] TokenNumber The PCD token number. 507 @param[in] Value The value to set for the PCD token. 508 509 @retval EFI_SUCCESS The procedure returned successfully. 510 @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data 511 being set was incompatible with a call to this function. 512 Use GetSize() to retrieve the size of the target data. 513 @retval EFI_NOT_FOUND The PCD service could not find the requested token number. 514 515 **/ 516 typedef 517 EFI_STATUS 518 (EFIAPI *PCD_PROTOCOL_SET_EX_16)( 519 IN CONST EFI_GUID *Guid, 520 IN UINTN TokenNumber, 521 IN UINT16 Value 522 ); 523 524 /** 525 Sets a 32-bit value for a given PCD token. 526 527 When the PCD service sets a value, it will check to ensure that the 528 size of the value being set is compatible with the Token's existing definition. 529 If it is not, an error will be returned. 530 531 @param[in] Guid The 128-bit unique value that designates the namespace from which to extract the value. 532 @param[in] TokenNumber The PCD token number. 533 @param[in] Value The value to set for the PCD token. 534 535 @retval EFI_SUCCESS The procedure returned successfully. 536 @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data 537 being set was incompatible with a call to this function. 538 Use GetSize() to retrieve the size of the target data. 539 @retval EFI_NOT_FOUND The PCD service could not find the requested token number. 540 541 **/ 542 typedef 543 EFI_STATUS 544 (EFIAPI *PCD_PROTOCOL_SET_EX_32)( 545 IN CONST EFI_GUID *Guid, 546 IN UINTN TokenNumber, 547 IN UINT32 Value 548 ); 549 550 /** 551 Sets a 64-bit value for a given PCD token. 552 553 When the PCD service sets a value, it will check to ensure that the 554 size of the value being set is compatible with the Token's existing definition. 555 If it is not, an error will be returned. 556 557 @param[in] Guid The 128-bit unique value that designates the namespace from which to extract the value. 558 @param[in] TokenNumber The PCD token number. 559 @param[in] Value The value to set for the PCD token. 560 561 @retval EFI_SUCCESS The procedure returned successfully. 562 @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data 563 being set was incompatible with a call to this function. 564 Use GetSize() to retrieve the size of the target data. 565 @retval EFI_NOT_FOUND The PCD service could not find the requested token number. 566 567 **/ 568 typedef 569 EFI_STATUS 570 (EFIAPI *PCD_PROTOCOL_SET_EX_64)( 571 IN CONST EFI_GUID *Guid, 572 IN UINTN TokenNumber, 573 IN UINT64 Value 574 ); 575 576 /** 577 Sets a value of a specified size for a given PCD token. 578 579 When the PCD service sets a value, it will check to ensure that the 580 size of the value being set is compatible with the Token's existing definition. 581 If it is not, an error will be returned. 582 583 @param[in] Guid The 128-bit unique value that designates the namespace from which to extract the value. 584 @param[in] TokenNumber The PCD token number. 585 @param[in, out] SizeOfBuffer A pointer to the length of the value being set for the PCD token. 586 On input, if the SizeOfValue is greater than the maximum size supported 587 for this TokenNumber then the output value of SizeOfValue will reflect 588 the maximum size supported for this TokenNumber. 589 @param[in] Buffer The buffer to set for the PCD token. 590 591 @retval EFI_SUCCESS The procedure returned successfully. 592 @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data 593 being set was incompatible with a call to this function. 594 Use GetSize() to retrieve the size of the target data. 595 @retval EFI_NOT_FOUND The PCD service could not find the requested token number. 596 597 **/ 598 typedef 599 EFI_STATUS 600 (EFIAPI *PCD_PROTOCOL_SET_EX_POINTER)( 601 IN CONST EFI_GUID *Guid, 602 IN UINTN TokenNumber, 603 IN OUT UINTN *SizeOfBuffer, 604 IN VOID *Buffer 605 ); 606 607 /** 608 Sets a Boolean value for a given PCD token. 609 610 When the PCD service sets a value, it will check to ensure that the 611 size of the value being set is compatible with the Token's existing definition. 612 If it is not, an error will be returned. 613 614 @param[in] Guid The 128-bit unique value that designates the namespace from which to extract the value. 615 @param[in] TokenNumber The PCD token number. 616 @param[in] Value The value to set for the PCD token. 617 618 @retval EFI_SUCCESS The procedure returned successfully. 619 @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data 620 being set was incompatible with a call to this function. 621 Use GetSize() to retrieve the size of the target data. 622 @retval EFI_NOT_FOUND The PCD service could not find the requested token number. 623 624 **/ 625 typedef 626 EFI_STATUS 627 (EFIAPI *PCD_PROTOCOL_SET_EX_BOOLEAN)( 628 IN CONST EFI_GUID *Guid, 629 IN UINTN TokenNumber, 630 IN BOOLEAN Value 631 ); 632 633 /** 634 Callback on SET function prototype definition. 635 636 This notification function serves two purposes. 637 Firstly, it notifies the module which did the registration that the value 638 of this PCD token has been set. Secondly, it provides a mechanism for the 639 module that did the registration to intercept the set operation and override 640 the value that has been set, if necessary. After the invocation of the callback function, 641 TokenData will be used by PCD service DXE driver to modify the internal data in 642 PCD database. 643 644 @param[in] CallBackGuid The PCD token GUID being set. 645 @param[in] CallBackToken The PCD token number being set. 646 @param[in, out] TokenData A pointer to the token data being set. 647 @param[in] TokenDataSize The size, in bytes, of the data being set. 648 649 @retval VOID 650 651 **/ 652 typedef 653 VOID 654 (EFIAPI *PCD_PROTOCOL_CALLBACK)( 655 IN CONST EFI_GUID *CallBackGuid OPTIONAL, 656 IN UINTN CallBackToken, 657 IN OUT VOID *TokenData, 658 IN UINTN TokenDataSize 659 ); 660 661 /** 662 Specifies a function to be called anytime the value of a designated token is changed. 663 664 @param[in] TokenNumber The PCD token number. 665 @param[in] Guid The 128-bit unique value that designates the namespace from which to extract the value. 666 @param[in] CallBackFunction The function prototype called when the value associated with the CallBackToken is set. 667 668 @retval EFI_SUCCESS The PCD service has successfully established a call event 669 for the CallBackToken requested. 670 @retval EFI_NOT_FOUND The PCD service could not find the referenced token number. 671 672 **/ 673 typedef 674 EFI_STATUS 675 (EFIAPI *PCD_PROTOCOL_CALLBACK_ONSET)( 676 IN CONST EFI_GUID *Guid OPTIONAL, 677 IN UINTN TokenNumber, 678 IN PCD_PROTOCOL_CALLBACK CallBackFunction 679 ); 680 681 /** 682 Cancels a previously set callback function for a particular PCD token number. 683 684 @param[in] TokenNumber The PCD token number. 685 @param[in] Guid The 128-bit unique value that designates the namespace from which to extract the value. 686 @param[in] CallBackFunction The function prototype called when the value associated with the CallBackToken is set. 687 688 @retval EFI_SUCCESS The PCD service has successfully established a call event 689 for the CallBackToken requested. 690 @retval EFI_NOT_FOUND The PCD service could not find the referenced token number. 691 692 **/ 693 typedef 694 EFI_STATUS 695 (EFIAPI *PCD_PROTOCOL_CANCEL_CALLBACK)( 696 IN CONST EFI_GUID *Guid OPTIONAL, 697 IN UINTN TokenNumber, 698 IN PCD_PROTOCOL_CALLBACK CallBackFunction 699 ); 700 701 /** 702 Retrieves the next valid token number in a given namespace. 703 704 This is useful since the PCD infrastructure contains a sparse list of token numbers, 705 and one cannot a priori know what token numbers are valid in the database. 706 707 If TokenNumber is 0 and Guid is not NULL, then the first token from the token space specified by Guid is returned. 708 If TokenNumber is not 0 and Guid is not NULL, then the next token in the token space specified by Guid is returned. 709 If TokenNumber is 0 and Guid is NULL, then the first token in the default token space is returned. 710 If TokenNumber is not 0 and Guid is NULL, then the next token in the default token space is returned. 711 The token numbers in the default token space may not be related to token numbers in token spaces that are named by Guid. 712 If the next token number can be retrieved, then it is returned in TokenNumber, and EFI_SUCCESS is returned. 713 If TokenNumber represents the last token number in the token space specified by Guid, then EFI_NOT_FOUND is returned. 714 If TokenNumber is not present in the token space specified by Guid, then EFI_NOT_FOUND is returned. 715 716 717 @param[in] Guid The 128-bit unique value that designates the namespace from which to retrieve the next token. 718 This is an optional parameter that may be NULL. If this parameter is NULL, then a request is 719 being made to retrieve tokens from the default token space. 720 @param[in,out] TokenNumber 721 A pointer to the PCD token number to use to find the subsequent token number. 722 723 @retval EFI_SUCCESS The PCD service has retrieved the next valid token number. 724 @retval EFI_NOT_FOUND The PCD service could not find data from the requested token number. 725 726 **/ 727 typedef 728 EFI_STATUS 729 (EFIAPI *PCD_PROTOCOL_GET_NEXT_TOKEN)( 730 IN CONST EFI_GUID *Guid OPTIONAL, 731 IN OUT UINTN *TokenNumber 732 ); 733 734 /** 735 Retrieves the next valid PCD token namespace for a given namespace. 736 737 Gets the next valid token namespace for a given namespace. This is useful to traverse the valid 738 token namespaces on a platform. 739 740 @param[in, out] Guid An indirect pointer to EFI_GUID. On input it designates a known token namespace 741 from which the search will start. On output, it designates the next valid token 742 namespace on the platform. If *Guid is NULL, then the GUID of the first token 743 space of the current platform is returned. If the search cannot locate the next valid 744 token namespace, an error is returned and the value of *Guid is undefined. 745 746 @retval EFI_SUCCESS The PCD service retrieved the value requested. 747 @retval EFI_NOT_FOUND The PCD service could not find the next valid token namespace. 748 749 **/ 750 typedef 751 EFI_STATUS 752 (EFIAPI *PCD_PROTOCOL_GET_NEXT_TOKENSPACE)( 753 IN OUT CONST EFI_GUID **Guid 754 ); 755 756 /// 757 /// This service abstracts the ability to set/get Platform Configuration Database (PCD). 758 /// 759 typedef struct { 760 PCD_PROTOCOL_SET_SKU SetSku; 761 762 PCD_PROTOCOL_GET8 Get8; 763 PCD_PROTOCOL_GET16 Get16; 764 PCD_PROTOCOL_GET32 Get32; 765 PCD_PROTOCOL_GET64 Get64; 766 PCD_PROTOCOL_GET_POINTER GetPtr; 767 PCD_PROTOCOL_GET_BOOLEAN GetBool; 768 PCD_PROTOCOL_GET_SIZE GetSize; 769 770 PCD_PROTOCOL_GET_EX_8 Get8Ex; 771 PCD_PROTOCOL_GET_EX_16 Get16Ex; 772 PCD_PROTOCOL_GET_EX_32 Get32Ex; 773 PCD_PROTOCOL_GET_EX_64 Get64Ex; 774 PCD_PROTOCOL_GET_EX_POINTER GetPtrEx; 775 PCD_PROTOCOL_GET_EX_BOOLEAN GetBoolEx; 776 PCD_PROTOCOL_GET_EX_SIZE GetSizeEx; 777 778 PCD_PROTOCOL_SET8 Set8; 779 PCD_PROTOCOL_SET16 Set16; 780 PCD_PROTOCOL_SET32 Set32; 781 PCD_PROTOCOL_SET64 Set64; 782 PCD_PROTOCOL_SET_POINTER SetPtr; 783 PCD_PROTOCOL_SET_BOOLEAN SetBool; 784 785 PCD_PROTOCOL_SET_EX_8 Set8Ex; 786 PCD_PROTOCOL_SET_EX_16 Set16Ex; 787 PCD_PROTOCOL_SET_EX_32 Set32Ex; 788 PCD_PROTOCOL_SET_EX_64 Set64Ex; 789 PCD_PROTOCOL_SET_EX_POINTER SetPtrEx; 790 PCD_PROTOCOL_SET_EX_BOOLEAN SetBoolEx; 791 792 PCD_PROTOCOL_CALLBACK_ONSET CallbackOnSet; 793 PCD_PROTOCOL_CANCEL_CALLBACK CancelCallback; 794 PCD_PROTOCOL_GET_NEXT_TOKEN GetNextToken; 795 PCD_PROTOCOL_GET_NEXT_TOKENSPACE GetNextTokenSpace; 796 } PCD_PROTOCOL; 797 798 #endif 799