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 gPcdDatabase
->PeiDb
.Init
.SystemSkuId
= SkuId
;
119 ASSERT (sizeof (UINT8
) == DxePcdGetSize (TokenNumber
));
121 return *((UINT8
*) GetWorker (TokenNumber
));
132 ASSERT (sizeof (UINT16
) == DxePcdGetSize (TokenNumber
));
134 return ReadUnaligned16 (GetWorker (TokenNumber
));
145 ASSERT (sizeof (UINT32
) == DxePcdGetSize (TokenNumber
));
147 return ReadUnaligned32 (GetWorker (TokenNumber
));
158 ASSERT (sizeof (UINT64
) == DxePcdGetSize (TokenNumber
));
160 return ReadUnaligned64(GetWorker (TokenNumber
));
171 return GetWorker (TokenNumber
);
182 ASSERT (sizeof (BOOLEAN
) == DxePcdGetSize (TokenNumber
));
184 return *((BOOLEAN
*) GetWorker (TokenNumber
));
197 SizeTable
= (TokenNumber
< PEI_LOCAL_TOKEN_NUMBER
) ? gPcdDatabase
->PeiDb
.Init
.SizeTable
:
198 gPcdDatabase
->DxeDb
.Init
.SizeTable
;
201 TokenNumber
= (TokenNumber
< PEI_LOCAL_TOKEN_NUMBER
) ? TokenNumber
: (TokenNumber
- PEI_LOCAL_TOKEN_NUMBER
);
203 return SizeTable
[TokenNumber
];
211 IN CONST EFI_GUID
*Guid
,
212 IN UINTN ExTokenNumber
215 return *((UINT8
*) ExGetWorker (Guid
, ExTokenNumber
, sizeof(UINT8
)));
223 IN CONST EFI_GUID
*Guid
,
224 IN UINTN ExTokenNumber
227 return *((UINT16
*) ExGetWorker (Guid
, ExTokenNumber
, sizeof(UINT16
)));
235 IN CONST EFI_GUID
*Guid
,
236 IN UINTN ExTokenNumber
239 return *((UINT32
*) ExGetWorker (Guid
, ExTokenNumber
, sizeof(UINT32
)));
247 IN CONST EFI_GUID
*Guid
,
248 IN UINTN ExTokenNumber
252 // BugBug: Must be changed to ReadUnaligned64
254 return *((UINT64
*) ExGetWorker (Guid
, ExTokenNumber
, sizeof(UINT64
)));
262 IN CONST EFI_GUID
*Guid
,
263 IN UINTN ExTokenNumber
266 return ExGetWorker (Guid
, ExTokenNumber
, 0);
274 IN CONST EFI_GUID
*Guid
,
275 IN UINTN ExTokenNumber
278 return *((BOOLEAN
*) ExGetWorker (Guid
, ExTokenNumber
, sizeof(BOOLEAN
)));
286 IN CONST EFI_GUID
*Guid
,
287 IN UINTN ExTokenNumber
290 EX_PCD_ENTRY_ATTRIBUTE Attr
;
292 GetExPcdTokenAttributes (Guid
, ExTokenNumber
, &Attr
);
302 IN UINTN TokenNumber
,
306 return SetWorker (TokenNumber
, &Value
, sizeof (Value
), FALSE
);
314 IN UINTN TokenNumber
,
318 return SetWorker (TokenNumber
, &Value
, sizeof (Value
), FALSE
);
326 IN UINTN TokenNumber
,
330 return SetWorker (TokenNumber
, &Value
, sizeof (Value
), FALSE
);
338 IN UINTN TokenNumber
,
342 return SetWorker (TokenNumber
, &Value
, sizeof (Value
), FALSE
);
350 IN UINTN TokenNumber
,
351 IN UINTN SizeOfBuffer
,
355 return SetWorker (TokenNumber
, Buffer
, SizeOfBuffer
, TRUE
);
363 IN UINTN TokenNumber
,
367 return SetWorker (TokenNumber
, &Value
, sizeof (Value
), FALSE
);
375 IN CONST EFI_GUID
*Guid
,
376 IN UINTN ExTokenNumber
,
394 IN CONST EFI_GUID
*Guid
,
395 IN UINTN ExTokenNumber
,
413 IN CONST EFI_GUID
*Guid
,
414 IN UINTN ExTokenNumber
,
432 IN CONST EFI_GUID
*Guid
,
433 IN UINTN ExTokenNumber
,
451 IN CONST EFI_GUID
*Guid
,
452 IN UINTN ExTokenNumber
,
453 IN UINTN SizeOfBuffer
,
471 IN CONST EFI_GUID
*Guid
,
472 IN UINTN ExTokenNumber
,
490 PcdRegisterCallBackOnSet (
491 IN UINTN TokenNumber
,
492 IN CONST EFI_GUID
*Guid
, OPTIONAL
493 IN PCD_PROTOCOL_CALLBACK CallBackFunction
496 return DxeRegisterCallBackWorker (TokenNumber
, Guid
, CallBackFunction
, TRUE
);
503 PcdUnRegisterCallBackOnSet (
504 IN UINTN TokenNumber
,
505 IN CONST EFI_GUID
*Guid
, OPTIONAL
506 IN PCD_PROTOCOL_CALLBACK CallBackFunction
509 return DxeRegisterCallBackWorker (TokenNumber
, Guid
, CallBackFunction
, FALSE
);
517 IN CONST EFI_GUID
*Guid
, OPTIONAL
518 IN OUT UINTN
*TokenNumber
521 return DxeGetNextTokenWorker (TokenNumber
, Guid
);