if os.path.exists(VpdMapFilePath):\r
OrgVpdFile.Read(VpdMapFilePath)\r
PcdItems = OrgVpdFile.GetOffset(PcdNvStoreDfBuffer[0])\r
- NvStoreOffset = PcdItems[0].strip() if PcdItems else '0'\r
+ NvStoreOffset = PcdItems.values()[0].strip() if PcdItems else '0'\r
else:\r
EdkLogger.error("build", FILE_READ_FAILURE, "Can not find VPD map file %s to fix up VPD offset." % VpdMapFilePath)\r
\r
PcdKey in VpdPcdDict:\r
Pcd = VpdPcdDict[PcdKey]\r
SkuValueMap = {}\r
+ DefaultSku = Pcd.SkuInfoList.get('DEFAULT')\r
+ if DefaultSku:\r
+ PcdValue = DefaultSku.DefaultValue\r
+ if PcdValue not in SkuValueMap:\r
+ SkuValueMap[PcdValue] = []\r
+ VpdFile.Add(Pcd, 'DEFAULT',DefaultSku.VpdOffset)\r
+ SkuValueMap[PcdValue].append(DefaultSku)\r
+\r
for (SkuName,Sku) in Pcd.SkuInfoList.items():\r
Sku.VpdOffset = Sku.VpdOffset.strip()\r
PcdValue = Sku.DefaultValue\r
EdkLogger.error("build", FORMAT_INVALID, 'The offset value of PCD %s.%s should be %s-byte aligned.' % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName, Alignment))\r
if PcdValue not in SkuValueMap:\r
SkuValueMap[PcdValue] = []\r
- VpdFile.Add(Pcd, Sku.VpdOffset)\r
+ VpdFile.Add(Pcd, SkuName,Sku.VpdOffset)\r
SkuValueMap[PcdValue].append(Sku)\r
# if the offset of a VPD is *, then it need to be fixed up by third party tool.\r
if not NeedProcessVpdMapFile and Sku.VpdOffset == "*":\r
if not FoundFlag :\r
# just pick the a value to determine whether is unicode string type\r
SkuValueMap = {}\r
+ DefaultSku = DscPcdEntry.SkuInfoList.get('DEFAULT')\r
+ if DefaultSku:\r
+ PcdValue = DefaultSku.DefaultValue\r
+ if PcdValue not in SkuValueMap:\r
+ SkuValueMap[PcdValue] = []\r
+ VpdFile.Add(DscPcdEntry, 'DEFAULT',Sku.VpdOffset)\r
+ SkuValueMap[PcdValue].append(Sku)\r
for (SkuName,Sku) in DscPcdEntry.SkuInfoList.items():\r
Sku.VpdOffset = Sku.VpdOffset.strip() \r
\r
EdkLogger.error("build", FORMAT_INVALID, 'The offset value of PCD %s.%s should be %s-byte aligned.' % (DscPcdEntry.TokenSpaceGuidCName, DscPcdEntry.TokenCName, Alignment))\r
if PcdValue not in SkuValueMap:\r
SkuValueMap[PcdValue] = []\r
- VpdFile.Add(DscPcdEntry, Sku.VpdOffset)\r
+ VpdFile.Add(DscPcdEntry, SkuName,Sku.VpdOffset)\r
SkuValueMap[PcdValue].append(Sku)\r
if not NeedProcessVpdMapFile and Sku.VpdOffset == "*":\r
NeedProcessVpdMapFile = True \r
#\r
# @param offset integer value for VPD's offset in specific SKU.\r
#\r
- def Add(self, Vpd, Offset):\r
+ def Add(self, Vpd, skuname,Offset):\r
if (Vpd == None):\r
EdkLogger.error("VpdInfoFile", BuildToolError.ATTRIBUTE_UNKNOWN_ERROR, "Invalid VPD PCD entry.")\r
\r
#\r
# If there is no Vpd instance in dict, that imply this offset for a given SKU is a new one \r
#\r
- self._VpdArray[Vpd] = [Offset]\r
- else:\r
- #\r
- # If there is an offset for a specific SKU in dict, then append this offset for other sku to array.\r
- #\r
- self._VpdArray[Vpd].append(Offset)\r
+ self._VpdArray[Vpd] = {}\r
+\r
+ self._VpdArray[Vpd].update({skuname:Offset})\r
\r
\r
## Generate VPD PCD information into a text file\r
for PcdItem in GlobalData.MixedPcd:\r
if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName) in GlobalData.MixedPcd[PcdItem]:\r
PcdTokenCName = PcdItem[0]\r
- for Offset in self._VpdArray[Pcd]:\r
- PcdValue = str(Pcd.SkuInfoList[Pcd.SkuInfoList.keys()[i]].DefaultValue).strip()\r
+ for skuname in self._VpdArray[Pcd]:\r
+ PcdValue = str(Pcd.SkuInfoList[skuname].DefaultValue).strip()\r
if PcdValue == "" :\r
PcdValue = Pcd.DefaultValue\r
\r
- Content += "%s.%s|%s|%s|%s|%s \n" % (Pcd.TokenSpaceGuidCName, PcdTokenCName, str(Pcd.SkuInfoList.keys()[i]),str(Offset).strip(), str(Pcd.MaxDatumSize).strip(),PcdValue)\r
+ Content += "%s.%s|%s|%s|%s|%s \n" % (Pcd.TokenSpaceGuidCName, PcdTokenCName, skuname,str(self._VpdArray[Pcd][skuname]).strip(), str(Pcd.MaxDatumSize).strip(),PcdValue)\r
i += 1\r
\r
return SaveFileOnChange(FilePath, Content, False)\r
VpdObjectTokenCName = PcdItem[0]\r
for sku in VpdObject.SkuInfoList.keys():\r
if VpdObject.TokenSpaceGuidCName == TokenSpaceName and VpdObjectTokenCName == PcdTokenName.strip() and sku == SkuId:\r
- if self._VpdArray[VpdObject][VpdObject.SkuInfoList.keys().index(sku)] == "*":\r
+ if self._VpdArray[VpdObject][sku] == "*":\r
if Offset == "*":\r
EdkLogger.error("BPDG", BuildToolError.FORMAT_INVALID, "The offset of %s has not been fixed up by third-party BPDG tool." % PcdName) \r
- self._VpdArray[VpdObject][VpdObject.SkuInfoList.keys().index(sku)] = Offset\r
+ self._VpdArray[VpdObject][sku] = Offset\r
Found = True\r
if not Found:\r
EdkLogger.error("BPDG", BuildToolError.PARSER_ERROR, "Can not find PCD defined in VPD guid file.")\r
Pcds = {}\r
DefaultStoreObj = DefaultStore(self._GetDefaultStores())\r
SkuIds = set([(skuid,skuobj.SkuId) for pcdobj in PcdSet.values() for skuid,skuobj in pcdobj.SkuInfoList.items()])\r
+ SkuIds = self.SkuIdMgr.AvailableSkuIdSet\r
DefaultStores = set([storename for pcdobj in PcdSet.values() for skuobj in pcdobj.SkuInfoList.values() for storename in skuobj.DefaultStoreDict.keys()])\r
for PcdCName, TokenSpaceGuid in PcdSet:\r
PcdObj = PcdSet[(PcdCName, TokenSpaceGuid)]\r
if defaultstorename not in skuobj.DefaultStoreDict:\r
skuobj.DefaultStoreDict[defaultstorename] = copy.deepcopy(skuobj.DefaultStoreDict[mindefaultstorename])\r
skuobj.HiiDefaultValue = skuobj.DefaultStoreDict[mindefaultstorename]\r
- for skuname,skuid in SkuIds:\r
+ for skuname,skuid in SkuIds.items():\r
if skuname not in PcdObj.SkuInfoList:\r
nextskuid = self.SkuIdMgr.GetNextSkuId(skuname)\r
while nextskuid not in PcdObj.SkuInfoList:\r