]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Universal/PCD/Pei/Service.h
MdePkg and MdeModulePkg Pcd: Add the new EFI_GET_PCD_INFO_PROTOCOL and EFI_GET_PCD_IN...
[mirror_edk2.git] / MdeModulePkg / Universal / PCD / Pei / Service.h
1 /** @file
2 The internal header file declares the private functions used by PeiPcd driver.
3
4 Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
9
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12
13 **/
14
15 #ifndef _PEI_PCD_SERVICE_H_
16 #define _PEI_PCD_SERVICE_H_
17
18 #include <PiPei.h>
19 #include <Ppi/ReadOnlyVariable2.h>
20 #include <Ppi/Pcd.h>
21 #include <Ppi/PiPcd.h>
22 #include <Ppi/PcdInfo.h>
23 #include <Ppi/PiPcdInfo.h>
24 #include <Guid/PcdDataBaseHobGuid.h>
25 #include <Guid/PcdDataBaseSignatureGuid.h>
26 #include <Library/DebugLib.h>
27 #include <Library/PeimEntryPoint.h>
28 #include <Library/BaseLib.h>
29 #include <Library/HobLib.h>
30 #include <Library/PeiServicesLib.h>
31 #include <Library/PcdLib.h>
32 #include <Library/BaseMemoryLib.h>
33 #include <Library/MemoryAllocationLib.h>
34
35 //
36 // Please make sure the PCD Serivce PEIM Version is consistent with
37 // the version of the generated PEIM PCD Database by build tool.
38 //
39 #define PCD_SERVICE_PEIM_VERSION 4
40
41 //
42 // PCD_PEI_SERVICE_DRIVER_VERSION is defined in Autogen.h.
43 //
44 #if (PCD_SERVICE_PEIM_VERSION != PCD_PEI_SERVICE_DRIVER_VERSION)
45 #error "Please make sure the version of PCD PEIM Service and the generated PCD PEI Database match."
46 #endif
47
48 /**
49 Retrieve additional information associated with a PCD token in the default token space.
50
51 This includes information such as the type of value the TokenNumber is associated with as well as possible
52 human readable name that is associated with the token.
53
54 @param[in] TokenNumber The PCD token number.
55 @param[out] PcdInfo The returned information associated with the requested TokenNumber.
56 The caller is responsible for freeing the buffer that is allocated by callee for PcdInfo->PcdName.
57
58 @retval EFI_SUCCESS The PCD information was returned successfully.
59 @retval EFI_NOT_FOUND The PCD service could not find the requested token number.
60 **/
61 EFI_STATUS
62 EFIAPI
63 PeiGetPcdInfoGetInfo (
64 IN UINTN TokenNumber,
65 OUT EFI_PCD_INFO *PcdInfo
66 );
67
68 /**
69 Retrieve additional information associated with a PCD token.
70
71 This includes information such as the type of value the TokenNumber is associated with as well as possible
72 human readable name that is associated with the token.
73
74 @param[in] Guid The 128-bit unique value that designates the namespace from which to extract the value.
75 @param[in] TokenNumber The PCD token number.
76 @param[out] PcdInfo The returned information associated with the requested TokenNumber.
77 The caller is responsible for freeing the buffer that is allocated by callee for PcdInfo->PcdName.
78
79 @retval EFI_SUCCESS The PCD information was returned successfully.
80 @retval EFI_NOT_FOUND The PCD service could not find the requested token number.
81 **/
82 EFI_STATUS
83 EFIAPI
84 PeiGetPcdInfoGetInfoEx (
85 IN CONST EFI_GUID *Guid,
86 IN UINTN TokenNumber,
87 OUT EFI_PCD_INFO *PcdInfo
88 );
89
90 /**
91 Retrieve the currently set SKU Id.
92
93 @return The currently set SKU Id. If the platform has not set at a SKU Id, then the
94 default SKU Id value of 0 is returned. If the platform has set a SKU Id, then the currently set SKU
95 Id is returned.
96 **/
97 UINTN
98 EFIAPI
99 PeiGetPcdInfoGetSku (
100 VOID
101 );
102
103 //
104 // PPI Interface Implementation Declaration.
105 //
106
107 /**
108 Sets the SKU value for subsequent calls to set or get PCD token values.
109
110 SetSku() sets the SKU Id to be used for subsequent calls to set or get PCD values.
111 SetSku() is normally called only once by the system.
112
113 For each item (token), the database can hold a single value that applies to all SKUs,
114 or multiple values, where each value is associated with a specific SKU Id. Items with multiple,
115 SKU-specific values are called SKU enabled.
116
117 The SKU Id of zero is reserved as a default. The valid SkuId range is 1 to 255.
118 For tokens that are not SKU enabled, the system ignores any set SKU Id and works with the
119 single value for that token. For SKU-enabled tokens, the system will use the SKU Id set by the
120 last call to SetSku(). If no SKU Id is set or the currently set SKU Id isn't valid for the specified token,
121 the system uses the default SKU Id. If the system attempts to use the default SKU Id and no value has been
122 set for that Id, the results are unpredictable.
123
124 @param[in] SkuId The SKU value that will be used when the PCD service will retrieve and
125 set values associated with a PCD token.
126
127 **/
128 VOID
129 EFIAPI
130 PeiPcdSetSku (
131 IN UINTN SkuId
132 );
133
134 /**
135 Retrieves an 8-bit value for a given PCD token.
136
137 Retrieves the current byte-sized value for a PCD token number.
138 If the TokenNumber is invalid, the results are unpredictable.
139
140 @param[in] TokenNumber The PCD token number.
141
142 @return The UINT8 value.
143
144 **/
145 UINT8
146 EFIAPI
147 PeiPcdGet8 (
148 IN UINTN TokenNumber
149 );
150
151 /**
152 Retrieves an 16-bit value for a given PCD token.
153
154 Retrieves the current 16-bits value for a PCD token number.
155 If the TokenNumber is invalid, the results are unpredictable.
156
157 @param[in] TokenNumber The PCD token number.
158
159 @return The UINT16 value.
160
161 **/
162 UINT16
163 EFIAPI
164 PeiPcdGet16 (
165 IN UINTN TokenNumber
166 );
167
168 /**
169 Retrieves an 32-bit value for a given PCD token.
170
171 Retrieves the current 32-bits value for a PCD token number.
172 If the TokenNumber is invalid, the results are unpredictable.
173
174 @param[in] TokenNumber The PCD token number.
175
176 @return The UINT32 value.
177
178 **/
179 UINT32
180 EFIAPI
181 PeiPcdGet32 (
182 IN UINTN TokenNumber
183 );
184
185 /**
186 Retrieves an 64-bit value for a given PCD token.
187
188 Retrieves the current 64-bits value for a PCD token number.
189 If the TokenNumber is invalid, the results are unpredictable.
190
191 @param[in] TokenNumber The PCD token number.
192
193 @return The UINT64 value.
194
195 **/
196 UINT64
197 EFIAPI
198 PeiPcdGet64 (
199 IN UINTN TokenNumber
200 );
201
202 /**
203 Retrieves a pointer to a value for a given PCD token.
204
205 Retrieves the current pointer to the buffer for a PCD token number.
206 Do not make any assumptions about the alignment of the pointer that
207 is returned by this function call. If the TokenNumber is invalid,
208 the results are unpredictable.
209
210 @param[in] TokenNumber The PCD token number.
211
212 @return The pointer to the buffer to be retrived.
213
214 **/
215 VOID *
216 EFIAPI
217 PeiPcdGetPtr (
218 IN UINTN TokenNumber
219 );
220
221 /**
222 Retrieves a Boolean value for a given PCD token.
223
224 Retrieves the current boolean value for a PCD token number.
225 Do not make any assumptions about the alignment of the pointer that
226 is returned by this function call. If the TokenNumber is invalid,
227 the results are unpredictable.
228
229 @param[in] TokenNumber The PCD token number.
230
231 @return The Boolean value.
232
233 **/
234 BOOLEAN
235 EFIAPI
236 PeiPcdGetBool (
237 IN UINTN TokenNumber
238 );
239
240 /**
241 Retrieves the size of the value for a given PCD token.
242
243 Retrieves the current size of a particular PCD token.
244 If the TokenNumber is invalid, the results are unpredictable.
245
246 @param[in] TokenNumber The PCD token number.
247
248 @return The size of the value for the PCD token.
249
250 **/
251 UINTN
252 EFIAPI
253 PeiPcdGetSize (
254 IN UINTN TokenNumber
255 );
256
257 /**
258 Retrieves an 8-bit value for a given PCD token.
259
260 Retrieves the 8-bit value of a particular PCD token.
261 If the TokenNumber is invalid or the token space
262 specified by Guid does not exist, the results are
263 unpredictable.
264
265 @param[in] Guid The token space for the token number.
266 @param[in] TokenNumber The PCD token number.
267
268 @return The size 8-bit value for the PCD token.
269
270 **/
271 UINT8
272 EFIAPI
273 PeiPcdGet8Ex (
274 IN CONST EFI_GUID *Guid,
275 IN UINTN TokenNumber
276 );
277
278 /**
279 Retrieves an 16-bit value for a given PCD token.
280
281 Retrieves the 16-bit value of a particular PCD token.
282 If the TokenNumber is invalid or the token space
283 specified by Guid does not exist, the results are
284 unpredictable.
285
286 @param[in] Guid The token space for the token number.
287 @param[in] TokenNumber The PCD token number.
288
289 @return The size 16-bit value for the PCD token.
290
291 **/
292 UINT16
293 EFIAPI
294 PeiPcdGet16Ex (
295 IN CONST EFI_GUID *Guid,
296 IN UINTN TokenNumber
297 );
298
299 /**
300 Retrieves an 32-bit value for a given PCD token.
301
302 Retrieves the 32-bit value of a particular PCD token.
303 If the TokenNumber is invalid or the token space
304 specified by Guid does not exist, the results are
305 unpredictable.
306
307 @param[in] Guid The token space for the token number.
308 @param[in] TokenNumber The PCD token number.
309
310 @return The size 32-bit value for the PCD token.
311
312 **/
313 UINT32
314 EFIAPI
315 PeiPcdGet32Ex (
316 IN CONST EFI_GUID *Guid,
317 IN UINTN TokenNumber
318 );
319
320 /**
321 Retrieves an 64-bit value for a given PCD token.
322
323 Retrieves the 64-bit value of a particular PCD token.
324 If the TokenNumber is invalid or the token space
325 specified by Guid does not exist, the results are
326 unpredictable.
327
328 @param[in] Guid The token space for the token number.
329 @param[in] TokenNumber The PCD token number.
330
331 @return The size 64-bit value for the PCD token.
332
333 **/
334 UINT64
335 EFIAPI
336 PeiPcdGet64Ex (
337 IN CONST EFI_GUID *Guid,
338 IN UINTN TokenNumber
339 );
340
341 /**
342 Retrieves a pointer to a value for a given PCD token.
343
344 Retrieves the current pointer to the buffer for a PCD token number.
345 Do not make any assumptions about the alignment of the pointer that
346 is returned by this function call. If the TokenNumber is invalid,
347 the results are unpredictable.
348
349 @param[in] Guid The token space for the token number.
350 @param[in] TokenNumber The PCD token number.
351
352 @return The pointer to the buffer to be retrived.
353
354 **/
355 VOID *
356 EFIAPI
357 PeiPcdGetPtrEx (
358 IN CONST EFI_GUID *Guid,
359 IN UINTN TokenNumber
360 );
361
362 /**
363 Retrieves an Boolean value for a given PCD token.
364
365 Retrieves the Boolean value of a particular PCD token.
366 If the TokenNumber is invalid or the token space
367 specified by Guid does not exist, the results are
368 unpredictable.
369
370 @param[in] Guid The token space for the token number.
371 @param[in] TokenNumber The PCD token number.
372
373 @return The size Boolean value for the PCD token.
374
375 **/
376 BOOLEAN
377 EFIAPI
378 PeiPcdGetBoolEx (
379 IN CONST EFI_GUID *Guid,
380 IN UINTN TokenNumber
381 );
382
383 /**
384 Retrieves the size of the value for a given PCD token.
385
386 Retrieves the current size of a particular PCD token.
387 If the TokenNumber is invalid, the results are unpredictable.
388
389 @param[in] Guid The token space for the token number.
390 @param[in] TokenNumber The PCD token number.
391
392 @return The size of the value for the PCD token.
393
394 **/
395 UINTN
396 EFIAPI
397 PeiPcdGetSizeEx (
398 IN CONST EFI_GUID *Guid,
399 IN UINTN TokenNumber
400 );
401
402 /**
403 Sets an 8-bit value for a given PCD token.
404
405 When the PCD service sets a value, it will check to ensure that the
406 size of the value being set is compatible with the Token's existing definition.
407 If it is not, an error will be returned.
408
409 @param[in] TokenNumber The PCD token number.
410 @param[in] Value The value to set for the PCD token.
411
412 @retval EFI_SUCCESS Procedure returned successfully.
413 @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data
414 being set was incompatible with a call to this function.
415 Use GetSize() to retrieve the size of the target data.
416 @retval EFI_NOT_FOUND The PCD service could not find the requested token number.
417
418 **/
419 EFI_STATUS
420 EFIAPI
421 PeiPcdSet8 (
422 IN UINTN TokenNumber,
423 IN UINT8 Value
424 );
425
426 /**
427 Sets an 16-bit value for a given PCD token.
428
429 When the PCD service sets a value, it will check to ensure that the
430 size of the value being set is compatible with the Token's existing definition.
431 If it is not, an error will be returned.
432
433 @param[in] TokenNumber The PCD token number.
434 @param[in] Value The value to set for the PCD token.
435
436 @retval EFI_SUCCESS Procedure returned successfully.
437 @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data
438 being set was incompatible with a call to this function.
439 Use GetSize() to retrieve the size of the target data.
440 @retval EFI_NOT_FOUND The PCD service could not find the requested token number.
441
442 **/
443 EFI_STATUS
444 EFIAPI
445 PeiPcdSet16 (
446 IN UINTN TokenNumber,
447 IN UINT16 Value
448 );
449
450 /**
451 Sets an 32-bit value for a given PCD token.
452
453 When the PCD service sets a value, it will check to ensure that the
454 size of the value being set is compatible with the Token's existing definition.
455 If it is not, an error will be returned.
456
457 @param[in] TokenNumber The PCD token number.
458 @param[in] Value The value to set for the PCD token.
459
460 @retval EFI_SUCCESS Procedure returned successfully.
461 @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data
462 being set was incompatible with a call to this function.
463 Use GetSize() to retrieve the size of the target data.
464 @retval EFI_NOT_FOUND The PCD service could not find the requested token number.
465
466 **/
467 EFI_STATUS
468 EFIAPI
469 PeiPcdSet32 (
470 IN UINTN TokenNumber,
471 IN UINT32 Value
472 );
473
474 /**
475 Sets an 64-bit value for a given PCD token.
476
477 When the PCD service sets a value, it will check to ensure that the
478 size of the value being set is compatible with the Token's existing definition.
479 If it is not, an error will be returned.
480
481 @param[in] TokenNumber The PCD token number.
482 @param[in] Value The value to set for the PCD token.
483
484 @retval EFI_SUCCESS Procedure returned successfully.
485 @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data
486 being set was incompatible with a call to this function.
487 Use GetSize() to retrieve the size of the target data.
488 @retval EFI_NOT_FOUND The PCD service could not find the requested token number.
489
490 **/
491 EFI_STATUS
492 EFIAPI
493 PeiPcdSet64 (
494 IN UINTN TokenNumber,
495 IN UINT64 Value
496 );
497
498 /**
499 Sets a value of a specified size 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] TokenNumber The PCD token number.
506 @param[in, out] SizeOfBuffer A pointer to the length of the value being set for the PCD token.
507 On input, if the SizeOfValue is greater than the maximum size supported
508 for this TokenNumber then the output value of SizeOfValue will reflect
509 the maximum size supported for this TokenNumber.
510 @param[in] Buffer The buffer to set for the PCD token.
511
512 @retval EFI_SUCCESS Procedure returned successfully.
513 @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data
514 being set was incompatible with a call to this function.
515 Use GetSize() to retrieve the size of the target data.
516 @retval EFI_NOT_FOUND The PCD service could not find the requested token number.
517
518 **/
519 EFI_STATUS
520 EFIAPI
521 PeiPcdSetPtr (
522 IN UINTN TokenNumber,
523 IN OUT UINTN *SizeOfBuffer,
524 IN VOID *Buffer
525 );
526
527 /**
528 Sets an Boolean value for a given PCD token.
529
530 When the PCD service sets a value, it will check to ensure that the
531 size of the value being set is compatible with the Token's existing definition.
532 If it is not, an error will be returned.
533
534 @param[in] TokenNumber The PCD token number.
535 @param[in] Value The value to set for the PCD token.
536
537 @retval EFI_SUCCESS Procedure returned successfully.
538 @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data
539 being set was incompatible with a call to this function.
540 Use GetSize() to retrieve the size of the target data.
541 @retval EFI_NOT_FOUND The PCD service could not find the requested token number.
542
543 **/
544 EFI_STATUS
545 EFIAPI
546 PeiPcdSetBool (
547 IN UINTN TokenNumber,
548 IN BOOLEAN Value
549 );
550
551 /**
552 Sets an 8-bit value for a given PCD token.
553
554 When the PCD service sets a value, it will check to ensure that the
555 size of the value being set is compatible with the Token's existing definition.
556 If it is not, an error will be returned.
557
558 @param[in] Guid The 128-bit unique value that designates the namespace from which to extract the value.
559 @param[in] TokenNumber The PCD token number.
560 @param[in] Value The value to set for the PCD token.
561
562 @retval EFI_SUCCESS Procedure returned successfully.
563 @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data
564 being set was incompatible with a call to this function.
565 Use GetSize() to retrieve the size of the target data.
566 @retval EFI_NOT_FOUND The PCD service could not find the requested token number.
567
568 **/
569 EFI_STATUS
570 EFIAPI
571 PeiPcdSet8Ex (
572 IN CONST EFI_GUID *Guid,
573 IN UINTN TokenNumber,
574 IN UINT8 Value
575 );
576
577 /**
578 Sets an 16-bit value for a given PCD token.
579
580 When the PCD service sets a value, it will check to ensure that the
581 size of the value being set is compatible with the Token's existing definition.
582 If it is not, an error will be returned.
583
584 @param[in] Guid The 128-bit unique value that designates the namespace from which to extract the value.
585 @param[in] TokenNumber The PCD token number.
586 @param[in] Value The value to set for the PCD token.
587
588 @retval EFI_SUCCESS Procedure returned successfully.
589 @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data
590 being set was incompatible with a call to this function.
591 Use GetSize() to retrieve the size of the target data.
592 @retval EFI_NOT_FOUND The PCD service could not find the requested token number.
593
594 **/
595 EFI_STATUS
596 EFIAPI
597 PeiPcdSet16Ex (
598 IN CONST EFI_GUID *Guid,
599 IN UINTN TokenNumber,
600 IN UINT16 Value
601 );
602
603 /**
604 Sets an 32-bit value for a given PCD token.
605
606 When the PCD service sets a value, it will check to ensure that the
607 size of the value being set is compatible with the Token's existing definition.
608 If it is not, an error will be returned.
609
610 @param[in] Guid The 128-bit unique value that designates the namespace from which to extract the value.
611 @param[in] TokenNumber The PCD token number.
612 @param[in] Value The value to set for the PCD token.
613
614 @retval EFI_SUCCESS Procedure returned successfully.
615 @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data
616 being set was incompatible with a call to this function.
617 Use GetSize() to retrieve the size of the target data.
618 @retval EFI_NOT_FOUND The PCD service could not find the requested token number.
619
620 **/
621 EFI_STATUS
622 EFIAPI
623 PeiPcdSet32Ex (
624 IN CONST EFI_GUID *Guid,
625 IN UINTN TokenNumber,
626 IN UINT32 Value
627 );
628
629 /**
630 Sets an 64-bit value for a given PCD token.
631
632 When the PCD service sets a value, it will check to ensure that the
633 size of the value being set is compatible with the Token's existing definition.
634 If it is not, an error will be returned.
635
636 @param[in] Guid The 128-bit unique value that designates the namespace from which to extract the value.
637 @param[in] TokenNumber The PCD token number.
638 @param[in] Value The value to set for the PCD token.
639
640 @retval EFI_SUCCESS Procedure returned successfully.
641 @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data
642 being set was incompatible with a call to this function.
643 Use GetSize() to retrieve the size of the target data.
644 @retval EFI_NOT_FOUND The PCD service could not find the requested token number.
645
646 **/
647 EFI_STATUS
648 EFIAPI
649 PeiPcdSet64Ex (
650 IN CONST EFI_GUID *Guid,
651 IN UINTN TokenNumber,
652 IN UINT64 Value
653 );
654
655 /**
656 Sets a value of a specified size for a given PCD token.
657
658 When the PCD service sets a value, it will check to ensure that the
659 size of the value being set is compatible with the Token's existing definition.
660 If it is not, an error will be returned.
661
662 @param[in] Guid The 128-bit unique value that designates the namespace from which to extract the value.
663 @param[in] TokenNumber The PCD token number.
664 @param[in, out] SizeOfBuffer A pointer to the length of the value being set for the PCD token.
665 On input, if the SizeOfValue is greater than the maximum size supported
666 for this TokenNumber then the output value of SizeOfValue will reflect
667 the maximum size supported for this TokenNumber.
668 @param[in] Buffer The buffer to set for the PCD token.
669
670 @retval EFI_SUCCESS Procedure returned successfully.
671 @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data
672 being set was incompatible with a call to this function.
673 Use GetSize() to retrieve the size of the target data.
674 @retval EFI_NOT_FOUND The PCD service could not find the requested token number.
675
676 **/
677 EFI_STATUS
678 EFIAPI
679 PeiPcdSetPtrEx (
680 IN CONST EFI_GUID *Guid,
681 IN UINTN TokenNumber,
682 IN OUT UINTN *SizeOfBuffer,
683 IN VOID *Buffer
684 );
685
686 /**
687 Sets an Boolean value for a given PCD token.
688
689 When the PCD service sets a value, it will check to ensure that the
690 size of the value being set is compatible with the Token's existing definition.
691 If it is not, an error will be returned.
692
693 @param[in] Guid The 128-bit unique value that designates the namespace from which to extract the value.
694 @param[in] TokenNumber The PCD token number.
695 @param[in] Value The value to set for the PCD token.
696
697 @retval EFI_SUCCESS Procedure returned successfully.
698 @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data
699 being set was incompatible with a call to this function.
700 Use GetSize() to retrieve the size of the target data.
701 @retval EFI_NOT_FOUND The PCD service could not find the requested token number.
702
703 **/
704 EFI_STATUS
705 EFIAPI
706 PeiPcdSetBoolEx (
707 IN CONST EFI_GUID *Guid,
708 IN UINTN TokenNumber,
709 IN BOOLEAN Value
710 );
711
712 /**
713 Specifies a function to be called anytime the value of a designated token is changed.
714
715 @param[in] Guid The 128-bit unique value that designates the namespace from which to extract the value.
716 @param[in] TokenNumber The PCD token number.
717 @param[in] CallBackFunction The function prototype called when the value associated with the CallBackToken is set.
718
719 @retval EFI_SUCCESS The PCD service has successfully established a call event
720 for the CallBackToken requested.
721 @retval EFI_NOT_FOUND The PCD service could not find the referenced token number.
722
723 **/
724 EFI_STATUS
725 EFIAPI
726 PeiRegisterCallBackOnSet (
727 IN CONST EFI_GUID *Guid, OPTIONAL
728 IN UINTN TokenNumber,
729 IN PCD_PPI_CALLBACK CallBackFunction
730 );
731
732 /**
733 Cancels a previously set callback function for a particular PCD token number.
734
735 @param [in] Guid The 128-bit unique value that designates the namespace from which to extract the value.
736 @param [in] TokenNumber The PCD token number.
737 @param [in] CallBackFunction The function prototype called when the value associated with the CallBackToken is set.
738
739 @retval EFI_SUCCESS The PCD service has successfully established a call event
740 for the CallBackToken requested.
741 @retval EFI_NOT_FOUND The PCD service could not find the referenced token number.
742
743 **/
744 EFI_STATUS
745 EFIAPI
746 PcdUnRegisterCallBackOnSet (
747 IN CONST EFI_GUID *Guid, OPTIONAL
748 IN UINTN TokenNumber,
749 IN PCD_PPI_CALLBACK CallBackFunction
750 );
751
752 /**
753 Retrieves the next valid token number in a given namespace.
754
755 This is useful since the PCD infrastructure contains a sparse list of token numbers,
756 and one cannot a priori know what token numbers are valid in the database.
757
758 If TokenNumber is 0 and Guid is not NULL, then the first token from the token space specified by Guid is returned.
759 If TokenNumber is not 0 and Guid is not NULL, then the next token in the token space specified by Guid is returned.
760 If TokenNumber is 0 and Guid is NULL, then the first token in the default token space is returned.
761 If TokenNumber is not 0 and Guid is NULL, then the next token in the default token space is returned.
762 The token numbers in the default token space may not be related to token numbers in token spaces that are named by Guid.
763 If the next token number can be retrieved, then it is returned in TokenNumber, and EFI_SUCCESS is returned.
764 If TokenNumber represents the last token number in the token space specified by Guid, then EFI_NOT_FOUND is returned.
765 If TokenNumber is not present in the token space specified by Guid, then EFI_NOT_FOUND is returned.
766
767
768 @param[in] Guid The 128-bit unique value that designates the namespace from which to extract the value.
769 This is an optional parameter that may be NULL. If this parameter is NULL, then a request
770 is being made to retrieve tokens from the default token space.
771 @param[in, out] TokenNumber A pointer to the PCD token number to use to find the subsequent token number.
772
773 @retval EFI_SUCCESS The PCD service has retrieved the next valid token number.
774 Or the input token number is already the last valid token number in the PCD database.
775 In the later case, *TokenNumber is updated with the value of 0.
776 @retval EFI_NOT_FOUND If this input token number and token namespace does not exist on the platform.
777
778 **/
779 EFI_STATUS
780 EFIAPI
781 PeiPcdGetNextToken (
782 IN CONST EFI_GUID *Guid, OPTIONAL
783 IN OUT UINTN *TokenNumber
784 );
785
786 /**
787 Retrieves the next valid PCD token namespace for a given namespace.
788
789 @param[in, out] Guid An indirect pointer to EFI_GUID. On input it designates
790 a known token namespace from which the search will start. On output,
791 it designates the next valid token namespace on the platform. If the input
792 token namespace does not exist on the platform, an error is returned and
793 the value of *Guid is undefined. If *Guid is NULL, then the GUID of the
794 first token space of the current platform is assigned to *Guid the function
795 return EFI_SUCCESS. If *Guid is NULL and there is no namespace exist in
796 the platform other than the default (NULL) tokennamespace, *Guid is unchanged
797 and the function return EFI_SUCCESS. If this input token namespace is the last
798 namespace on the platform, *Guid will be assigned to NULL and the function return
799 EFI_SUCCESS.
800
801 @retval EFI_SUCCESS The PCD service retrieved the next valid token space Guid.
802 Or the input token space Guid is already the last valid token space Guid
803 in the PCD database. In the later case, *Guid is updated with the value of NULL.
804 @retval EFI_NOT_FOUND If the input token namespace does not exist on the platform.
805
806 **/
807 EFI_STATUS
808 EFIAPI
809 PeiPcdGetNextTokenSpace (
810 IN OUT CONST EFI_GUID **Guid
811 );
812
813 /**
814 Retrieve additional information associated with a PCD token.
815
816 This includes information such as the type of value the TokenNumber is associated with as well as possible
817 human readable name that is associated with the token.
818
819 @param[in] Guid The 128-bit unique value that designates the namespace from which to extract the value.
820 @param[in] TokenNumber The PCD token number.
821 @param[out] PcdInfo The returned information associated with the requested TokenNumber.
822 The caller is responsible for freeing the buffer that is allocated by callee for PcdInfo->PcdName.
823
824 @retval EFI_SUCCESS The PCD information was returned successfully
825 @retval EFI_NOT_FOUND The PCD service could not find the requested token number.
826 **/
827 EFI_STATUS
828 EFIAPI
829 PeiGetPcdInfo (
830 IN CONST EFI_GUID *Guid,
831 IN UINTN TokenNumber,
832 OUT EFI_PCD_INFO *PcdInfo
833 );
834
835 /* Internal Function definitions */
836 /**
837 Get PCD database from GUID HOB in PEI phase.
838
839 @return Pointer to PCD database.
840
841 **/
842 PEI_PCD_DATABASE *
843 GetPcdDatabase (
844 VOID
845 );
846
847 /**
848 Wrapper function for setting non-pointer type value for a PCD entry.
849
850 @param TokenNumber Pcd token number autogenerated by build tools.
851 @param Data Value want to be set for PCD entry
852 @param Size Size of value.
853
854 @return status of SetWorker.
855
856 **/
857 EFI_STATUS
858 SetValueWorker (
859 IN UINTN TokenNumber,
860 IN VOID *Data,
861 IN UINTN Size
862 );
863
864 /**
865 Set value for an PCD entry
866
867 @param TokenNumber Pcd token number autogenerated by build tools.
868 @param Data Value want to be set for PCD entry
869 @param Size Size of value.
870 @param PtrType If TRUE, the type of PCD entry's value is Pointer.
871 If False, the type of PCD entry's value is not Pointer.
872
873 @retval EFI_INVALID_PARAMETER If this PCD type is VPD, VPD PCD can not be set.
874 @retval EFI_INVALID_PARAMETER If Size can not be set to size table.
875 @retval EFI_INVALID_PARAMETER If Size of non-Ptr type PCD does not match the size information in PCD database.
876 @retval EFI_NOT_FOUND If value type of PCD entry is intergrate, but not in
877 range of UINT8, UINT16, UINT32, UINT64
878 @retval EFI_NOT_FOUND Can not find the PCD type according to token number.
879 **/
880 EFI_STATUS
881 SetWorker (
882 IN UINTN TokenNumber,
883 IN VOID *Data,
884 IN OUT UINTN *Size,
885 IN BOOLEAN PtrType
886 );
887
888 /**
889 Wrapper function for set PCD value for non-Pointer type dynamic-ex PCD.
890
891 @param ExTokenNumber Token number for dynamic-ex PCD.
892 @param Guid Token space guid for dynamic-ex PCD.
893 @param Data Value want to be set.
894 @param SetSize The size of value.
895
896 @return status of ExSetWorker().
897
898 **/
899 EFI_STATUS
900 ExSetValueWorker (
901 IN UINTN ExTokenNumber,
902 IN CONST EFI_GUID *Guid,
903 IN VOID *Data,
904 IN UINTN Size
905 );
906
907 /**
908 Set value for a dynamic PCD entry.
909
910 This routine find the local token number according to dynamic-ex PCD's token
911 space guid and token number firstly, and invoke callback function if this PCD
912 entry registered callback function. Finally, invoken general SetWorker to set
913 PCD value.
914
915 @param ExTokenNumber Dynamic-ex PCD token number.
916 @param Guid Token space guid for dynamic-ex PCD.
917 @param Data PCD value want to be set
918 @param SetSize Size of value.
919 @param PtrType If TRUE, this PCD entry is pointer type.
920 If FALSE, this PCD entry is not pointer type.
921
922 @return status of SetWorker().
923
924 **/
925 EFI_STATUS
926 ExSetWorker (
927 IN UINTN ExTokenNumber,
928 IN CONST EFI_GUID *Guid,
929 IN VOID *Data,
930 IN OUT UINTN *Size,
931 IN BOOLEAN PtrType
932 );
933
934 /**
935 Get the PCD entry pointer in PCD database.
936
937 This routine will visit PCD database to find the PCD entry according to given
938 token number. The given token number is autogened by build tools and it will be
939 translated to local token number. Local token number contains PCD's type and
940 offset of PCD entry in PCD database.
941
942 @param TokenNumber Token's number, it is autogened by build tools
943 @param GetSize The size of token's value
944
945 @return PCD entry pointer in PCD database
946
947 **/
948 VOID *
949 GetWorker (
950 IN UINTN TokenNumber,
951 IN UINTN GetSize
952 );
953
954 /**
955 Wrapper function for get PCD value for dynamic-ex PCD.
956
957 @param Guid Token space guid for dynamic-ex PCD.
958 @param ExTokenNumber Token number for dyanmic-ex PCD.
959 @param GetSize The size of dynamic-ex PCD value.
960
961 @return PCD entry in PCD database.
962
963 **/
964 VOID *
965 ExGetWorker (
966 IN CONST EFI_GUID *Guid,
967 IN UINTN ExTokenNumber,
968 IN UINTN GetSize
969 );
970
971 typedef struct {
972 UINTN TokenNumber;
973 UINTN Size;
974 UINT32 LocalTokenNumberAlias;
975 } EX_PCD_ENTRY_ATTRIBUTE;
976
977 /**
978 Get Token Number according to dynamic-ex PCD's {token space guid:token number}
979
980 A dynamic-ex type PCD, developer must provide pair of token space guid: token number
981 in DEC file. PCD database maintain a mapping table that translate pair of {token
982 space guid: token number} to Token Number.
983
984 @param Guid Token space guid for dynamic-ex PCD entry.
985 @param ExTokenNumber Token number for dynamic-ex PCD.
986
987 @return Token Number for dynamic-ex PCD.
988
989 **/
990 UINTN
991 GetExPcdTokenNumber (
992 IN CONST EFI_GUID *Guid,
993 IN UINTN ExTokenNumber
994 );
995
996 /**
997 Find the local token number according to system SKU ID.
998
999 @param LocalTokenNumber PCD token number
1000 @param Size The size of PCD entry.
1001
1002 @return Token number according to system SKU ID.
1003
1004 **/
1005 UINT32
1006 GetSkuEnabledTokenNumber (
1007 UINT32 LocalTokenNumber,
1008 UINTN Size
1009 );
1010
1011 /**
1012 The function registers the CallBackOnSet fucntion
1013 according to TokenNumber and EFI_GUID space.
1014
1015 @param TokenNumber The token number.
1016 @param Guid The GUID space.
1017 @param CallBackFunction The Callback function to be registered.
1018 @param Register To register or unregister the callback function.
1019
1020 @retval EFI_SUCCESS If the Callback function is registered.
1021 @retval EFI_NOT_FOUND If the PCD Entry is not found according to Token Number and GUID space.
1022 @retval EFI_OUT_OF_RESOURCES If the callback function can't be registered because there is not free
1023 slot left in the CallbackFnTable.
1024 **/
1025 EFI_STATUS
1026 PeiRegisterCallBackWorker (
1027 IN UINTN TokenNumber,
1028 IN CONST EFI_GUID *Guid, OPTIONAL
1029 IN PCD_PPI_CALLBACK CallBackFunction,
1030 IN BOOLEAN Register
1031 );
1032
1033 /**
1034 The function builds the PCD database.
1035
1036 @param FileHandle Handle of the file the external PCD database binary located.
1037
1038 @return Pointer to PCD database.
1039
1040 **/
1041 PEI_PCD_DATABASE *
1042 BuildPcdDatabase (
1043 IN EFI_PEI_FILE_HANDLE FileHandle
1044 );
1045
1046 /**
1047 Get SKU ID tabble from PCD database.
1048
1049 @param LocalTokenNumberTableIdx Index of local token number in token number table.
1050 @param Database PCD Database in PEI phase
1051
1052 @return Pointer to SKU ID array table
1053
1054 **/
1055 SKU_ID *
1056 GetSkuIdArray (
1057 IN UINTN LocalTokenNumberTableIdx,
1058 IN PEI_PCD_DATABASE *Database
1059 );
1060
1061 /**
1062 Get index of PCD entry in size table.
1063
1064 @param LocalTokenNumberTableIdx Index of this PCD in local token number table.
1065 @param Database Pointer to PCD database.
1066
1067 @return index of PCD entry in size table.
1068
1069 **/
1070 UINTN
1071 GetSizeTableIndex (
1072 IN UINTN LocalTokenNumberTableIdx,
1073 IN PEI_PCD_DATABASE *Database
1074 );
1075
1076 /**
1077 Get PCD value's size for POINTER type PCD.
1078
1079 The POINTER type PCD's value will be stored into a buffer in specificed size.
1080 The max size of this PCD's value is described in PCD's definition in DEC file.
1081
1082 @param LocalTokenNumberTableIdx Index of PCD token number in PCD token table
1083 @param MaxSize Maxmium size of PCD's value
1084 @param Database Pcd database in PEI phase.
1085
1086 @return PCD value's size for POINTER type PCD.
1087
1088 **/
1089 UINTN
1090 GetPtrTypeSize (
1091 IN UINTN LocalTokenNumberTableIdx,
1092 OUT UINTN *MaxSize,
1093 IN PEI_PCD_DATABASE *Database
1094 );
1095
1096 /**
1097 Set PCD value's size for POINTER type PCD.
1098
1099 The POINTER type PCD's value will be stored into a buffer in specificed size.
1100 The max size of this PCD's value is described in PCD's definition in DEC file.
1101
1102 @param LocalTokenNumberTableIdx Index of PCD token number in PCD token table
1103 @param CurrentSize Maxmium size of PCD's value
1104 @param Database Pcd database in PEI phase.
1105
1106 @retval TRUE Success to set PCD's value size, which is not exceed maxmium size
1107 @retval FALSE Fail to set PCD's value size, which maybe exceed maxmium size
1108
1109 **/
1110 BOOLEAN
1111 SetPtrTypeSize (
1112 IN UINTN LocalTokenNumberTableIdx,
1113 IN OUT UINTN *CurrentSize,
1114 IN PEI_PCD_DATABASE *Database
1115 );
1116
1117 #endif
1118