4 Copyright (c) 2006, Intel Corporation
5 All rights reserved. This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
21 PCD_PROTOCOL mPcdInstance
= {
54 PcdRegisterCallBackOnSet
,
55 PcdUnRegisterCallBackOnSet
,
61 // Static global to reduce the code size
63 static EFI_HANDLE NewHandle
= NULL
;
68 IN EFI_HANDLE ImageHandle
,
69 IN EFI_SYSTEM_TABLE
*SystemTable
75 // Make sure the Pcd Protocol is not already installed in the system
78 ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL
, &gPcdProtocolGuid
);
80 BuildPcdDxeDataBase ();
83 // BugBug Check if PcdDatabase is already installed.
86 Status
= gBS
->InstallProtocolInterface (
93 ASSERT_EFI_ERROR (Status
);
106 return gPcdDatabase
->PeiDb
.Init
.SystemSkuId
= (SKU_ID
) SkuId
;
117 ASSERT (sizeof (UINT8
) == DxePcdGetSize (TokenNumber
));
119 return *((UINT8
*) GetWorker (TokenNumber
));
130 ASSERT (sizeof (UINT16
) == DxePcdGetSize (TokenNumber
));
132 return ReadUnaligned16 (GetWorker (TokenNumber
));
143 ASSERT (sizeof (UINT32
) == DxePcdGetSize (TokenNumber
));
145 return ReadUnaligned32 (GetWorker (TokenNumber
));
156 ASSERT (sizeof (UINT64
) == DxePcdGetSize (TokenNumber
));
158 return ReadUnaligned64(GetWorker (TokenNumber
));
169 return GetWorker (TokenNumber
);
180 ASSERT (sizeof (BOOLEAN
) == DxePcdGetSize (TokenNumber
));
182 return *((BOOLEAN
*) GetWorker (TokenNumber
));
195 SizeTable
= (TokenNumber
< PEI_LOCAL_TOKEN_NUMBER
) ? gPcdDatabase
->PeiDb
.Init
.SizeTable
:
196 gPcdDatabase
->DxeDb
.Init
.SizeTable
;
199 TokenNumber
= (TokenNumber
< PEI_LOCAL_TOKEN_NUMBER
) ? TokenNumber
: (TokenNumber
- PEI_LOCAL_TOKEN_NUMBER
);
201 return SizeTable
[TokenNumber
];
209 IN CONST EFI_GUID
*Guid
,
210 IN UINTN ExTokenNumber
213 return *((UINT8
*) ExGetWorker (Guid
, ExTokenNumber
, sizeof(UINT8
)));
221 IN CONST EFI_GUID
*Guid
,
222 IN UINTN ExTokenNumber
225 return *((UINT16
*) ExGetWorker (Guid
, ExTokenNumber
, sizeof(UINT16
)));
233 IN CONST EFI_GUID
*Guid
,
234 IN UINTN ExTokenNumber
237 return *((UINT32
*) ExGetWorker (Guid
, ExTokenNumber
, sizeof(UINT32
)));
245 IN CONST EFI_GUID
*Guid
,
246 IN UINTN ExTokenNumber
250 // BugBug: Must be changed to ReadUnaligned64
252 return *((UINT64
*) ExGetWorker (Guid
, ExTokenNumber
, sizeof(UINT64
)));
260 IN CONST EFI_GUID
*Guid
,
261 IN UINTN ExTokenNumber
264 return ExGetWorker (Guid
, ExTokenNumber
, 0);
272 IN CONST EFI_GUID
*Guid
,
273 IN UINTN ExTokenNumber
276 return *((BOOLEAN
*) ExGetWorker (Guid
, ExTokenNumber
, sizeof(BOOLEAN
)));
284 IN CONST EFI_GUID
*Guid
,
285 IN UINTN ExTokenNumber
288 EX_PCD_ENTRY_ATTRIBUTE Attr
;
290 GetExPcdTokenAttributes (Guid
, ExTokenNumber
, &Attr
);
300 IN UINTN TokenNumber
,
304 return SetWorker (TokenNumber
, &Value
, sizeof (Value
), FALSE
);
312 IN UINTN TokenNumber
,
316 return SetWorker (TokenNumber
, &Value
, sizeof (Value
), FALSE
);
324 IN UINTN TokenNumber
,
328 return SetWorker (TokenNumber
, &Value
, sizeof (Value
), FALSE
);
336 IN UINTN TokenNumber
,
340 return SetWorker (TokenNumber
, &Value
, sizeof (Value
), FALSE
);
348 IN UINTN TokenNumber
,
353 // BugBug, please change the Size to Input size when sync with spec
355 //ASSERT (sizeof (Value) == DxePcdGetSize (TokenNumber));
357 return SetWorker (TokenNumber
, (VOID
*)Value
, DxePcdGetSize (TokenNumber
), TRUE
);
365 IN UINTN TokenNumber
,
369 return SetWorker (TokenNumber
, &Value
, sizeof (Value
), FALSE
);
377 IN CONST EFI_GUID
*Guid
,
378 IN UINTN ExTokenNumber
,
396 IN CONST EFI_GUID
*Guid
,
397 IN UINTN ExTokenNumber
,
415 IN CONST EFI_GUID
*Guid
,
416 IN UINTN ExTokenNumber
,
434 IN CONST EFI_GUID
*Guid
,
435 IN UINTN ExTokenNumber
,
453 IN CONST EFI_GUID
*Guid
,
454 IN UINTN ExTokenNumber
,
472 IN CONST EFI_GUID
*Guid
,
473 IN UINTN ExTokenNumber
,
491 PcdRegisterCallBackOnSet (
492 IN UINTN TokenNumber
,
493 IN CONST EFI_GUID
*Guid
, OPTIONAL
494 IN PCD_PROTOCOL_CALLBACK CallBackFunction
497 return DxeRegisterCallBackWorker (TokenNumber
, Guid
, CallBackFunction
, TRUE
);
504 PcdUnRegisterCallBackOnSet (
505 IN UINTN TokenNumber
,
506 IN CONST EFI_GUID
*Guid
, OPTIONAL
507 IN PCD_PROTOCOL_CALLBACK CallBackFunction
510 return DxeRegisterCallBackWorker (TokenNumber
, Guid
, CallBackFunction
, FALSE
);
518 IN CONST EFI_GUID
*Guid
, OPTIONAL
519 IN OUT UINTN
*TokenNumber
522 return DxeGetNextTokenWorker (TokenNumber
, Guid
);