]> git.proxmox.com Git - mirror_edk2.git/blame - EdkModulePkg/Universal/PCD/Pei/Pcd.c
Check in the Pcd service Driver/PEIM according to the new way of generating PCD Database
[mirror_edk2.git] / EdkModulePkg / Universal / PCD / Pei / Pcd.c
CommitLineData
52e1905d 1/** @file PCD PEIM\r
878ddf1f 2\r
3Copyright (c) 2006, Intel Corporation \r
4All rights reserved. This program and the accompanying materials \r
5are licensed and made available under the terms and conditions of the BSD License \r
6which accompanies this distribution. The full text of the license may be found at \r
7http://opensource.org/licenses/bsd-license.php \r
8 \r
9THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
10WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
11\r
12\r
13Module Name: Pcd.c\r
14\r
15**/\r
16\r
52e1905d 17#include "PcdCommon.h"\r
878ddf1f 18#include "Service.h"\r
19\r
20\r
21PCD_PPI mPcdPpiInstance = {\r
22 PeiPcdSetSku,\r
23\r
24 PeiPcdGet8,\r
25 PeiPcdGet16, \r
26 PeiPcdGet32, \r
27 PeiPcdGet64, \r
28 PeiPcdGetPtr, \r
29 PeiPcdGetBool, \r
30 PeiPcdGetSize,\r
31\r
32 PeiPcdGet8Ex,\r
33 PeiPcdGet16Ex, \r
34 PeiPcdGet32Ex, \r
35 PeiPcdGet64Ex, \r
36 PeiPcdGetPtrEx, \r
37 PeiPcdGetBoolEx, \r
38 PeiPcdGetSizeEx,\r
39 \r
40 PeiPcdSet8,\r
41 PeiPcdSet16, \r
42 PeiPcdSet32, \r
43 PeiPcdSet64, \r
44 PeiPcdSetPtr, \r
45 PeiPcdSetBool, \r
46\r
47 PeiPcdSet8Ex,\r
48 PeiPcdSet16Ex, \r
49 PeiPcdSet32Ex, \r
50 PeiPcdSet64Ex, \r
51 PeiPcdSetPtrEx, \r
52 PeiPcdSetBoolEx,\r
53\r
54 PcdRegisterCallBackOnSet,\r
55 PcdUnRegisterCallBackOnSet,\r
56 PeiPcdGetNextToken\r
57};\r
58\r
59\r
60\r
61STATIC EFI_PEI_PPI_DESCRIPTOR mPpiPCD = {\r
62 (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),\r
63 &gPcdPpiGuid,\r
64 &mPcdPpiInstance\r
65};\r
66\r
67\r
68\r
69EFI_STATUS\r
70EFIAPI\r
71PcdPeimInit (\r
72 IN EFI_FFS_FILE_HEADER *FfsHeader,\r
73 IN EFI_PEI_SERVICES **PeiServices\r
74 )\r
75{\r
76 EFI_STATUS Status;\r
878ddf1f 77\r
52e1905d 78 BuildPcdDatabase ();\r
79 \r
878ddf1f 80 Status = PeiCoreInstallPpi (&mPpiPCD);\r
81\r
82 ASSERT_EFI_ERROR (Status);\r
83 \r
84 return EFI_SUCCESS;\r
85}\r
86\r
878ddf1f 87EFI_STATUS\r
88EFIAPI\r
89PeiPcdSetSku (\r
90 IN UINTN SkuId\r
91 )\r
92{\r
878ddf1f 93\r
52e1905d 94 GetPcdDatabase()->Init.SystemSkuId = (SKU_ID) SkuId;\r
878ddf1f 95\r
52e1905d 96 return EFI_SUCCESS;\r
878ddf1f 97}\r
98\r
99\r
100\r
101UINT8\r
102EFIAPI\r
103PeiPcdGet8 (\r
104 IN UINTN TokenNumber\r
105 )\r
106{\r
52e1905d 107 return *((UINT8 *) GetWorker (TokenNumber, sizeof (UINT8)));\r
878ddf1f 108}\r
109\r
110\r
111\r
112UINT16\r
113EFIAPI\r
114PeiPcdGet16 (\r
115 IN UINTN TokenNumber\r
116 )\r
117{\r
52e1905d 118 return ReadUnaligned16 (GetWorker (TokenNumber, sizeof (UINT16)));\r
878ddf1f 119}\r
120\r
121\r
122\r
123UINT32\r
124EFIAPI\r
125PeiPcdGet32 (\r
126 IN UINTN TokenNumber\r
127 )\r
128{\r
52e1905d 129 return ReadUnaligned32 (GetWorker (TokenNumber, sizeof (UINT32)));\r
878ddf1f 130}\r
131\r
132\r
133\r
134UINT64\r
135EFIAPI\r
136PeiPcdGet64 (\r
137 IN UINTN TokenNumber\r
138 )\r
139{\r
52e1905d 140 return ReadUnaligned64 (GetWorker (TokenNumber, sizeof (UINT64)));\r
878ddf1f 141}\r
142\r
143\r
144\r
145VOID *\r
146EFIAPI\r
147PeiPcdGetPtr (\r
148 IN UINTN TokenNumber\r
149 )\r
150{\r
52e1905d 151 return GetWorker (TokenNumber, 0);\r
878ddf1f 152}\r
153\r
154\r
155\r
156BOOLEAN\r
157EFIAPI\r
158PeiPcdGetBool (\r
159 IN UINTN TokenNumber\r
160 )\r
161{\r
52e1905d 162 return *((BOOLEAN *) GetWorker (TokenNumber, sizeof (BOOLEAN)));\r
878ddf1f 163}\r
164\r
165\r
166\r
167UINTN\r
168EFIAPI\r
169PeiPcdGetSize (\r
170 IN UINTN TokenNumber\r
171 )\r
172{\r
52e1905d 173 ASSERT (TokenNumber < PEI_LOCAL_TOKEN_NUMBER);\r
174\r
175 return GetPcdDatabase()->Init.SizeTable[TokenNumber];\r
878ddf1f 176}\r
177\r
178\r
179\r
180UINT8\r
181EFIAPI\r
182PeiPcdGet8Ex (\r
183 IN CONST EFI_GUID *Guid,\r
52e1905d 184 IN UINTN ExTokenNumber\r
878ddf1f 185 )\r
186{\r
52e1905d 187 return *((UINT8 *) ExGetWorker (Guid, ExTokenNumber, sizeof (UINT8)));\r
878ddf1f 188}\r
189\r
190\r
191\r
192UINT16\r
193EFIAPI\r
194PeiPcdGet16Ex (\r
195 IN CONST EFI_GUID *Guid,\r
52e1905d 196 IN UINTN ExTokenNumber\r
878ddf1f 197 )\r
198{\r
52e1905d 199 return ReadUnaligned16 (ExGetWorker (Guid, ExTokenNumber, sizeof (UINT16)));\r
878ddf1f 200}\r
201\r
202\r
203\r
204UINT32\r
205EFIAPI\r
206PeiPcdGet32Ex (\r
207 IN CONST EFI_GUID *Guid,\r
52e1905d 208 IN UINTN ExTokenNumber\r
878ddf1f 209 )\r
210{\r
52e1905d 211 return ReadUnaligned32 (ExGetWorker (Guid, ExTokenNumber, sizeof (UINT32)));\r
878ddf1f 212}\r
213\r
214\r
215\r
216UINT64\r
217EFIAPI\r
218PeiPcdGet64Ex (\r
219 IN CONST EFI_GUID *Guid,\r
52e1905d 220 IN UINTN ExTokenNumber\r
878ddf1f 221 )\r
222{\r
52e1905d 223 return ReadUnaligned64 (ExGetWorker (Guid, ExTokenNumber, sizeof (UINT64)));\r
878ddf1f 224}\r
225\r
226\r
227\r
228VOID *\r
229EFIAPI\r
230PeiPcdGetPtrEx (\r
231 IN CONST EFI_GUID *Guid,\r
52e1905d 232 IN UINTN ExTokenNumber\r
878ddf1f 233 )\r
234{\r
52e1905d 235 return ExGetWorker (Guid, ExTokenNumber, 0);\r
878ddf1f 236}\r
237\r
238\r
239\r
240BOOLEAN\r
241EFIAPI\r
242PeiPcdGetBoolEx (\r
243 IN CONST EFI_GUID *Guid,\r
52e1905d 244 IN UINTN ExTokenNumber\r
878ddf1f 245 )\r
246{\r
52e1905d 247 return *((BOOLEAN *) ExGetWorker (Guid, ExTokenNumber, sizeof (BOOLEAN)));\r
878ddf1f 248}\r
249\r
250\r
251\r
252UINTN\r
253EFIAPI\r
254PeiPcdGetSizeEx (\r
255 IN CONST EFI_GUID *Guid,\r
52e1905d 256 IN UINTN ExTokenNumber\r
878ddf1f 257 )\r
258{\r
52e1905d 259 EX_PCD_ENTRY_ATTRIBUTE Attr;\r
260\r
261 GetExPcdTokenAttributes (Guid, ExTokenNumber, &Attr);\r
262 \r
263 return Attr.Size;\r
878ddf1f 264}\r
265\r
266\r
267\r
268EFI_STATUS\r
269EFIAPI\r
270PeiPcdSet8 (\r
271 IN UINTN TokenNumber,\r
272 IN UINT8 Value\r
273 )\r
274{\r
52e1905d 275 return SetWorker (TokenNumber, &Value, sizeof (Value), FALSE);\r
878ddf1f 276}\r
277\r
278\r
279\r
280EFI_STATUS\r
281EFIAPI\r
282PeiPcdSet16 (\r
283 IN UINTN TokenNumber,\r
284 IN UINT16 Value\r
285 )\r
286{\r
52e1905d 287 return SetWorker (TokenNumber, &Value, sizeof (Value), FALSE);\r
878ddf1f 288}\r
289\r
290\r
291\r
292EFI_STATUS\r
293EFIAPI\r
294PeiPcdSet32 (\r
295 IN UINTN TokenNumber,\r
296 IN UINT32 Value\r
297 )\r
298{\r
52e1905d 299 return SetWorker (TokenNumber, &Value, sizeof (Value), FALSE);\r
878ddf1f 300}\r
301\r
302\r
303\r
304EFI_STATUS\r
305EFIAPI\r
306PeiPcdSet64 (\r
307 IN UINTN TokenNumber,\r
308 IN UINT64 Value\r
309 )\r
310{\r
52e1905d 311 return SetWorker (TokenNumber, &Value, sizeof (Value), FALSE);\r
878ddf1f 312}\r
313\r
314\r
315EFI_STATUS\r
316EFIAPI\r
317PeiPcdSetPtr (\r
318 IN UINTN TokenNumber,\r
319 IN CONST VOID *Value\r
320 )\r
321{\r
52e1905d 322 //\r
323 // BugBug, please change the Size to Input size when sync with spec\r
324 //\r
325 //ASSERT (sizeof (Value) == GetPcdDatabase()->Init.SizeTable[TokenNumber]);\r
326\r
327 return SetWorker (TokenNumber, (VOID *) Value, GetPcdDatabase()->Init.SizeTable[TokenNumber], TRUE);\r
878ddf1f 328}\r
329\r
330\r
331\r
332EFI_STATUS\r
333EFIAPI\r
334PeiPcdSetBool (\r
335 IN UINTN TokenNumber,\r
336 IN BOOLEAN Value\r
337 )\r
338{\r
52e1905d 339 return SetWorker (TokenNumber, &Value, sizeof (Value), FALSE);\r
878ddf1f 340}\r
341\r
342\r
343\r
344EFI_STATUS\r
345EFIAPI\r
346PeiPcdSet8Ex (\r
347 IN CONST EFI_GUID *Guid,\r
52e1905d 348 IN UINTN ExTokenNumber,\r
878ddf1f 349 IN UINT8 Value\r
350 )\r
351{\r
52e1905d 352 return ExSetWorker(\r
353 ExTokenNumber, \r
354 Guid,\r
355 &Value, \r
356 sizeof (Value), \r
357 FALSE\r
358 );\r
878ddf1f 359}\r
360\r
361\r
362\r
363EFI_STATUS\r
364EFIAPI\r
365PeiPcdSet16Ex (\r
366 IN CONST EFI_GUID *Guid,\r
52e1905d 367 IN UINTN ExTokenNumber,\r
878ddf1f 368 IN UINT16 Value\r
369 )\r
370{\r
52e1905d 371 return ExSetWorker(\r
372 ExTokenNumber, \r
373 Guid,\r
374 &Value, \r
375 sizeof (Value), \r
376 FALSE\r
377 );\r
878ddf1f 378}\r
379\r
380\r
381\r
382EFI_STATUS\r
383EFIAPI\r
384PeiPcdSet32Ex (\r
385 IN CONST EFI_GUID *Guid,\r
52e1905d 386 IN UINTN ExTokenNumber,\r
878ddf1f 387 IN UINT32 Value\r
388 )\r
389{\r
52e1905d 390 return ExSetWorker(\r
391 ExTokenNumber, \r
392 Guid,\r
393 &Value, \r
394 sizeof (Value), \r
395 FALSE\r
396 );\r
878ddf1f 397}\r
398\r
399\r
400\r
401EFI_STATUS\r
402EFIAPI\r
403PeiPcdSet64Ex (\r
404 IN CONST EFI_GUID *Guid,\r
52e1905d 405 IN UINTN ExTokenNumber,\r
878ddf1f 406 IN UINT64 Value\r
407 )\r
408{\r
52e1905d 409 return ExSetWorker(\r
410 ExTokenNumber, \r
411 Guid,\r
412 &Value, \r
413 sizeof (Value), \r
414 FALSE\r
415 );\r
878ddf1f 416}\r
417\r
418\r
419\r
420EFI_STATUS\r
421EFIAPI\r
422PeiPcdSetPtrEx (\r
423 IN CONST EFI_GUID *Guid,\r
52e1905d 424 IN UINTN ExTokenNumber,\r
878ddf1f 425 IN CONST VOID *Value\r
426 )\r
427{\r
52e1905d 428 return ExSetWorker(\r
429 ExTokenNumber, \r
430 Guid,\r
431 (VOID *) Value, \r
432 sizeof (Value), \r
433 TRUE\r
434 );\r
878ddf1f 435}\r
436\r
437\r
438\r
439EFI_STATUS\r
440EFIAPI\r
441PeiPcdSetBoolEx (\r
442 IN CONST EFI_GUID *Guid,\r
52e1905d 443 IN UINTN ExTokenNumber,\r
878ddf1f 444 IN BOOLEAN Value\r
445 )\r
446{\r
52e1905d 447 return ExSetWorker(\r
448 ExTokenNumber, \r
449 Guid,\r
450 &Value, \r
451 sizeof (Value), \r
452 FALSE\r
453 );\r
878ddf1f 454}\r
455\r
456\r
457\r
458\r
459EFI_STATUS\r
460EFIAPI\r
461PcdRegisterCallBackOnSet (\r
52e1905d 462 IN UINTN ExTokenNumber,\r
878ddf1f 463 IN CONST EFI_GUID *Guid, OPTIONAL\r
464 IN PCD_PPI_CALLBACK CallBackFunction\r
465 )\r
466{\r
52e1905d 467 return PeiRegisterCallBackWorker (ExTokenNumber, Guid, CallBackFunction, TRUE);\r
878ddf1f 468}\r
469\r
470\r
471\r
472EFI_STATUS\r
473EFIAPI\r
474PcdUnRegisterCallBackOnSet (\r
52e1905d 475 IN UINTN ExTokenNumber,\r
878ddf1f 476 IN CONST EFI_GUID *Guid, OPTIONAL\r
477 IN PCD_PPI_CALLBACK CallBackFunction\r
478 )\r
479{\r
52e1905d 480 return PeiRegisterCallBackWorker (ExTokenNumber, Guid, CallBackFunction, FALSE);\r
878ddf1f 481}\r
482\r
483\r
484\r
485EFI_STATUS\r
486EFIAPI\r
487PeiPcdGetNextToken (\r
488 IN CONST EFI_GUID *Guid, OPTIONAL\r
489 IN OUT UINTN *TokenNumber\r
490 )\r
491{\r
52e1905d 492 if (Guid == NULL) {\r
493 *TokenNumber++;\r
494\r
495 if (*TokenNumber >= PEI_LOCAL_TOKEN_NUMBER) {\r
496 *TokenNumber = 0;\r
497 }\r
498 }\r
499\r
500 //\r
501 // BugBug: Haven't implemented the portion to get Next Token for GuidSpace is not Local GuidSpace.\r
502 //\r
503\r
504 return EFI_SUCCESS;\r
878ddf1f 505}\r
506\r
507\r