]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/contrib/edk2/Include/Library/PcdLib.h
dts: Update our copy for arm, arm64 and riscv dts to Linux 5.5
[FreeBSD/FreeBSD.git] / sys / contrib / edk2 / Include / Library / PcdLib.h
1 /** @file
2   Provides library services to get and set Platform Configuration Database entries.
3
4   PCD Library Class provides a PCD usage macro interface for all PCD types.
5   It should be included in any module that uses PCD. If a module uses dynamic/dynamicex
6   PCD, module should be linked to a PEIM/DXE library instance to access that PCD.
7   If a module uses PatchableInModule type PCD, it also needs the library instance to produce
8   LibPatchPcdSetPtr() interface. For FeatureFlag/Fixed PCD, the macro interface is
9   translated to a variable or macro that is auto-generated by build tool in
10   module's autogen.h/autogen.c.
11   The PcdGetXX(), PcdSetXX(), PcdToken(), and PcdGetNextTokenSpace() operations are 
12   only available prior to ExitBootServices().  If access to PCD values are required 
13   at runtime, then their values must be collected prior to ExitBootServices().
14   There are no restrictions on the use of FeaturePcd(), FixedPcdGetXX(),
15   PatchPcdGetXX(), and PatchPcdSetXX().
16
17 Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
18 This program and the accompanying materials
19 are licensed and made available under the terms and conditions of the BSD License
20 which accompanies this distribution.  The full text of the license may be found at
21 http://opensource.org/licenses/bsd-license.php
22
23 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
24 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
25
26 **/
27
28 #ifndef __PCD_LIB_H__
29 #define __PCD_LIB_H__
30
31
32 /**
33   Retrieves a token number based on a token name.
34
35   Returns the token number associated with the PCD token specified by TokenName.
36   If TokenName is not a valid token in the token space, then the module will not build.
37
38   @param   TokenName  The name of the PCD token to retrieve the token number for.
39
40   @return  The token number associated with the PCD.
41
42 **/
43 #define PcdToken(TokenName)                 _PCD_TOKEN_##TokenName
44
45
46 /**
47   Retrieves a Boolean PCD feature flag based on a token name.
48
49   Returns the Boolean value for the PCD feature flag specified by TokenName.
50   If TokenName is not a valid token in the token space, then the module will not build.
51   If TokenName is not a feature flag PCD, then the module will not build.
52
53   @param   TokenName  The name of the PCD token to retrieve a current value for.
54
55   @return  Boolean value for the PCD feature flag.
56
57 **/
58 #define FeaturePcdGet(TokenName)            _PCD_GET_MODE_BOOL_##TokenName
59
60
61 /**
62   Retrieves an 8-bit fixed PCD token value based on a token name.
63
64   Returns the 8-bit value for the token specified by TokenName.
65   If TokenName is not a valid token in the token space, then the module will not build.
66   If TokenName is not a fixed at build PCD, then the module will not build.
67
68   @param   TokenName  The name of the PCD token to retrieve a current value for.
69
70   @return  8-bit value for the token specified by TokenName.
71
72 **/
73 #define FixedPcdGet8(TokenName)             _PCD_VALUE_##TokenName
74
75
76 /**
77   Retrieves a 16-bit fixed PCD token value based on a token name.
78
79   Returns the 16-bit value for the token specified by TokenName.
80   If TokenName is not a valid token in the token space, then the module will not build.
81   If TokenName is not a fixed at build PCD, then the module will not build.
82
83   @param   TokenName  The name of the PCD token to retrieve a current value for.
84
85   @return  16-bit value for the token specified by TokenName.
86
87 **/
88 #define FixedPcdGet16(TokenName)            _PCD_VALUE_##TokenName
89
90
91 /**
92   Retrieves a 32-bit fixed PCD token value based on a token name.
93
94   Returns the 32-bit value for the token specified by TokenName.
95   If TokenName is not a valid token in the token space, then the module will not build.
96   If TokenName is not a fixed at build PCD, then the module will not build.
97
98   @param   TokenName  The name of the PCD token to retrieve a current value for.
99
100   @return  32-bit value for the token specified by TokenName.
101
102 **/
103 #define FixedPcdGet32(TokenName)            _PCD_VALUE_##TokenName
104
105
106 /**
107   Retrieves a 64-bit fixed PCD token value based on a token name.
108
109   Returns the 64-bit value for the token specified by TokenName.
110   If TokenName is not a valid token in the token space, then the module will not build.
111   If TokenName is not a fixed at build PCD, then the module will not build.
112
113   @param   TokenName  The name of the PCD token to retrieve a current value for.
114
115   @return  64-bit value for the token specified by TokenName.
116
117 **/
118 #define FixedPcdGet64(TokenName)            _PCD_VALUE_##TokenName
119
120
121 /**
122   Retrieves a Boolean fixed PCD token value based on a token name.
123
124   Returns the Boolean value for the token specified by TokenName.
125   If TokenName is not a valid token in the token space, then the module will not build.
126   If TokenName is not a fixed at build PCD, then the module will not build.
127
128   @param   TokenName  The name of the PCD token to retrieve a current value for.
129
130   @return  The Boolean value for the token. 
131
132 **/
133 #define FixedPcdGetBool(TokenName)          _PCD_VALUE_##TokenName
134
135
136 /**
137   Retrieves a pointer to a fixed PCD token buffer based on a token name.
138
139   Returns a pointer to the buffer for the token specified by TokenName.
140   If TokenName is not a valid token in the token space, then the module will not build.
141   If TokenName is not a fixed at build PCD, then the module will not build.
142
143   @param   TokenName  The name of the PCD token to retrieve a current value for.
144
145   @return  A pointer to the buffer. 
146
147 **/
148 #define FixedPcdGetPtr(TokenName)           ((VOID *)_PCD_VALUE_##TokenName)
149
150
151 /**
152   Retrieves an 8-bit binary patchable PCD token value based on a token name.
153
154   Returns the 8-bit value for the token specified by TokenName.
155   If TokenName is not a valid token in the token space, then the module will not build.
156   If TokenName is not a patchable in module PCD, then the module will not build.
157
158   @param   TokenName  The name of the PCD token to retrieve a current value for.
159
160   @return  An 8-bit binary patchable PCD token value.
161
162 **/
163 #define PatchPcdGet8(TokenName)             _gPcd_BinaryPatch_##TokenName
164
165 /**
166   Retrieves a 16-bit binary patchable PCD token value based on a token name.
167
168   Returns the 16-bit value for the token specified by TokenName.
169   If TokenName is not a valid token in the token space, then the module will not build.
170   If TokenName is not a patchable in module PCD, then the module will not build.
171
172   @param   TokenName  The name of the PCD token to retrieve a current value for.
173
174   @return  A 16-bit binary patchable PCD token value.
175
176 **/
177 #define PatchPcdGet16(TokenName)            _gPcd_BinaryPatch_##TokenName
178
179
180 /**
181   Retrieves a 32-bit binary patchable PCD token value based on a token name.
182
183   Returns the 32-bit value for the token specified by TokenName.
184   If TokenName is not a valid token in the token space, then the module will not build.
185   If TokenName is not a patchable in module PCD, then the module will not build.
186
187   @param   TokenName  The name of the PCD token to retrieve a current value for.
188
189   @return  A 32-bit binary patchable PCD token value.
190
191 **/
192 #define PatchPcdGet32(TokenName)            _gPcd_BinaryPatch_##TokenName
193
194
195 /**
196   Retrieves a 64-bit binary patchable PCD token value based on a token name.
197
198   Returns the 64-bit value for the token specified by TokenName.
199   If TokenName is not a valid token in the token space, then the module will not build.
200   If TokenName is not a patchable in module PCD, then the module will not build.
201
202   @param   TokenName  The name of the PCD token to retrieve a current value for.
203
204   @return  A 64-bit binary patchable PCD token value.
205
206 **/
207 #define PatchPcdGet64(TokenName)            _gPcd_BinaryPatch_##TokenName
208
209
210 /**
211   Retrieves a Boolean binary patchable PCD token value based on a token name.
212
213   Returns the Boolean value for the token specified by TokenName.
214   If TokenName is not a valid token in the token space, then the module will not build.
215   If TokenName is not a patchable in module PCD, then the module will not build.
216
217   @param   TokenName  The name of the PCD token to retrieve a current value for.
218
219   @return  The Boolean value for the token.
220
221 **/
222 #define PatchPcdGetBool(TokenName)          _gPcd_BinaryPatch_##TokenName
223
224
225 /**
226   Retrieves a pointer to a binary patchable PCD token buffer based on a token name.
227
228   Returns a pointer to the buffer for the token specified by TokenName.
229   If TokenName is not a valid token in the token space, then the module will not build.
230   If TokenName is not a patchable in module PCD, then the module will not build.
231
232   @param   TokenName  The name of the PCD token to retrieve a current value for.
233
234   @return  A pointer to the buffer for the token.
235
236 **/
237 #define PatchPcdGetPtr(TokenName)           ((VOID *)_gPcd_BinaryPatch_##TokenName)
238
239
240 /**
241   Sets an 8-bit binary patchable PCD token value based on a token name.
242
243   Sets the 8-bit value for the token specified by TokenName. Value is returned.
244   If TokenName is not a valid token in the token space, then the module will not build.
245   If TokenName is not a patchable in module PCD, then the module will not build.
246
247   @param   TokenName  The name of the binary patchable PCD token to set the current value for.
248   @param   Value      The 8-bit value to set.
249   
250   @return Return the Value that was set.
251
252 **/
253 #define PatchPcdSet8(TokenName, Value)      (_gPcd_BinaryPatch_##TokenName = (Value))
254
255
256 /**
257   Sets a 16-bit binary patchable PCD token value based on a token name.
258
259   Sets the 16-bit value for the token specified by TokenName. Value is returned.
260   If TokenName is not a valid token in the token space, then the module will not build.
261   If TokenName is not a patchable in module PCD, then the module will not build.
262
263   @param   TokenName  The name of the binary patchable PCD token to set the current value for.
264   @param   Value      The 16-bit value to set.
265
266   @return Return the Value that was set.
267
268 **/
269 #define PatchPcdSet16(TokenName, Value)     (_gPcd_BinaryPatch_##TokenName = (Value))
270
271
272 /**
273   Sets a 32-bit binary patchable PCD token value based on a token name.
274
275   Sets the 32-bit value for the token specified by TokenName. Value is returned.
276   If TokenName is not a valid token in the token space, then the module will not build.
277   If TokenName is not a patchable in module PCD, then the module will not build.
278
279   @param   TokenName  The name of the binary patchable PCD token to set the current value for.
280   @param   Value      The 32-bit value to set.
281
282   @return Return the Value that was set.
283
284 **/
285 #define PatchPcdSet32(TokenName, Value)     (_gPcd_BinaryPatch_##TokenName = (Value))
286
287
288 /**
289   Sets a 64-bit binary patchable PCD token value based on a token name.
290
291   Sets the 64-bit value for the token specified by TokenName. Value is returned.
292   If TokenName is not a valid token in the token space, then the module will not build.
293   If TokenName is not a patchable in module PCD, then the module will not build.
294
295   @param   TokenName  The name of the binary patchable PCD token to set the current value for.
296   @param   Value      The 64-bit value to set.
297
298   @return Return the Value that was set.
299
300 **/
301 #define PatchPcdSet64(TokenName, Value)     (_gPcd_BinaryPatch_##TokenName = (Value))
302
303
304 /**
305   Sets a Boolean binary patchable PCD token value based on a token name.
306
307   Sets the Boolean value for the token specified by TokenName. Value is returned.
308   If TokenName is not a valid token in the token space, then the module will not build.
309   If TokenName is not a patchable in module PCD, then the module will not build.
310
311   @param   TokenName  The name of the binary patchable PCD token to set the current value for.
312   @param   Value      The boolean value to set.
313
314   @return Return the Value that was set.
315
316 **/
317 #define PatchPcdSetBool(TokenName, Value)   (_gPcd_BinaryPatch_##TokenName = (Value))
318
319
320 /**
321   Sets a pointer to a binary patchable PCD token buffer based on a token name.
322
323   Sets the buffer for the token specified by TokenName.  Buffer is returned.  
324   If SizeOfBuffer is greater than the maximum size supported by TokenName, then set SizeOfBuffer
325   to the maximum size supported by TokenName and return NULL to indicate that the set operation 
326   was not actually performed.  If SizeOfBuffer is set to MAX_ADDRESS, then SizeOfBuffer must be 
327   set to the maximum size supported by TokenName and NULL must be returned.
328   If TokenName is not a valid token in the token space, then the module will not build.
329   If TokenName is not a patchable in module PCD, then the module will not build.
330   
331   If SizeOfBuffer is NULL, then ASSERT().
332   If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT().
333   
334   @param   TokenName      The name of the binary patchable PCD token to set the current value for.
335   @param   SizeOfBuffer   A pointer to the size, in bytes, of Buffer.
336   @param   Buffer         Pointer to the value to set.
337
338   @return Return the pointer to the Buffer that was set.
339
340 **/
341 #define PatchPcdSetPtr(TokenName, Size, Buffer) \
342                                             LibPatchPcdSetPtrAndSize (                 \
343                                               (VOID *)_gPcd_BinaryPatch_##TokenName,   \
344                                               &_gPcd_BinaryPatch_Size_##TokenName,     \
345                                               (UINTN)_PCD_PATCHABLE_##TokenName##_SIZE, \
346                                               (Size),                                  \
347                                               (Buffer)                                 \
348                                               )
349 /**
350   Retrieves an 8-bit PCD token value based on a token name.
351   
352   Returns the 8-bit value for the token specified by TokenName.
353   If TokenName is not a valid token in the token space, then the module will not build.
354   
355   @param   TokenName  The name of the PCD token to retrieve a current value for.
356
357   @return  8-bit value for the token specified by TokenName.
358
359 **/
360 #define PcdGet8(TokenName)                  _PCD_GET_MODE_8_##TokenName
361
362
363 /**
364   Retrieves a 16-bit PCD token value based on a token name.
365
366   Returns the 16-bit value for the token specified by TokenName.
367   If TokenName is not a valid token in the token space, then the module will not build.
368
369   @param   TokenName  The name of the PCD token to retrieve a current value for.
370
371   @return  16-bit value for the token specified by TokenName.
372
373 **/
374 #define PcdGet16(TokenName)                 _PCD_GET_MODE_16_##TokenName
375
376
377 /**
378   Retrieves a 32-bit PCD token value based on a token name.
379
380   Returns the 32-bit value for the token specified by TokenName.
381   If TokenName is not a valid token in the token space, then the module will not build.
382
383   @param   TokenName  The name of the PCD token to retrieve a current value for.
384
385   @return  32-bit value for the token specified by TokenName.
386
387 **/
388 #define PcdGet32(TokenName)                 _PCD_GET_MODE_32_##TokenName
389
390
391 /**
392   Retrieves a 64-bit PCD token value based on a token name.
393
394   Returns the 64-bit value for the token specified by TokenName.
395   If TokenName is not a valid token in the token space, then the module will not build.
396
397   @param   TokenName  The name of the PCD token to retrieve a current value for.
398
399   @return  64-bit value for the token specified by TokenName.
400
401 **/
402 #define PcdGet64(TokenName)                 _PCD_GET_MODE_64_##TokenName
403
404
405 /**
406   Retrieves a pointer to a PCD token buffer based on a token name.
407
408   Returns a pointer to the buffer for the token specified by TokenName.
409   If TokenName is not a valid token in the token space, then the module will not build.
410
411   @param   TokenName  The name of the PCD token to retrieve a current value for.
412
413   @return  A pointer to the buffer.
414
415 **/
416 #define PcdGetPtr(TokenName)                _PCD_GET_MODE_PTR_##TokenName
417
418
419 /**
420   Retrieves a Boolean PCD token value based on a token name.
421
422   Returns the Boolean value for the token specified by TokenName.
423   If TokenName is not a valid token in the token space, then the module will not build.
424
425   @param   TokenName  The name of the PCD token to retrieve a current value for.
426
427   @return  A Boolean PCD token value.
428
429 **/
430 #define PcdGetBool(TokenName)               _PCD_GET_MODE_BOOL_##TokenName
431
432
433 /**
434   Retrieves the size of a fixed PCD token based on a token name.
435
436   Returns the size of the token specified by TokenName.
437   If TokenName is not a valid token in the token space, then the module will not build.
438
439   @param[in]  TokenName  The name of the PCD token to retrieve a current value size for.
440
441   @return     Return the size
442
443 **/
444 #define FixedPcdGetSize(TokenName)    _PCD_SIZE_##TokenName
445
446
447 /**
448   Retrieves the size of a binary patchable PCD token based on a token name.
449
450   Returns the size of the token specified by TokenName.
451   If TokenName is not a valid token in the token space, then the module will not build.
452
453   @param[in]  TokenName  The name of the PCD token to retrieve a current value size for.
454
455   @return     Return the size
456
457 **/
458 #define PatchPcdGetSize(TokenName)    _gPcd_BinaryPatch_Size_##TokenName
459
460
461 /**
462   Retrieves the size of the PCD token based on a token name.
463   
464   Returns the size of the token specified by TokenName.
465   If TokenName is not a valid token in the token space, then the module will not build.
466   
467   @param[in]   TokenName  The name of the PCD token to retrieve a current value size for.
468
469   @return      Return the size
470
471 **/
472 #define PcdGetSize(TokenName)         _PCD_GET_MODE_SIZE_##TokenName
473
474
475 /**
476   Retrieve the size of a given PCD token.
477   
478   Returns the size of the token specified by TokenNumber and Guid. 
479   If Guid is NULL, then ASSERT(). 
480
481   @param[in]  Guid          Pointer to a 128-bit unique value that designates 
482                             which namespace to retrieve a value from.
483   @param[in]  TokenNumber   The PCD token number to retrieve a current value size for.
484
485   @return     Return the size.
486
487 **/
488 #define PcdGetExSize(Guid, TokenName) LibPcdGetExSize ((Guid), PcdTokenEx(Guid,TokenName))
489
490 #ifndef DISABLE_NEW_DEPRECATED_INTERFACES
491 /**
492   Sets an 8-bit PCD token value based on a token name.
493
494   Sets the 8-bit value for the token specified by TokenName. Value is returned.
495   If TokenName is not a valid token in the token space, then the module will not build.
496
497   @param   TokenName  The name of the PCD token to retrieve a current value for.
498   @param   Value      The 8-bit value to set.
499   
500   @return Return the Value that was set.
501
502 **/
503 #define PcdSet8(TokenName, Value)           _PCD_SET_MODE_8_##TokenName     ((Value))
504
505
506 /**
507   Sets a 16-bit PCD token value based on a token name.
508
509   Sets the 16-bit value for the token specified by TokenName. Value is returned.
510   If TokenName is not a valid token in the token space, then the module will not build.
511
512   @param   TokenName  The name of the PCD token to retrieve a current value for.
513   @param   Value      The 16-bit value to set.
514
515   @return Return the Value that was set.
516
517 **/
518 #define PcdSet16(TokenName, Value)          _PCD_SET_MODE_16_##TokenName    ((Value))
519
520
521 /**
522   Sets a 32-bit PCD token value based on a token name.
523
524   Sets the 32-bit value for the token specified by TokenName. Value is returned.
525   If TokenName is not a valid token in the token space, then the module will not build.
526
527   @param   TokenName  The name of the PCD token to retrieve a current value for.
528   @param   Value      The 32-bit value to set.
529
530   @return Return the Value that was set.
531
532 **/
533 #define PcdSet32(TokenName, Value)          _PCD_SET_MODE_32_##TokenName    ((Value))
534
535
536 /**
537   Sets a 64-bit PCD token value based on a token name.
538
539   Sets the 64-bit value for the token specified by TokenName. Value is returned.
540   If TokenName is not a valid token in the token space, then the module will not build.
541
542   @param   TokenName  The name of the PCD token to retrieve a current value for.
543   @param   Value      The 64-bit value to set.
544
545   @return Return the Value that was set.
546
547 **/
548 #define PcdSet64(TokenName, Value)          _PCD_SET_MODE_64_##TokenName    ((Value))
549
550
551 /**
552   Sets a pointer to a PCD token buffer based on a token name.
553
554   Sets the buffer for the token specified by TokenName. Buffer is returned.  
555   If SizeOfBuffer is greater than the maximum size supported by TokenName, 
556   then set SizeOfBuffer to the maximum size supported by TokenName and return NULL 
557   to indicate that the set operation was not actually performed.  If SizeOfBuffer 
558   is set to MAX_ADDRESS, then SizeOfBuffer must be set to the maximum size supported 
559   by TokenName and NULL must be returned.
560   If TokenName is not a valid token in the token space, then the module will not build.
561   
562   If SizeOfBuffer is NULL, then ASSERT().
563   If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT().
564   
565   @param   TokenName      The name of the PCD token to set the current value for.
566   @param   SizeOfBuffer   A pointer to the size, in bytes, of Buffer.
567   @param   Buffer         A pointer to the buffer to set.
568
569   @return Return the pointer to the Buffer that was set.
570
571 **/
572 #define PcdSetPtr(TokenName, SizeOfBuffer, Buffer) \
573                                             _PCD_SET_MODE_PTR_##TokenName   ((SizeOfBuffer), (Buffer))
574                                             
575 /**
576   Sets a Boolean PCD token value based on a token name.
577
578   Sets the Boolean value for the token specified by TokenName. Value is returned. 
579   If TokenName is not a valid token in the token space, then the module will not build.
580
581   @param   TokenName      The name of the PCD token to set the current value for.
582   @param   Buffer         The Boolean value to set.
583
584   @return Return the Value that was set.
585
586 **/
587 #define PcdSetBool(TokenName, Value)        _PCD_SET_MODE_BOOL_##TokenName  ((Value))
588 #endif
589
590 /**
591   Sets a 8-bit PCD token value based on a token name.
592
593   Sets the 8-bit value for the token specified by TokenName.
594   If TokenName is not a valid token in the token space, then the module will not build.
595
596   @param TokenName  The name of the PCD token to retrieve a current value for.
597   @param Value      The 8-bit value to set.
598
599   @return The status of the set operation.
600
601 **/
602 #define PcdSet8S(TokenName, Value)          _PCD_SET_MODE_8_S_##TokenName    ((Value))
603
604 /**
605   Sets a 16-bit PCD token value based on a token name.
606
607   Sets the 16-bit value for the token specified by TokenName.
608   If TokenName is not a valid token in the token space, then the module will not build.
609
610   @param TokenName  The name of the PCD token to retrieve a current value for.
611   @param Value      The 16-bit value to set.
612
613   @return The status of the set operation.
614
615 **/
616 #define PcdSet16S(TokenName, Value)         _PCD_SET_MODE_16_S_##TokenName    ((Value))
617
618 /**
619   Sets a 32-bit PCD token value based on a token name.
620
621   Sets the 32-bit value for the token specified by TokenName.
622   If TokenName is not a valid token in the token space, then the module will not build.
623
624   @param TokenName  The name of the PCD token to retrieve a current value for.
625   @param Value      The 32-bit value to set.
626
627   @return The status of the set operation.
628
629 **/
630 #define PcdSet32S(TokenName, Value)         _PCD_SET_MODE_32_S_##TokenName    ((Value))
631
632 /**
633   Sets a 64-bit PCD token value based on a token name.
634
635   Sets the 64-bit value for the token specified by TokenName.
636   If TokenName is not a valid token in the token space, then the module will not build.
637
638   @param TokenName  The name of the PCD token to retrieve a current value for.
639   @param Value      The 64-bit value to set.
640
641   @return The status of the set operation.
642
643 **/
644 #define PcdSet64S(TokenName, Value)         _PCD_SET_MODE_64_S_##TokenName    ((Value))
645
646 /**
647   Sets a pointer to a PCD token buffer based on a token name.
648
649   Sets the buffer for the token specified by TokenName.
650   If SizeOfBuffer is greater than the maximum size supported by TokenName,
651   then set SizeOfBuffer to the maximum size supported by TokenName and return
652   RETURN_INVALID_PARAMETER to indicate that the set operation was not actually performed.
653   If SizeOfBuffer is set to MAX_ADDRESS, then SizeOfBuffer must be set to the maximum size
654   supported by TokenName and RETURN_INVALID_PARAMETER must be returned.
655   If TokenName is not a valid token in the token space, then the module will not build.
656
657   If SizeOfBuffer is NULL, then ASSERT().
658   If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT().
659
660   @param TokenName      The name of the PCD token to set the current value for.
661   @param SizeOfBuffer   A pointer to the size, in bytes, of Buffer.
662   @param Buffer         A pointer to the buffer to set.
663
664   @return The status of the set operation.
665
666 **/
667 #define PcdSetPtrS(TokenName, SizeOfBuffer, Buffer) \
668                                             _PCD_SET_MODE_PTR_S_##TokenName   ((SizeOfBuffer), (Buffer))
669
670
671
672 /**
673   Sets a boolean PCD token value based on a token name.
674
675   Sets the boolean value for the token specified by TokenName.
676   If TokenName is not a valid token in the token space, then the module will not build.
677
678   @param TokenName  The name of the PCD token to retrieve a current value for.
679   @param Value      The boolean value to set.
680
681   @return The status of the set operation.
682
683 **/
684 #define PcdSetBoolS(TokenName, Value)       _PCD_SET_MODE_BOOL_S_##TokenName    ((Value))
685
686 /**
687   Retrieves a token number based on a GUID and a token name.
688
689   Returns the token number for the token specified by Guid and TokenName.
690   If TokenName is not a valid token in the token space, then the module will not build.
691
692   @param   Guid        Pointer to a 128-bit unique value that designates 
693                        which namespace to retrieve a value from.
694   @param   TokenName   The name of the PCD token to retrieve a current value for.                 
695
696   @return  Return the token number.
697
698 **/
699 #define PcdTokenEx(Guid,TokenName)  _PCD_TOKEN_EX_##TokenName(Guid)
700
701 /**
702   Retrieves an 8-bit PCD token value based on a GUID and a token name.
703
704   Returns the 8-bit value for the token specified by Guid and TokenName.
705   If TokenName is not a valid token in the token space specified by Guid, 
706   then the module will not build.
707   
708   If Guid is NULL, then ASSERT().
709
710   @param   Guid        Pointer to a 128-bit unique value that designates 
711                        which namespace to retrieve a value from.
712   @param   TokenName   The name of the PCD token to retrieve a current value for.                 
713
714   @return  An 8-bit PCD token value.
715
716 **/
717 #define PcdGetEx8(Guid, TokenName)          LibPcdGetEx8 ((Guid), PcdTokenEx(Guid,TokenName))
718
719 /**
720   Retrieves a 16-bit PCD token value based on a GUID and a token name.
721
722   Returns the 16-bit value for the token specified by Guid and TokenName.
723   If TokenName is not a valid token in the token space specified by Guid, 
724   then the module will not build.
725
726   If Guid is NULL, then ASSERT().
727
728   @param   Guid        Pointer to a 128-bit unique value that designates 
729                        which namespace to retrieve a value from.
730   @param   TokenName   The name of the PCD token to retrieve a current value for.                 
731
732   @return  A 16-bit PCD token value.
733
734 **/
735 #define PcdGetEx16(Guid, TokenName)         LibPcdGetEx16 ((Guid), PcdTokenEx(Guid,TokenName))
736
737
738 /**
739   Retrieves a 32-bit PCD token value based on a GUID and a token name.
740
741   Returns the 32-bit value for the token specified by Guid and TokenName.
742   If TokenName is not a valid token in the token space specified by Guid, 
743   then the module will not build.
744
745   If Guid is NULL, then ASSERT().
746
747   @param   Guid        Pointer to a 128-bit unique value that designates 
748                        which namespace to retrieve a value from.
749   @param   TokenName   The name of the PCD token to retrieve a current value for.                 
750
751   @return  A 32-bit PCD token value.
752
753 **/
754 #define PcdGetEx32(Guid, TokenName)         LibPcdGetEx32 ((Guid), PcdTokenEx(Guid,TokenName))
755
756
757 /**
758   Retrieves a 64-bit PCD token value based on a GUID and a token name.
759
760   Returns the 64-bit value for the token specified by Guid and TokenName.
761   If TokenName is not a valid token in the token space specified by Guid, 
762   then the module will not build.
763
764   If Guid is NULL, then ASSERT().
765
766   @param   Guid        Pointer to a 128-bit unique value that designates 
767                        which namespace to retrieve a value from.
768   @param   TokenName   The name of the PCD token to retrieve a current value for.                 
769
770   @return  A 64-bit PCD token value.
771
772 **/
773 #define PcdGetEx64(Guid, TokenName)         LibPcdGetEx64 ((Guid), PcdTokenEx(Guid,TokenName))
774
775
776 /**
777   Retrieves a pointer to a PCD token buffer based on a GUID and a token name.
778
779   Returns a pointer to the buffer for the token specified by Guid and TokenName.
780   If TokenName is not a valid token in the token space specified by Guid, 
781   then the module will not build.
782
783   If Guid is NULL, then ASSERT().
784
785   @param   Guid        Pointer to a 128-bit unique value that designates 
786                        which namespace to retrieve a value from.
787   @param   TokenName   The name of the PCD token to retrieve a current value for.                 
788
789   @return  A pointer to a PCD token buffer.
790
791 **/
792 #define PcdGetExPtr(Guid, TokenName)        LibPcdGetExPtr ((Guid), PcdTokenEx(Guid,TokenName))
793
794
795 /**
796   Retrieves a Boolean PCD token value based on a GUID and a token name.
797
798   Returns the Boolean value for the token specified by Guid and TokenName.
799   If TokenName is not a valid token in the token space specified by Guid, 
800   then the module will not build.
801
802   If Guid is NULL, then ASSERT().
803
804   @param   Guid        Pointer to a 128-bit unique value that designates 
805                        which namespace to retrieve a value from.
806   @param   TokenName   The name of the PCD token to retrieve a current value for.                 
807
808   @return  A Boolean PCD token value.
809
810 **/
811 #define PcdGetExBool(Guid, TokenName)       LibPcdGetExBool  ((Guid), PcdTokenEx(Guid,TokenName))
812
813
814
815 #ifndef DISABLE_NEW_DEPRECATED_INTERFACES
816 /**
817   Sets an 8-bit PCD token value based on a GUID and a token name.
818
819   Sets the 8-bit value for the token specified by Guid and TokenName. Value is returned.
820   If TokenName is not a valid token in the token space specified by Guid, 
821   then the module will not build.
822
823   If Guid is NULL, then ASSERT().
824
825   @param   Guid        Pointer to a 128-bit unique value that designates 
826                        which namespace to retrieve a value from.
827   @param   TokenName   The name of the PCD token to set the current value for.
828   @param   Value       The 8-bit value to set.                   
829
830   @return Return the Value that was set.
831
832 **/
833 #define PcdSetEx8(Guid, TokenName, Value)   LibPcdSetEx8   ((Guid), PcdTokenEx(Guid,TokenName), (Value))
834
835
836 /**
837   Sets a 16-bit PCD token value based on a GUID and a token name.
838
839   Sets the 16-bit value for the token specified by Guid and TokenName. Value is returned.
840   If TokenName is not a valid token in the token space specified by Guid, 
841   then the module will not build.
842
843   If Guid is NULL, then ASSERT().
844
845   @param   Guid        Pointer to a 128-bit unique value that designates 
846                        which namespace to retrieve a value from.
847   @param   TokenName   The name of the PCD token to set the current value for.
848   @param   Value       The 16-bit value to set.                   
849
850   @return Return the Value that was set.
851
852 **/
853 #define PcdSetEx16(Guid, TokenName, Value)  LibPcdSetEx16  ((Guid), PcdTokenEx(Guid,TokenName), (Value))
854
855
856 /**
857   Sets a 32-bit PCD token value based on a GUID and a token name.
858
859   Sets the 32-bit value for the token specified by Guid and TokenName. Value is returned.
860   If TokenName is not a valid token in the token space specified by Guid, 
861   then the module will not build.
862
863   If Guid is NULL, then ASSERT().
864
865   @param   Guid        Pointer to a 128-bit unique value that designates 
866                        which namespace to retrieve a value from.
867   @param   TokenName   The name of the PCD token to set the current value for.
868   @param   Value       The 32-bit value to set.                   
869
870   @return Return the Value that was set.
871
872 **/
873 #define PcdSetEx32(Guid, TokenName, Value)  LibPcdSetEx32  ((Guid), PcdTokenEx(Guid,TokenName), (Value))
874
875
876 /**
877   Sets a 64-bit PCD token value based on a GUID and a token name.
878
879   Sets the 64-bit value for the token specified by Guid and TokenName. Value is returned.
880   If TokenName is not a valid token in the token space specified by Guid, 
881   then the module will not build.
882
883   If Guid is NULL, then ASSERT().
884
885   @param   Guid        Pointer to a 128-bit unique value that designates 
886   which namespace to retrieve a value from.
887   @param   TokenName   The name of the PCD token to set the current value for.
888   @param   Value       The 64-bit value to set.                   
889
890   @return Return the Value that was set.
891
892 **/
893 #define PcdSetEx64(Guid, TokenName, Value)  LibPcdSetEx64  ((Guid), PcdTokenEx(Guid,TokenName), (Value))
894
895
896 /**
897   Sets a pointer to a PCD token buffer based on a GUID and a token name.
898
899   Sets the buffer for the token specified by Guid and TokenName. Buffer is returned.  
900   If SizeOfBuffer is greater than the maximum size supported by Guid and TokenName, 
901   then set SizeOfBuffer to the maximum size supported by Guid and TokenName and return 
902   NULL to indicate that the set operation was not actually performed. If SizeOfBuffer 
903   is set to MAX_ADDRESS, then SizeOfBuffer must be set to the maximum size supported by
904   Guid and TokenName and NULL must be returned.
905   If TokenName is not a valid token in the token space specified by Guid, 
906   then the module will not build.
907   
908   If Guid is NULL, then ASSERT().
909   If SizeOfBuffer is NULL, then ASSERT().
910   If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT().
911
912   @param   Guid           Pointer to a 128-bit unique value that designates 
913                           which namespace to retrieve a value from.
914   @param   TokenName      The name of the PCD token to set the current value for.
915   @param   SizeOfBuffer   A pointer to the size, in bytes, of Buffer.                  
916   @param   Buffer         Pointer to the buffer to set.
917     
918   @return Return the pointer to the Buffer that was set.
919
920 **/
921 #define PcdSetExPtr(Guid, TokenName, SizeOfBuffer, Buffer) \
922                                             LibPcdSetExPtr ((Guid), PcdTokenEx(Guid,TokenName), (SizeOfBuffer), (Buffer))
923
924
925 /**
926   Sets a Boolean PCD token value based on a GUID and a token name.
927
928   Sets the Boolean value for the token specified by Guid and TokenName. Value is returned. 
929   If TokenName is not a valid token in the token space specified by Guid, 
930   then the module will not build.
931
932   If Guid is NULL, then ASSERT().
933
934   @param   Guid           Pointer to a 128-bit unique value that designates 
935                           which namespace to retrieve a value from.
936   @param   TokenName      The name of the PCD token to set the current value for.              
937   @param   Value          The Boolean value to set.
938
939   @return Return the Value that was set.
940
941 **/                                         
942 #define PcdSetExBool(Guid, TokenName, Value) \
943                                             LibPcdSetExBool((Guid), PcdTokenEx(Guid,TokenName), (Value))
944 #endif
945
946 /**
947   Sets an 8-bit PCD token value based on a GUID and a token name.
948
949   Sets the 8-bit value for the token specified by Guid and TokenName.
950   If TokenName is not a valid token in the token space specified by Guid,
951   then the module will not build.
952
953   If Guid is NULL, then ASSERT().
954
955   @param Guid       Pointer to a 128-bit unique value that designates
956                     which namespace to retrieve a value from.
957   @param TokenName  The name of the PCD token to set the current value for.
958   @param Value      The 8-bit value to set.
959
960   @return The status of the set operation.
961
962 **/
963 #define PcdSetEx8S(Guid, TokenName, Value)     LibPcdSetEx8S ((Guid), PcdTokenEx(Guid,TokenName), (Value))
964
965 /**
966   Sets an 16-bit PCD token value based on a GUID and a token name.
967
968   Sets the 16-bit value for the token specified by Guid and TokenName.
969   If TokenName is not a valid token in the token space specified by Guid,
970   then the module will not build.
971
972   If Guid is NULL, then ASSERT().
973
974   @param Guid       Pointer to a 128-bit unique value that designates
975                     which namespace to retrieve a value from.
976   @param TokenName  The name of the PCD token to set the current value for.
977   @param Value      The 16-bit value to set.
978
979   @return The status of the set operation.
980
981 **/
982 #define PcdSetEx16S(Guid, TokenName, Value)    LibPcdSetEx16S ((Guid), PcdTokenEx(Guid,TokenName), (Value))
983
984 /**
985   Sets an 32-bit PCD token value based on a GUID and a token name.
986
987   Sets the 32-bit value for the token specified by Guid and TokenName.
988   If TokenName is not a valid token in the token space specified by Guid,
989   then the module will not build.
990
991   If Guid is NULL, then ASSERT().
992
993   @param Guid       Pointer to a 128-bit unique value that designates
994                     which namespace to retrieve a value from.
995   @param TokenName  The name of the PCD token to set the current value for.
996   @param Value      The 32-bit value to set.
997
998   @return The status of the set operation.
999
1000 **/
1001 #define PcdSetEx32S(Guid, TokenName, Value)    LibPcdSetEx32S ((Guid), PcdTokenEx(Guid,TokenName), (Value))
1002
1003 /**
1004   Sets an 64-bit PCD token value based on a GUID and a token name.
1005
1006   Sets the 64-bit value for the token specified by Guid and TokenName.
1007   If TokenName is not a valid token in the token space specified by Guid,
1008   then the module will not build.
1009
1010   If Guid is NULL, then ASSERT().
1011
1012   @param Guid       Pointer to a 128-bit unique value that designates
1013                     which namespace to retrieve a value from.
1014   @param TokenName  The name of the PCD token to set the current value for.
1015   @param Value      The 64-bit value to set.
1016
1017   @return The status of the set operation.
1018
1019 **/
1020 #define PcdSetEx64S(Guid, TokenName, Value)    LibPcdSetEx64S ((Guid), PcdTokenEx(Guid,TokenName), (Value))
1021
1022 /**
1023   Sets a pointer to a PCD token buffer based on a GUID and a token name.
1024
1025   Sets the buffer for the token specified by Guid and TokenName.
1026   If SizeOfBuffer is greater than the maximum size supported by Guid and TokenName,
1027   then set SizeOfBuffer to the maximum size supported by Guid and TokenName and return
1028   RETURN_INVALID_PARAMETER to indicate that the set operation was not actually performed.
1029   If SizeOfBuffer is set to MAX_ADDRESS, then SizeOfBuffer must be set to the maximum size
1030   supported by Guid and TokenName and RETURN_INVALID_PARAMETER must be returned.
1031   If TokenName is not a valid token in the token space specified by Guid,
1032   then the module will not build.
1033
1034   If Guid is NULL, then ASSERT().
1035   If SizeOfBuffer is NULL, then ASSERT().
1036   If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT().
1037
1038   @param Guid           Pointer to a 128-bit unique value that designates
1039                         which namespace to retrieve a value from.
1040   @param TokenName      The name of the PCD token to set the current value for.
1041   @param SizeOfBuffer   A pointer to the size, in bytes, of Buffer.
1042   @param Buffer         Pointer to the buffer to set.
1043
1044   @return The status of the set operation.
1045
1046 **/
1047 #define PcdSetExPtrS(Guid, TokenName, SizeOfBuffer, Buffer) \
1048                                             LibPcdSetExPtrS ((Guid), PcdTokenEx(Guid,TokenName), (SizeOfBuffer), (Buffer))
1049
1050
1051 /**
1052   Sets an boolean PCD token value based on a GUID and a token name.
1053
1054   Sets the boolean value for the token specified by Guid and TokenName.
1055   If TokenName is not a valid token in the token space specified by Guid,
1056   then the module will not build.
1057
1058   If Guid is NULL, then ASSERT().
1059
1060   @param Guid       Pointer to a 128-bit unique value that designates
1061                     which namespace to retrieve a value from.
1062   @param TokenName  The name of the PCD token to set the current value for.
1063   @param Value      The boolean value to set.
1064
1065   @return The status of the set operation.
1066
1067 **/
1068 #define PcdSetExBoolS(Guid, TokenName, Value) \
1069                                             LibPcdSetExBoolS ((Guid), PcdTokenEx(Guid,TokenName), (Value))
1070
1071 /**
1072   This function provides a means by which SKU support can be established in the PCD infrastructure.
1073
1074   Sets the current SKU in the PCD database to the value specified by SkuId.  SkuId is returned.
1075
1076   @param  SkuId   The SKU value that will be used when the PCD service retrieves and sets values
1077                   associated with a PCD token.
1078
1079   @return  Return the SKU ID that was set.
1080
1081 **/
1082 UINTN
1083 EFIAPI
1084 LibPcdSetSku (
1085   IN UINTN   SkuId
1086   );
1087
1088
1089 /**
1090   This function provides a means by which to retrieve a value for a given PCD token.
1091   
1092   Returns the 8-bit value for the token specified by TokenNumber. 
1093
1094   @param[in]  TokenNumber The PCD token number to retrieve a current value for.
1095
1096   @return Returns the 8-bit value for the token specified by TokenNumber. 
1097
1098 **/
1099 UINT8
1100 EFIAPI
1101 LibPcdGet8 (
1102   IN UINTN             TokenNumber
1103   );
1104
1105
1106 /**
1107   This function provides a means by which to retrieve a value for a given PCD token.
1108   
1109   Returns the 16-bit value for the token specified by TokenNumber. 
1110
1111   @param[in]  TokenNumber The PCD token number to retrieve a current value for.
1112
1113   @return Returns the 16-bit value for the token specified by TokenNumber. 
1114
1115 **/
1116 UINT16
1117 EFIAPI
1118 LibPcdGet16 (
1119   IN UINTN             TokenNumber
1120   );
1121
1122
1123 /**
1124   This function provides a means by which to retrieve a value for a given PCD token.
1125   
1126   Returns the 32-bit value for the token specified by TokenNumber. 
1127
1128   @param[in]  TokenNumber The PCD token number to retrieve a current value for.
1129
1130   @return Returns the 32-bit value for the token specified by TokenNumber.
1131
1132 **/
1133 UINT32
1134 EFIAPI
1135 LibPcdGet32 (
1136   IN UINTN             TokenNumber
1137   );
1138
1139
1140 /**
1141   This function provides a means by which to retrieve a value for a given PCD token.
1142   
1143   Returns the 64-bit value for the token specified by TokenNumber.
1144
1145   @param[in]  TokenNumber The PCD token number to retrieve a current value for.
1146
1147   @return Returns the 64-bit value for the token specified by TokenNumber.
1148
1149 **/
1150 UINT64
1151 EFIAPI
1152 LibPcdGet64 (
1153   IN UINTN             TokenNumber
1154   );
1155
1156
1157 /**
1158   This function provides a means by which to retrieve a value for a given PCD token.
1159   
1160   Returns the pointer to the buffer of the token specified by TokenNumber.
1161
1162   @param[in]  TokenNumber The PCD token number to retrieve a current value for.
1163
1164   @return Returns the pointer to the token specified by TokenNumber.
1165
1166 **/
1167 VOID *
1168 EFIAPI
1169 LibPcdGetPtr (
1170   IN UINTN             TokenNumber
1171   );
1172
1173
1174 /**
1175   This function provides a means by which to retrieve a value for a given PCD token.
1176   
1177   Returns the Boolean value of the token specified by TokenNumber. 
1178
1179   @param[in]  TokenNumber The PCD token number to retrieve a current value for.
1180
1181   @return Returns the Boolean value of the token specified by TokenNumber. 
1182
1183 **/
1184 BOOLEAN 
1185 EFIAPI
1186 LibPcdGetBool (
1187   IN UINTN             TokenNumber
1188   );
1189
1190
1191 /**
1192   This function provides a means by which to retrieve the size of a given PCD token.
1193
1194   @param[in]  TokenNumber The PCD token number to retrieve a current value for.
1195
1196   @return Returns the size of the token specified by TokenNumber. 
1197
1198 **/
1199 UINTN
1200 EFIAPI
1201 LibPcdGetSize (
1202   IN UINTN             TokenNumber
1203   );
1204
1205
1206 /**
1207   This function provides a means by which to retrieve a value for a given PCD token.
1208   
1209   Returns the 8-bit value for the token specified by TokenNumber and Guid.
1210   
1211   If Guid is NULL, then ASSERT(). 
1212
1213   @param[in]  Guid         Pointer to a 128-bit unique value that designates 
1214                            which namespace to retrieve a value from.
1215   @param[in]  TokenNumber  The PCD token number to retrieve a current value for.
1216
1217   @return Return the UINT8.
1218
1219 **/
1220 UINT8
1221 EFIAPI
1222 LibPcdGetEx8 (
1223   IN CONST GUID        *Guid,
1224   IN UINTN             TokenNumber
1225   );
1226
1227
1228 /**
1229   This function provides a means by which to retrieve a value for a given PCD token.
1230
1231   Returns the 16-bit value for the token specified by TokenNumber and Guid.
1232   
1233   If Guid is NULL, then ASSERT(). 
1234
1235   @param[in]  Guid         Pointer to a 128-bit unique value that designates 
1236                            which namespace to retrieve a value from.
1237   @param[in]  TokenNumber  The PCD token number to retrieve a current value for.
1238
1239   @return Return the UINT16.
1240
1241 **/
1242 UINT16
1243 EFIAPI
1244 LibPcdGetEx16 (
1245   IN CONST GUID        *Guid,
1246   IN UINTN             TokenNumber
1247   );
1248
1249
1250 /**
1251   Returns the 32-bit value for the token specified by TokenNumber and Guid.
1252   If Guid is NULL, then ASSERT(). 
1253
1254   @param[in]  Guid         Pointer to a 128-bit unique value that designates 
1255                            which namespace to retrieve a value from.
1256   @param[in]  TokenNumber  The PCD token number to retrieve a current value for.
1257
1258   @return Return the UINT32.
1259
1260 **/
1261 UINT32
1262 EFIAPI
1263 LibPcdGetEx32 (
1264   IN CONST GUID        *Guid,
1265   IN UINTN             TokenNumber
1266   );
1267
1268
1269 /**
1270   This function provides a means by which to retrieve a value for a given PCD token.
1271   
1272   Returns the 64-bit value for the token specified by TokenNumber and Guid.
1273   
1274   If Guid is NULL, then ASSERT(). 
1275
1276   @param[in]  Guid          Pointer to a 128-bit unique value that designates 
1277                             which namespace to retrieve a value from.
1278   @param[in]  TokenNumber   The PCD token number to retrieve a current value for.
1279
1280   @return Return the UINT64.
1281
1282 **/
1283 UINT64
1284 EFIAPI
1285 LibPcdGetEx64 (
1286   IN CONST GUID        *Guid,
1287   IN UINTN             TokenNumber
1288   );
1289
1290
1291 /**
1292   This function provides a means by which to retrieve a value for a given PCD token.
1293   
1294   Returns the pointer to the buffer of token specified by TokenNumber and Guid.
1295   
1296   If Guid is NULL, then ASSERT(). 
1297
1298   @param[in]  Guid          Pointer to a 128-bit unique value that designates 
1299                             which namespace to retrieve a value from.
1300   @param[in]  TokenNumber   The PCD token number to retrieve a current value for.
1301
1302   @return Return the VOID* pointer.
1303
1304 **/
1305 VOID *
1306 EFIAPI
1307 LibPcdGetExPtr (
1308   IN CONST GUID        *Guid,
1309   IN UINTN             TokenNumber
1310   );
1311
1312
1313 /**
1314   This function provides a means by which to retrieve a value for a given PCD token.
1315   
1316   Returns the Boolean value of the token specified by TokenNumber and Guid. 
1317   
1318   If Guid is NULL, then ASSERT(). 
1319
1320   @param[in]  Guid          Pointer to a 128-bit unique value that designates 
1321                             which namespace to retrieve a value from.
1322   @param[in]  TokenNumber   The PCD token number to retrieve a current value for.
1323
1324   @return Return the BOOLEAN.
1325
1326 **/
1327 BOOLEAN
1328 EFIAPI
1329 LibPcdGetExBool (
1330   IN CONST GUID        *Guid,
1331   IN UINTN             TokenNumber
1332   );
1333
1334
1335 /**
1336   This function provides a means by which to retrieve the size of a given PCD token.
1337   
1338   Returns the size of the token specified by TokenNumber and Guid. 
1339   
1340   If Guid is NULL, then ASSERT(). 
1341
1342   @param[in]  Guid          Pointer to a 128-bit unique value that designates 
1343                             which namespace to retrieve a value from.
1344   @param[in]  TokenNumber   The PCD token number to retrieve a current value for.
1345
1346   @return Return the size.
1347
1348 **/
1349 UINTN
1350 EFIAPI
1351 LibPcdGetExSize (
1352   IN CONST GUID        *Guid,
1353   IN UINTN             TokenNumber
1354   );
1355
1356
1357 #ifndef DISABLE_NEW_DEPRECATED_INTERFACES
1358 /**
1359   This function provides a means by which to set a value for a given PCD token.
1360   
1361   Sets the 8-bit value for the token specified by TokenNumber 
1362   to the value specified by Value.  Value is returned.
1363
1364   @param[in]  TokenNumber   The PCD token number to set a current value for.
1365   @param[in]  Value         The 8-bit value to set.
1366
1367   @return Return the Value that was set.
1368
1369 **/
1370 UINT8
1371 EFIAPI
1372 LibPcdSet8 (
1373   IN UINTN             TokenNumber,
1374   IN UINT8             Value
1375   );
1376
1377
1378 /**
1379   This function provides a means by which to set a value for a given PCD token.
1380   
1381   Sets the 16-bit value for the token specified by TokenNumber 
1382   to the value specified by Value.  Value is returned.
1383
1384   @param[in]  TokenNumber   The PCD token number to set a current value for.
1385   @param[in]  Value         The 16-bit value to set.
1386
1387   @return Return the Value that was set.
1388
1389 **/
1390 UINT16
1391 EFIAPI
1392 LibPcdSet16 (
1393   IN UINTN             TokenNumber,
1394   IN UINT16            Value
1395   );
1396
1397
1398 /**
1399   This function provides a means by which to set a value for a given PCD token.
1400   
1401   Sets the 32-bit value for the token specified by TokenNumber 
1402   to the value specified by Value.  Value is returned.
1403
1404   @param[in]  TokenNumber   The PCD token number to set a current value for.
1405   @param[in]  Value         The 32-bit value to set.
1406
1407   @return Return the Value that was set.
1408
1409 **/
1410 UINT32
1411 EFIAPI
1412 LibPcdSet32 (
1413   IN UINTN             TokenNumber,
1414   IN UINT32            Value
1415   );
1416
1417
1418 /**
1419   This function provides a means by which to set a value for a given PCD token.
1420   
1421   Sets the 64-bit value for the token specified by TokenNumber 
1422   to the value specified by Value.  Value is returned.
1423
1424   @param[in]  TokenNumber   The PCD token number to set a current value for.
1425   @param[in]  Value         The 64-bit value to set.
1426
1427   @return Return the Value that was set.
1428
1429 **/
1430 UINT64
1431 EFIAPI
1432 LibPcdSet64 (
1433   IN UINTN             TokenNumber,
1434   IN UINT64            Value
1435   );
1436
1437
1438 /**
1439   This function provides a means by which to set a value for a given PCD token.
1440   
1441   Sets a buffer for the token specified by TokenNumber to the value 
1442   specified by Buffer and SizeOfBuffer.  Buffer is returned.  
1443   If SizeOfBuffer is greater than the maximum size support by TokenNumber, 
1444   then set SizeOfBuffer to the maximum size supported by TokenNumber and 
1445   return NULL to indicate that the set operation was not actually performed.
1446
1447   If SizeOfBuffer is set to MAX_ADDRESS, then SizeOfBuffer must be set to the 
1448   maximum size supported by TokenName and NULL must be returned.
1449   
1450   If SizeOfBuffer is NULL, then ASSERT().
1451   If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT().
1452   
1453   @param[in]      TokenNumber   The PCD token number to set a current value for.
1454   @param[in, out] SizeOfBuffer  The size, in bytes, of Buffer.
1455   @param[in]      Buffer        A pointer to the buffer to set.
1456
1457   @return Return the pointer for the Buffer that was set.
1458
1459 **/
1460 VOID *
1461 EFIAPI
1462 LibPcdSetPtr (
1463   IN        UINTN             TokenNumber,
1464   IN OUT    UINTN             *SizeOfBuffer,
1465   IN CONST  VOID              *Buffer
1466   );
1467
1468
1469 /**
1470   This function provides a means by which to set a value for a given PCD token.
1471   
1472   Sets the Boolean value for the token specified by TokenNumber 
1473   to the value specified by Value.  Value is returned.
1474
1475   @param[in]  TokenNumber   The PCD token number to set a current value for.
1476   @param[in]  Value         The boolean value to set.
1477
1478   @return Return the Value that was set.
1479
1480 **/
1481 BOOLEAN
1482 EFIAPI
1483 LibPcdSetBool (
1484   IN UINTN             TokenNumber,
1485   IN BOOLEAN           Value
1486   );
1487
1488
1489 /**
1490   This function provides a means by which to set a value for a given PCD token.
1491   
1492   Sets the 8-bit value for the token specified by TokenNumber and 
1493   Guid to the value specified by Value. Value is returned.
1494
1495   If Guid is NULL, then ASSERT().
1496
1497   @param[in]  Guid          Pointer to a 128-bit unique value that 
1498                             designates which namespace to set a value from.
1499   @param[in]  TokenNumber   The PCD token number to set a current value for.
1500   @param[in]  Value         The 8-bit value to set.
1501
1502   @return Return the Value that was set.
1503
1504 **/
1505 UINT8
1506 EFIAPI
1507 LibPcdSetEx8 (
1508   IN CONST GUID        *Guid,
1509   IN UINTN             TokenNumber,
1510   IN UINT8             Value
1511   );
1512
1513
1514 /**
1515   This function provides a means by which to set a value for a given PCD token.
1516   
1517   Sets the 16-bit value for the token specified by TokenNumber and 
1518   Guid to the value specified by Value. Value is returned.
1519
1520   If Guid is NULL, then ASSERT().
1521
1522   @param[in]  Guid          Pointer to a 128-bit unique value that 
1523                             designates which namespace to set a value from.
1524   @param[in]  TokenNumber   The PCD token number to set a current value for.
1525   @param[in]  Value         The 16-bit value to set.
1526
1527   @return Return the Value that was set.
1528
1529 **/
1530 UINT16
1531 EFIAPI
1532 LibPcdSetEx16 (
1533   IN CONST GUID        *Guid,
1534   IN UINTN             TokenNumber,
1535   IN UINT16            Value
1536   );
1537
1538
1539 /**
1540   This function provides a means by which to set a value for a given PCD token.
1541   
1542   Sets the 32-bit value for the token specified by TokenNumber and 
1543   Guid to the value specified by Value. Value is returned.
1544
1545   If Guid is NULL, then ASSERT().
1546
1547   @param[in]  Guid          Pointer to a 128-bit unique value that 
1548                             designates which namespace to set a value from.
1549   @param[in]  TokenNumber   The PCD token number to set a current value for.
1550   @param[in]  Value         The 32-bit value to set.
1551
1552   @return Return the Value that was set.
1553
1554 **/
1555 UINT32
1556 EFIAPI
1557 LibPcdSetEx32 (
1558   IN CONST GUID        *Guid,
1559   IN UINTN             TokenNumber,
1560   IN UINT32            Value
1561   );
1562
1563
1564 /**
1565   This function provides a means by which to set a value for a given PCD token.
1566   
1567   Sets the 64-bit value for the token specified by TokenNumber and 
1568   Guid to the value specified by Value. Value is returned.
1569
1570   If Guid is NULL, then ASSERT().
1571
1572   @param[in]  Guid          Pointer to a 128-bit unique value that 
1573                             designates which namespace to set a value from.
1574   @param[in]  TokenNumber   The PCD token number to set a current value for.
1575   @param[in]  Value         The 64-bit value to set.
1576
1577   @return Return the Value that was set.
1578
1579 **/
1580 UINT64
1581 EFIAPI
1582 LibPcdSetEx64 (
1583   IN CONST GUID        *Guid,
1584   IN UINTN             TokenNumber,
1585   IN UINT64            Value
1586   );
1587
1588
1589 /**
1590   This function provides a means by which to set a value for a given PCD token.
1591   
1592   Sets a buffer for the token specified by TokenNumber to the value specified by 
1593   Buffer and SizeOfBuffer.  Buffer is returned.  If SizeOfBuffer is greater than 
1594   the maximum size support by TokenNumber, then set SizeOfBuffer to the maximum size 
1595   supported by TokenNumber and return NULL to indicate that the set operation 
1596   was not actually performed.
1597   
1598   If Guid is NULL, then ASSERT().
1599   If SizeOfBuffer is NULL, then ASSERT().
1600   If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT().
1601   
1602   @param[in]  Guid              Pointer to a 128-bit unique value that 
1603                                 designates which namespace to set a value from.
1604   @param[in]  TokenNumber       The PCD token number to set a current value for.
1605   @param[in, out] SizeOfBuffer  The size, in bytes, of Buffer.
1606   @param[in]  Buffer            A pointer to the buffer to set.
1607
1608   @return Return the pointer to the Buffer that was set.
1609
1610 **/
1611 VOID *
1612 EFIAPI
1613 LibPcdSetExPtr (
1614   IN      CONST GUID        *Guid,
1615   IN      UINTN             TokenNumber,
1616   IN OUT  UINTN             *SizeOfBuffer,
1617   IN      VOID              *Buffer
1618   );
1619
1620
1621 /**
1622   This function provides a means by which to set a value for a given PCD token.
1623   
1624   Sets the Boolean value for the token specified by TokenNumber and 
1625   Guid to the value specified by Value. Value is returned.
1626
1627   If Guid is NULL, then ASSERT().
1628
1629   @param[in]  Guid          Pointer to a 128-bit unique value that 
1630                             designates which namespace to set a value from.
1631   @param[in]  TokenNumber   The PCD token number to set a current value for.
1632   @param[in]  Value         The Boolean value to set.
1633
1634   @return Return the Value that was set.
1635
1636 **/
1637 BOOLEAN
1638 EFIAPI
1639 LibPcdSetExBool (
1640   IN CONST GUID        *Guid,
1641   IN UINTN             TokenNumber,
1642   IN BOOLEAN           Value
1643   );
1644 #endif
1645
1646 /**
1647   This function provides a means by which to set a value for a given PCD token.
1648
1649   Sets the 8-bit value for the token specified by TokenNumber
1650   to the value specified by Value.
1651
1652   @param[in] TokenNumber    The PCD token number to set a current value for.
1653   @param[in] Value          The 8-bit value to set.
1654
1655   @return The status of the set operation.
1656
1657 **/
1658 RETURN_STATUS
1659 EFIAPI
1660 LibPcdSet8S (
1661   IN UINTN          TokenNumber,
1662   IN UINT8          Value
1663   );
1664
1665 /**
1666   This function provides a means by which to set a value for a given PCD token.
1667
1668   Sets the 16-bit value for the token specified by TokenNumber
1669   to the value specified by Value.
1670
1671   @param[in] TokenNumber    The PCD token number to set a current value for.
1672   @param[in] Value          The 16-bit value to set.
1673
1674   @return The status of the set operation.
1675
1676 **/
1677 RETURN_STATUS
1678 EFIAPI
1679 LibPcdSet16S (
1680   IN UINTN          TokenNumber,
1681   IN UINT16         Value
1682   );
1683
1684 /**
1685   This function provides a means by which to set a value for a given PCD token.
1686
1687   Sets the 32-bit value for the token specified by TokenNumber
1688   to the value specified by Value.
1689
1690   @param[in] TokenNumber    The PCD token number to set a current value for.
1691   @param[in] Value          The 32-bit value to set.
1692
1693   @return The status of the set operation.
1694
1695 **/
1696 RETURN_STATUS
1697 EFIAPI
1698 LibPcdSet32S (
1699   IN UINTN          TokenNumber,
1700   IN UINT32         Value
1701   );
1702
1703 /**
1704   This function provides a means by which to set a value for a given PCD token.
1705
1706   Sets the 64-bit value for the token specified by TokenNumber
1707   to the value specified by Value.
1708
1709   @param[in] TokenNumber    The PCD token number to set a current value for.
1710   @param[in] Value          The 64-bit value to set.
1711
1712   @return The status of the set operation.
1713
1714 **/
1715 RETURN_STATUS
1716 EFIAPI
1717 LibPcdSet64S (
1718   IN UINTN          TokenNumber,
1719   IN UINT64         Value
1720   );
1721
1722 /**
1723   This function provides a means by which to set a value for a given PCD token.
1724
1725   Sets a buffer for the token specified by TokenNumber to the value specified
1726   by Buffer and SizeOfBuffer. If SizeOfBuffer is greater than the maximum size
1727   support by TokenNumber, then set SizeOfBuffer to the maximum size supported by
1728   TokenNumber and return RETURN_INVALID_PARAMETER to indicate that the set operation
1729   was not actually performed.
1730
1731   If SizeOfBuffer is set to MAX_ADDRESS, then SizeOfBuffer must be set to the
1732   maximum size supported by TokenName and RETURN_INVALID_PARAMETER must be returned.
1733
1734   If SizeOfBuffer is NULL, then ASSERT().
1735   If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT().
1736
1737   @param[in]      TokenNumber   The PCD token number to set a current value for.
1738   @param[in, out] SizeOfBuffer  The size, in bytes, of Buffer.
1739   @param[in]      Buffer        A pointer to the buffer to set.
1740
1741   @return The status of the set operation.
1742
1743 **/
1744 RETURN_STATUS
1745 EFIAPI
1746 LibPcdSetPtrS (
1747   IN       UINTN    TokenNumber,
1748   IN OUT   UINTN    *SizeOfBuffer,
1749   IN CONST VOID     *Buffer
1750   );
1751
1752 /**
1753   This function provides a means by which to set a value for a given PCD token.
1754
1755   Sets the boolean value for the token specified by TokenNumber
1756   to the value specified by Value.
1757
1758   @param[in] TokenNumber    The PCD token number to set a current value for.
1759   @param[in] Value          The boolean value to set.
1760
1761   @return The status of the set operation.
1762
1763 **/
1764 RETURN_STATUS
1765 EFIAPI
1766 LibPcdSetBoolS (
1767   IN UINTN          TokenNumber,
1768   IN BOOLEAN        Value
1769   );
1770
1771 /**
1772   This function provides a means by which to set a value for a given PCD token.
1773
1774   Sets the 8-bit value for the token specified by TokenNumber
1775   to the value specified by Value.
1776
1777   If Guid is NULL, then ASSERT().
1778
1779   @param[in] Guid           The pointer to a 128-bit unique value that
1780                             designates which namespace to set a value from.
1781   @param[in] TokenNumber    The PCD token number to set a current value for.
1782   @param[in] Value          The 8-bit value to set.
1783
1784   @return The status of the set operation.
1785
1786 **/
1787 RETURN_STATUS
1788 EFIAPI
1789 LibPcdSetEx8S (
1790   IN CONST GUID     *Guid,
1791   IN UINTN          TokenNumber,
1792   IN UINT8          Value
1793   );
1794
1795 /**
1796   This function provides a means by which to set a value for a given PCD token.
1797
1798   Sets the 16-bit value for the token specified by TokenNumber
1799   to the value specified by Value.
1800
1801   If Guid is NULL, then ASSERT().
1802
1803   @param[in] Guid           The pointer to a 128-bit unique value that
1804                             designates which namespace to set a value from.
1805   @param[in] TokenNumber    The PCD token number to set a current value for.
1806   @param[in] Value          The 16-bit value to set.
1807
1808   @return The status of the set operation.
1809
1810 **/
1811 RETURN_STATUS
1812 EFIAPI
1813 LibPcdSetEx16S (
1814   IN CONST GUID     *Guid,
1815   IN UINTN          TokenNumber,
1816   IN UINT16         Value
1817   );
1818
1819 /**
1820   This function provides a means by which to set a value for a given PCD token.
1821
1822   Sets the 32-bit value for the token specified by TokenNumber
1823   to the value specified by Value.
1824
1825   If Guid is NULL, then ASSERT().
1826
1827   @param[in] Guid           The pointer to a 128-bit unique value that
1828                             designates which namespace to set a value from.
1829   @param[in] TokenNumber    The PCD token number to set a current value for.
1830   @param[in] Value          The 32-bit value to set.
1831
1832   @return The status of the set operation.
1833
1834 **/
1835 RETURN_STATUS
1836 EFIAPI
1837 LibPcdSetEx32S (
1838   IN CONST GUID     *Guid,
1839   IN UINTN          TokenNumber,
1840   IN UINT32         Value
1841   );
1842
1843 /**
1844   This function provides a means by which to set a value for a given PCD token.
1845
1846   Sets the 64-bit value for the token specified by TokenNumber
1847   to the value specified by Value.
1848
1849   If Guid is NULL, then ASSERT().
1850
1851   @param[in] Guid           The pointer to a 128-bit unique value that
1852                             designates which namespace to set a value from.
1853   @param[in] TokenNumber    The PCD token number to set a current value for.
1854   @param[in] Value          The 64-bit value to set.
1855
1856   @return The status of the set operation.
1857
1858 **/
1859 RETURN_STATUS
1860 EFIAPI
1861 LibPcdSetEx64S (
1862   IN CONST GUID     *Guid,
1863   IN UINTN          TokenNumber,
1864   IN UINT64         Value
1865   );
1866
1867 /**
1868   This function provides a means by which to set a value for a given PCD token.
1869
1870   Sets a buffer for the token specified by TokenNumber to the value specified by
1871   Buffer and SizeOfBuffer. If SizeOfBuffer is greater than the maximum size
1872   support by TokenNumber, then set SizeOfBuffer to the maximum size supported by
1873   TokenNumber and return RETURN_INVALID_PARAMETER to indicate that the set operation
1874   was not actually performed.
1875
1876   If Guid is NULL, then ASSERT().
1877   If SizeOfBuffer is NULL, then ASSERT().
1878   If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT().
1879
1880   @param[in]      Guid          Pointer to a 128-bit unique value that
1881                                 designates which namespace to set a value from.
1882   @param[in]      TokenNumber   The PCD token number to set a current value for.
1883   @param[in, out] SizeOfBuffer  The size, in bytes, of Buffer.
1884   @param[in]      Buffer        A pointer to the buffer to set.
1885
1886   @return The status of the set operation.
1887
1888 **/
1889 RETURN_STATUS
1890 EFIAPI
1891 LibPcdSetExPtrS (
1892   IN CONST GUID     *Guid,
1893   IN       UINTN    TokenNumber,
1894   IN OUT   UINTN    *SizeOfBuffer,
1895   IN       VOID     *Buffer
1896   );
1897
1898 /**
1899   This function provides a means by which to set a value for a given PCD token.
1900
1901   Sets the boolean value for the token specified by TokenNumber
1902   to the value specified by Value.
1903
1904   If Guid is NULL, then ASSERT().
1905
1906   @param[in] Guid           The pointer to a 128-bit unique value that
1907                             designates which namespace to set a value from.
1908   @param[in] TokenNumber    The PCD token number to set a current value for.
1909   @param[in] Value          The boolean value to set.
1910
1911   @return The status of the set operation.
1912
1913 **/
1914 RETURN_STATUS
1915 EFIAPI
1916 LibPcdSetExBoolS (
1917   IN CONST GUID     *Guid,
1918   IN UINTN          TokenNumber,
1919   IN BOOLEAN        Value
1920   );
1921
1922 /**
1923   This notification function serves two purposes.
1924
1925   Firstly, it notifies the module that did the registration that the value of this
1926   PCD token has been set.
1927   Secondly, it provides a mechanism for the module that did the registration to intercept
1928   the set operation and override the value been set if necessary. After the invocation of
1929   the callback function, TokenData will be used by PCD service PEIM or driver to modify th
1930   internal data in PCD database. 
1931
1932   @param[in]      CallBackGuid    The PCD token GUID being set.
1933   @param[in]      CallBackToken   The PCD token number being set.
1934   @param[in, out] TokenData       A pointer to the token data being set.
1935   @param[in]      TokenDataSize   The size, in bytes, of the data being set.
1936
1937 **/
1938 typedef
1939 VOID
1940 (EFIAPI *PCD_CALLBACK)(
1941   IN        CONST GUID        *CallBackGuid, OPTIONAL
1942   IN        UINTN             CallBackToken,
1943   IN  OUT   VOID              *TokenData,
1944   IN        UINTN             TokenDataSize
1945   );
1946
1947
1948 /**
1949   Set up a notification function that is called when a specified token is set.
1950   
1951   When the token specified by TokenNumber and Guid is set, 
1952   then notification function specified by NotificationFunction is called.  
1953   If Guid is NULL, then the default token space is used.
1954   If NotificationFunction is NULL, then ASSERT().
1955
1956   @param[in]  Guid                  Pointer to a 128-bit unique value that designates which 
1957                                     namespace to set a value from.  If NULL, then the default 
1958                                     token space is used.
1959   @param[in]  TokenNumber           The PCD token number to monitor.
1960   @param[in]  NotificationFunction  The function to call when the token 
1961                                     specified by Guid and TokenNumber is set.
1962
1963 **/
1964 VOID
1965 EFIAPI
1966 LibPcdCallbackOnSet (
1967   IN CONST GUID               *Guid,       OPTIONAL
1968   IN UINTN                    TokenNumber,
1969   IN PCD_CALLBACK             NotificationFunction
1970   );
1971
1972
1973 /**
1974   Disable a notification function that was established with LibPcdCallbackonSet().
1975   
1976   Disable a notification function that was previously established with LibPcdCallbackOnSet().
1977   If NotificationFunction is NULL, then ASSERT().
1978   If LibPcdCallbackOnSet() was not previously called with Guid, TokenNumber, 
1979   and NotificationFunction, then ASSERT().
1980   
1981   @param[in]  Guid                 Specify the GUID token space.
1982   @param[in]  TokenNumber          Specify the token number.
1983   @param[in]  NotificationFunction The callback function to be unregistered.
1984
1985 **/
1986 VOID
1987 EFIAPI
1988 LibPcdCancelCallback (
1989   IN CONST GUID               *Guid,       OPTIONAL
1990   IN UINTN                    TokenNumber,
1991   IN PCD_CALLBACK             NotificationFunction
1992   );
1993
1994
1995 /**
1996   Retrieves the next token in a token space.
1997   
1998   Retrieves the next PCD token number from the token space specified by Guid.  
1999   If Guid is NULL, then the default token space is used.  If TokenNumber is 0, 
2000   then the first token number is returned.  Otherwise, the token number that 
2001   follows TokenNumber in the token space is returned.  If TokenNumber is the last 
2002   token number in the token space, then 0 is returned.  
2003   
2004   If TokenNumber is not 0 and is not in the token space specified by Guid, then ASSERT().
2005
2006   @param[in]  Guid        Pointer to a 128-bit unique value that designates which namespace 
2007                           to set a value from.  If NULL, then the default token space is used.
2008   @param[in]  TokenNumber The previous PCD token number.  If 0, then retrieves the first PCD 
2009                           token number.
2010
2011   @return The next valid token number.
2012
2013 **/
2014 UINTN           
2015 EFIAPI
2016 LibPcdGetNextToken (
2017   IN CONST GUID               *Guid,       OPTIONAL
2018   IN UINTN                    TokenNumber
2019   );
2020
2021
2022
2023 /**
2024   Used to retrieve the list of available PCD token space GUIDs.
2025   
2026   Returns the PCD token space GUID that follows TokenSpaceGuid in the list of token spaces
2027   in the platform.
2028   If TokenSpaceGuid is NULL, then a pointer to the first PCD token spaces returned.
2029   If TokenSpaceGuid is the last PCD token space GUID in the list, then NULL is returned.
2030   
2031   @param  TokenSpaceGuid  Pointer to the a PCD token space GUID
2032
2033   @return The next valid token namespace.
2034
2035 **/
2036 GUID *
2037 EFIAPI
2038 LibPcdGetNextTokenSpace (
2039   IN CONST GUID  *TokenSpaceGuid
2040   );
2041
2042
2043 /**
2044   Sets a value of a patchable PCD entry that is type pointer.
2045   
2046   Sets the PCD entry specified by PatchVariable to the value specified by Buffer 
2047   and SizeOfBuffer.  Buffer is returned.  If SizeOfBuffer is greater than 
2048   MaximumDatumSize, then set SizeOfBuffer to MaximumDatumSize and return 
2049   NULL to indicate that the set operation was not actually performed.  
2050   If SizeOfBuffer is set to MAX_ADDRESS, then SizeOfBuffer must be set to 
2051   MaximumDatumSize and NULL must be returned.
2052   
2053   If PatchVariable is NULL, then ASSERT().
2054   If SizeOfBuffer is NULL, then ASSERT().
2055   If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT().
2056
2057   @param[out] PatchVariable     A pointer to the global variable in a module that is 
2058                                 the target of the set operation.
2059   @param[in] MaximumDatumSize   The maximum size allowed for the PCD entry specified by PatchVariable.
2060   @param[in, out] SizeOfBuffer  A pointer to the size, in bytes, of Buffer.
2061   @param[in] Buffer             A pointer to the buffer to used to set the target variable.
2062   
2063   @return Return the pointer to the Buffer that was set.
2064
2065 **/
2066 VOID *
2067 EFIAPI
2068 LibPatchPcdSetPtr (
2069   OUT        VOID       *PatchVariable,
2070   IN        UINTN       MaximumDatumSize,
2071   IN OUT    UINTN       *SizeOfBuffer,
2072   IN CONST  VOID        *Buffer
2073   );
2074
2075 /**
2076   Sets a value of a patchable PCD entry that is type pointer.
2077
2078   Sets the PCD entry specified by PatchVariable to the value specified
2079   by Buffer and SizeOfBuffer. If SizeOfBuffer is greater than MaximumDatumSize,
2080   then set SizeOfBuffer to MaximumDatumSize and return RETURN_INVALID_PARAMETER
2081   to indicate that the set operation was not actually performed.
2082   If SizeOfBuffer is set to MAX_ADDRESS, then SizeOfBuffer must be set to
2083   MaximumDatumSize and RETURN_INVALID_PARAMETER must be returned.
2084
2085   If PatchVariable is NULL, then ASSERT().
2086   If SizeOfBuffer is NULL, then ASSERT().
2087   If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT().
2088
2089   @param[out] PatchVariable     A pointer to the global variable in a module that is
2090                                 the target of the set operation.
2091   @param[in] MaximumDatumSize   The maximum size allowed for the PCD entry specified by PatchVariable.
2092   @param[in, out] SizeOfBuffer  A pointer to the size, in bytes, of Buffer.
2093   @param[in] Buffer             A pointer to the buffer to used to set the target variable.
2094   
2095   @return The status of the set operation.
2096
2097 **/
2098 RETURN_STATUS
2099 EFIAPI
2100 LibPatchPcdSetPtrS (
2101   OUT      VOID     *PatchVariable,
2102   IN       UINTN    MaximumDatumSize,
2103   IN OUT   UINTN    *SizeOfBuffer,
2104   IN CONST VOID     *Buffer
2105   );
2106
2107 /**
2108   Sets a value and size of a patchable PCD entry that is type pointer.
2109   
2110   Sets the PCD entry specified by PatchVariable to the value specified by Buffer 
2111   and SizeOfBuffer. Buffer is returned.  If SizeOfBuffer is greater than 
2112   MaximumDatumSize, then set SizeOfBuffer to MaximumDatumSize and return 
2113   NULL to indicate that the set operation was not actually performed.  
2114   If SizeOfBuffer is set to MAX_ADDRESS, then SizeOfBuffer must be set to 
2115   MaximumDatumSize and NULL must be returned.
2116   
2117   If PatchVariable is NULL, then ASSERT().
2118   If SizeOfPatchVariable is NULL, then ASSERT().
2119   If SizeOfBuffer is NULL, then ASSERT().
2120   If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT().
2121
2122   @param[out] PatchVariable     A pointer to the global variable in a module that is 
2123                                 the target of the set operation.
2124   @param[out] SizeOfPatchVariable A pointer to the size, in bytes, of PatchVariable.
2125   @param[in] MaximumDatumSize   The maximum size allowed for the PCD entry specified by PatchVariable.
2126   @param[in, out] SizeOfBuffer  A pointer to the size, in bytes, of Buffer.
2127   @param[in] Buffer             A pointer to the buffer to used to set the target variable.
2128   
2129   @return Return the pointer to the Buffer that was set.
2130
2131 **/
2132 VOID *
2133 EFIAPI
2134 LibPatchPcdSetPtrAndSize (
2135   OUT       VOID        *PatchVariable,
2136   OUT       UINTN       *SizeOfPatchVariable,
2137   IN        UINTN       MaximumDatumSize,
2138   IN OUT    UINTN       *SizeOfBuffer,
2139   IN CONST  VOID        *Buffer
2140   );
2141
2142 /**
2143   Sets a value and size of a patchable PCD entry that is type pointer.
2144
2145   Sets the PCD entry specified by PatchVariable to the value specified
2146   by Buffer and SizeOfBuffer. If SizeOfBuffer is greater than MaximumDatumSize,
2147   then set SizeOfBuffer to MaximumDatumSize and return RETURN_INVALID_PARAMETER
2148   to indicate that the set operation was not actually performed.
2149   If SizeOfBuffer is set to MAX_ADDRESS, then SizeOfBuffer must be set to
2150   MaximumDatumSize and RETURN_INVALID_PARAMETER must be returned.
2151
2152   If PatchVariable is NULL, then ASSERT().
2153   If SizeOfPatchVariable is NULL, then ASSERT().
2154   If SizeOfBuffer is NULL, then ASSERT().
2155   If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT().
2156
2157   @param[out] PatchVariable     A pointer to the global variable in a module that is
2158                                 the target of the set operation.
2159   @param[out] SizeOfPatchVariable A pointer to the size, in bytes, of PatchVariable.
2160   @param[in] MaximumDatumSize   The maximum size allowed for the PCD entry specified by PatchVariable.
2161   @param[in, out] SizeOfBuffer  A pointer to the size, in bytes, of Buffer.
2162   @param[in] Buffer             A pointer to the buffer to used to set the target variable.
2163   
2164   @return The status of the set operation.
2165
2166 **/
2167 RETURN_STATUS
2168 EFIAPI
2169 LibPatchPcdSetPtrAndSizeS (
2170   OUT      VOID     *PatchVariable,
2171   OUT      UINTN    *SizeOfPatchVariable,
2172   IN       UINTN    MaximumDatumSize,
2173   IN OUT   UINTN    *SizeOfBuffer,
2174   IN CONST VOID     *Buffer
2175   );
2176
2177 typedef enum {
2178   PCD_TYPE_8,
2179   PCD_TYPE_16,
2180   PCD_TYPE_32,
2181   PCD_TYPE_64,
2182   PCD_TYPE_BOOL,
2183   PCD_TYPE_PTR
2184 } PCD_TYPE;
2185
2186 typedef struct {
2187   ///
2188   /// The returned information associated with the requested TokenNumber. If
2189   /// TokenNumber is 0, then PcdType is set to PCD_TYPE_8.
2190   ///
2191   PCD_TYPE          PcdType;
2192   ///
2193   /// The size of the data in bytes associated with the TokenNumber specified. If
2194   /// TokenNumber is 0, then PcdSize is set 0.
2195   ///
2196   UINTN             PcdSize;
2197   ///
2198   /// The null-terminated ASCII string associated with a given token. If the
2199   /// TokenNumber specified was 0, then this field corresponds to the null-terminated
2200   /// ASCII string associated with the token's namespace Guid. If NULL, there is no
2201   /// name associated with this request.
2202   ///
2203   CHAR8             *PcdName;
2204 } PCD_INFO;
2205
2206
2207 /**
2208   Retrieve additional information associated with a PCD token.
2209
2210   This includes information such as the type of value the TokenNumber is associated with as well as possible
2211   human readable name that is associated with the token.
2212
2213   If TokenNumber is not in the default token space specified, then ASSERT().
2214
2215   @param[in]    TokenNumber The PCD token number.
2216   @param[out]   PcdInfo     The returned information associated with the requested TokenNumber.
2217                             The caller is responsible for freeing the buffer that is allocated by callee for PcdInfo->PcdName.
2218 **/
2219 VOID
2220 EFIAPI
2221 LibPcdGetInfo (
2222   IN        UINTN           TokenNumber,
2223   OUT       PCD_INFO        *PcdInfo
2224   );
2225
2226 /**
2227   Retrieve additional information associated with a PCD token.
2228
2229   This includes information such as the type of value the TokenNumber is associated with as well as possible
2230   human readable name that is associated with the token.
2231
2232   If TokenNumber is not in the token space specified by Guid, then ASSERT().
2233
2234   @param[in]    Guid        The 128-bit unique value that designates the namespace from which to extract the value.
2235   @param[in]    TokenNumber The PCD token number.
2236   @param[out]   PcdInfo     The returned information associated with the requested TokenNumber.
2237                             The caller is responsible for freeing the buffer that is allocated by callee for PcdInfo->PcdName.
2238 **/
2239 VOID
2240 EFIAPI
2241 LibPcdGetInfoEx (
2242   IN CONST  GUID            *Guid,
2243   IN        UINTN           TokenNumber,
2244   OUT       PCD_INFO        *PcdInfo
2245   );
2246
2247 /**
2248   Retrieve the currently set SKU Id.
2249
2250   @return   The currently set SKU Id. If the platform has not set at a SKU Id, then the
2251             default SKU Id value of 0 is returned. If the platform has set a SKU Id, then the currently set SKU
2252             Id is returned.
2253 **/
2254 UINTN
2255 EFIAPI
2256 LibPcdGetSku (
2257   VOID
2258   );
2259
2260 #endif