Revision: 17173
http://sourceforge.net/p/edk2/code/17173
Author: lzeng14
Date: 2015-04-14 08:54:11 +0000 (Tue, 14 Apr 2015)
Log Message:
-----------
MdeModulePkg Pcd: Check the input SkuId in SetSku()
then GetSku() could return the currently active SkuId.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Star Zeng <[email protected]>
Reviewed-by: Liming Gao <[email protected]>
Modified Paths:
--------------
trunk/edk2/MdeModulePkg/Universal/PCD/Dxe/Pcd.c
trunk/edk2/MdeModulePkg/Universal/PCD/Dxe/Service.c
trunk/edk2/MdeModulePkg/Universal/PCD/Pei/Pcd.c
trunk/edk2/MdeModulePkg/Universal/PCD/Pei/Service.c
Modified: trunk/edk2/MdeModulePkg/Universal/PCD/Dxe/Pcd.c
===================================================================
--- trunk/edk2/MdeModulePkg/Universal/PCD/Dxe/Pcd.c 2015-04-14 06:29:13 UTC
(rev 17172)
+++ trunk/edk2/MdeModulePkg/Universal/PCD/Dxe/Pcd.c 2015-04-14 08:54:11 UTC
(rev 17173)
@@ -152,21 +152,16 @@
ASSERT_EFI_ERROR (Status);
//
- // Only install PcdInfo PROTOCOL when PCD info content is present.
+ // Install GET_PCD_INFO_PROTOCOL to handle dynamic type PCD
+ // Install EFI_GET_PCD_INFO_PROTOCOL to handle dynamicEx type PCD
//
- if (mPcdDatabase.DxeDb->PcdNameTableOffset != 0) {
- //
- // Install GET_PCD_INFO_PROTOCOL to handle dynamic type PCD
- // Install EFI_GET_PCD_INFO_PROTOCOL to handle dynamicEx type PCD
- //
- Status = gBS->InstallMultipleProtocolInterfaces (
- &mPcdHandle,
- &gGetPcdInfoProtocolGuid, &mGetPcdInfoInstance,
- &gEfiGetPcdInfoProtocolGuid, &mEfiGetPcdInfoInstance,
- NULL
- );
- ASSERT_EFI_ERROR (Status);
- }
+ Status = gBS->InstallMultipleProtocolInterfaces (
+ &mPcdHandle,
+ &gGetPcdInfoProtocolGuid, &mGetPcdInfoInstance,
+ &gEfiGetPcdInfoProtocolGuid, &mEfiGetPcdInfoInstance,
+ NULL
+ );
+ ASSERT_EFI_ERROR (Status);
//
// Register callback function upon VariableLockProtocol
@@ -274,8 +269,22 @@
IN UINTN SkuId
)
{
- mPcdDatabase.DxeDb->SystemSkuId = (SKU_ID) SkuId;
-
+ SKU_ID *SkuIdTable;
+ UINTN Index;
+
+ SkuIdTable = (SKU_ID *) ((UINT8 *) mPcdDatabase.DxeDb +
mPcdDatabase.DxeDb->SkuIdTableOffset);
+ for (Index = 0; Index < SkuIdTable[0]; Index++) {
+ if (SkuId == SkuIdTable[Index + 1]) {
+ mPcdDatabase.DxeDb->SystemSkuId = (SKU_ID) SkuId;
+ return;
+ }
+ }
+
+ //
+ // Invalid input SkuId, the default SKU Id will be used for the system.
+ //
+ DEBUG ((EFI_D_INFO, "PcdDxe - Invalid input SkuId, the default SKU Id will
be used.\n"));
+ mPcdDatabase.DxeDb->SystemSkuId = (SKU_ID) 0;
return;
}
Modified: trunk/edk2/MdeModulePkg/Universal/PCD/Dxe/Service.c
===================================================================
--- trunk/edk2/MdeModulePkg/Universal/PCD/Dxe/Service.c 2015-04-14 06:29:13 UTC
(rev 17172)
+++ trunk/edk2/MdeModulePkg/Universal/PCD/Dxe/Service.c 2015-04-14 08:54:11 UTC
(rev 17173)
@@ -2,7 +2,7 @@
Help functions used by PCD DXE driver.
Copyright (c) 2014, Hewlett-Packard Development Company, L.P.<BR>
-Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD
License
which accompanies this distribution. The full text of the license may be
found at
@@ -148,6 +148,19 @@
CHAR8 *Name;
//
+ // Return NULL when PCD name table is absent.
+ //
+ if (IsPeiDb) {
+ if (mPcdDatabase.PeiDb->PcdNameTableOffset == 0) {
+ return NULL;
+ }
+ } else {
+ if (mPcdDatabase.DxeDb->PcdNameTableOffset == 0) {
+ return NULL;
+ }
+ }
+
+ //
// TokenNumber Zero is reserved as PCD_INVALID_TOKEN_NUMBER.
// We have to decrement TokenNumber by 1 to make it usable
// as the array index.
Modified: trunk/edk2/MdeModulePkg/Universal/PCD/Pei/Pcd.c
===================================================================
--- trunk/edk2/MdeModulePkg/Universal/PCD/Pei/Pcd.c 2015-04-14 06:29:13 UTC
(rev 17172)
+++ trunk/edk2/MdeModulePkg/Universal/PCD/Pei/Pcd.c 2015-04-14 08:54:11 UTC
(rev 17173)
@@ -1,7 +1,7 @@
/** @file
All Pcd Ppi services are implemented here.
-Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD
License
which accompanies this distribution. The full text of the license may be
found at
@@ -158,15 +158,10 @@
ASSERT_EFI_ERROR (Status);
//
- // Only install PcdInfo PPI when PCD info content is present.
+ // Install GET_PCD_INFO_PPI and EFI_GET_PCD_INFO_PPI.
//
- if (DataBase->PcdNameTableOffset != 0) {
- //
- // Install GET_PCD_INFO_PPI and EFI_GET_PCD_INFO_PPI.
- //
- Status = PeiServicesInstallPpi (&mPpiList2[0]);
- ASSERT_EFI_ERROR (Status);
- }
+ Status = PeiServicesInstallPpi (&mPpiList2[0]);
+ ASSERT_EFI_ERROR (Status);
return Status;
}
@@ -262,9 +257,24 @@
IN UINTN SkuId
)
{
+ PEI_PCD_DATABASE *PeiPcdDb;
+ SKU_ID *SkuIdTable;
+ UINTN Index;
- GetPcdDatabase()->SystemSkuId = (SKU_ID) SkuId;
+ PeiPcdDb = GetPcdDatabase();
+ SkuIdTable = (SKU_ID *) ((UINT8 *) PeiPcdDb + PeiPcdDb->SkuIdTableOffset);
+ for (Index = 0; Index < SkuIdTable[0]; Index++) {
+ if (SkuId == SkuIdTable[Index + 1]) {
+ PeiPcdDb->SystemSkuId = (SKU_ID) SkuId;
+ return;
+ }
+ }
+ //
+ // Invalid input SkuId, the default SKU Id will be used for the system.
+ //
+ DEBUG ((EFI_D_INFO, "PcdPei - Invalid input SkuId, the default SKU Id will
be used.\n"));
+ PeiPcdDb->SystemSkuId = (SKU_ID) 0;
return;
}
Modified: trunk/edk2/MdeModulePkg/Universal/PCD/Pei/Service.c
===================================================================
--- trunk/edk2/MdeModulePkg/Universal/PCD/Pei/Service.c 2015-04-14 06:29:13 UTC
(rev 17172)
+++ trunk/edk2/MdeModulePkg/Universal/PCD/Pei/Service.c 2015-04-14 08:54:11 UTC
(rev 17173)
@@ -2,7 +2,7 @@
The driver internal functions are implmented here.
They build Pei PCD database, and provide access service to PCD database.
-Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD
License
which accompanies this distribution. The full text of the license may be
found at
@@ -113,6 +113,13 @@
CHAR8 *Name;
//
+ // Return NULL when PCD name table is absent.
+ //
+ if (Database->PcdNameTableOffset == 0) {
+ return NULL;
+ }
+
+ //
// TokenNumber Zero is reserved as PCD_INVALID_TOKEN_NUMBER.
// We have to decrement TokenNumber by 1 to make it usable
// as the array index.
------------------------------------------------------------------------------
BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT
Develop your own process in accordance with the BPMN 2 standard
Learn Process modeling best practices with Bonita BPM through live exercises
http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual- event?utm_
source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_campaign=VA_SF
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits