ASSERT_EFI_ERROR (Status);\r
\r
//\r
- // Only install PcdInfo PROTOCOL when PCD info content is present. \r
+ // Install GET_PCD_INFO_PROTOCOL to handle dynamic type PCD\r
+ // Install EFI_GET_PCD_INFO_PROTOCOL to handle dynamicEx type PCD\r
//\r
- if (mPcdDatabase.DxeDb->PcdNameTableOffset != 0) {\r
- //\r
- // Install GET_PCD_INFO_PROTOCOL to handle dynamic type PCD\r
- // Install EFI_GET_PCD_INFO_PROTOCOL to handle dynamicEx type PCD\r
- //\r
- Status = gBS->InstallMultipleProtocolInterfaces (\r
- &mPcdHandle,\r
- &gGetPcdInfoProtocolGuid, &mGetPcdInfoInstance,\r
- &gEfiGetPcdInfoProtocolGuid, &mEfiGetPcdInfoInstance,\r
- NULL\r
- );\r
- ASSERT_EFI_ERROR (Status);\r
- }\r
+ Status = gBS->InstallMultipleProtocolInterfaces (\r
+ &mPcdHandle,\r
+ &gGetPcdInfoProtocolGuid, &mGetPcdInfoInstance,\r
+ &gEfiGetPcdInfoProtocolGuid, &mEfiGetPcdInfoInstance,\r
+ NULL\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
\r
//\r
// Register callback function upon VariableLockProtocol\r
IN UINTN SkuId\r
)\r
{\r
- mPcdDatabase.DxeDb->SystemSkuId = (SKU_ID) SkuId;\r
- \r
+ SKU_ID *SkuIdTable;\r
+ UINTN Index;\r
+\r
+ SkuIdTable = (SKU_ID *) ((UINT8 *) mPcdDatabase.DxeDb + mPcdDatabase.DxeDb->SkuIdTableOffset);\r
+ for (Index = 0; Index < SkuIdTable[0]; Index++) {\r
+ if (SkuId == SkuIdTable[Index + 1]) {\r
+ mPcdDatabase.DxeDb->SystemSkuId = (SKU_ID) SkuId;\r
+ return;\r
+ }\r
+ }\r
+\r
+ //\r
+ // Invalid input SkuId, the default SKU Id will be used for the system.\r
+ //\r
+ DEBUG ((EFI_D_INFO, "PcdDxe - Invalid input SkuId, the default SKU Id will be used.\n"));\r
+ mPcdDatabase.DxeDb->SystemSkuId = (SKU_ID) 0;\r
return;\r
}\r
\r