]> git.proxmox.com Git - mirror_edk2.git/blob - MdePkg/Include/Protocol/Pcd.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / MdePkg / Include / Protocol / Pcd.h
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