## The look up table of the supported opcode in the dependency expression binaries\r
gOpCodeList = ["BEFORE", "AFTER", "PUSH", "AND", "OR", "NOT", "TRUE", "FALSE", "END", "SOR"]\r
\r
+## Save VPD Pcd\r
+VPDPcdList = []\r
+\r
##\r
# Writes a string to the file object.\r
#\r
FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, ' ', TypeName, '(' + Pcd.DatumType + ')', '(' + SkuIdName + ')', Value))\r
if TypeName in ('DYNVPD', 'DEXVPD'):\r
FileWrite(File, '%*s' % (self.MaxLen + 4, SkuInfo.VpdOffset))\r
+ VPDPcdItem = (Pcd.TokenSpaceGuidCName + '.' + PcdTokenCName, SkuIdName, SkuInfo.VpdOffset, Pcd.MaxDatumSize, SkuInfo.DefaultValue)\r
+ if VPDPcdItem not in VPDPcdList:\r
+ VPDPcdList.append(VPDPcdItem)\r
if IsStructure:\r
FiledOverrideFlag = False\r
OverrideValues = Pcd.SkuOverrideValues[Sku]\r
self.Size = Fd.Size\r
self.FdRegionList = [FdRegionReport(FdRegion, Wa) for FdRegion in Fd.RegionList]\r
self.FvPath = os.path.join(Wa.BuildDir, TAB_FV_DIRECTORY)\r
- self.VpdFilePath = os.path.join(self.FvPath, "%s.map" % Wa.Platform.VpdToolGuid)\r
self.VPDBaseAddress = 0\r
self.VPDSize = 0\r
- self.VPDInfoList = []\r
for index, FdRegion in enumerate(Fd.RegionList):\r
if str(FdRegion.RegionType) is 'FILE' and Wa.Platform.VpdToolGuid in str(FdRegion.RegionDataList):\r
self.VPDBaseAddress = self.FdRegionList[index].BaseAddress\r
self.VPDSize = self.FdRegionList[index].Size\r
break\r
\r
- if os.path.isfile(self.VpdFilePath):\r
- fd = open(self.VpdFilePath, "r")\r
- Lines = fd.readlines()\r
- for Line in Lines:\r
- Line = Line.strip()\r
- if len(Line) == 0 or Line.startswith("#"):\r
- continue\r
- try:\r
- PcdName, SkuId, Offset, Size, Value = Line.split("#")[0].split("|")\r
- PcdName, SkuId, Offset, Size, Value = PcdName.strip(), SkuId.strip(), Offset.strip(), Size.strip(), Value.strip()\r
- if Offset.lower().startswith('0x'):\r
- Offset = '0x%08X' % (int(Offset, 16) + self.VPDBaseAddress)\r
- else:\r
- Offset = '0x%08X' % (int(Offset, 10) + self.VPDBaseAddress)\r
- self.VPDInfoList.append("%s | %s | %s | %s | %s" % (PcdName, SkuId, Offset, Size, Value))\r
- except:\r
- EdkLogger.error("BuildReport", CODE_ERROR, "Fail to parse VPD information file %s" % self.VpdFilePath)\r
- fd.close()\r
-\r
##\r
# Generate report for the firmware device.\r
#\r
for FdRegionItem in self.FdRegionList:\r
FdRegionItem.GenerateReport(File)\r
\r
- if len(self.VPDInfoList) > 0:\r
+ if VPDPcdList:\r
+ VPDPcdList.sort(key=lambda x: int(x[2], 0))\r
FileWrite(File, gSubSectionStart)\r
FileWrite(File, "FD VPD Region")\r
FileWrite(File, "Base Address: 0x%X" % self.VPDBaseAddress)\r
FileWrite(File, "Size: 0x%X (%.0fK)" % (self.VPDSize, self.VPDSize / 1024.0))\r
FileWrite(File, gSubSectionSep)\r
- for item in self.VPDInfoList:\r
- ValueList = item.split('|')\r
- Value = ValueList[-1].strip()\r
- IsByteArray, ArrayList = ByteArrayForamt(Value)\r
+ for item in VPDPcdList:\r
+ # Add BaseAddress for offset\r
+ Offset = '0x%08X' % (int(item[2], 16) + self.VPDBaseAddress)\r
+ IsByteArray, ArrayList = ByteArrayForamt(item[-1])\r
+ Skuinfo = item[1]\r
+ if len(GlobalData.gSkuids) == 1 :\r
+ Skuinfo = GlobalData.gSkuids[0]\r
if IsByteArray:\r
- ValueList[-1] = ' {'\r
- FileWrite(File, '|'.join(ValueList))\r
+ FileWrite(File, "%s | %s | %s | %s | %s" % (item[0], Skuinfo, Offset, item[3], '{'))\r
for Array in ArrayList:\r
FileWrite(File, Array)\r
else:\r
- FileWrite(File, item)\r
+ FileWrite(File, "%s | %s | %s | %s | %s" % (item[0], Skuinfo, Offset, item[3], item[-1]))\r
FileWrite(File, gSubSectionEnd)\r
FileWrite(File, gSectionEnd)\r
\r