else:\r
IsValid = (len(FieldList) <= 3)\r
# Value, Size = ParseFieldValue(Value)\r
+ if Size:\r
+ try:\r
+ int(Size,16) if Size.upper().startswith("0X") else int(Size)\r
+ except:\r
+ IsValid = False\r
+ Size = -1\r
return [str(Value), '', str(Size)], IsValid, 0\r
elif PcdType in (MODEL_PCD_DYNAMIC_DEFAULT, MODEL_PCD_DYNAMIC_EX_DEFAULT):\r
Value = FieldList[0]\r
IsValid = (len(FieldList) <= 1)\r
else:\r
IsValid = (len(FieldList) <= 3)\r
- return [Value, Type, Size], IsValid, 0\r
+\r
+ if Size:\r
+ try:\r
+ int(Size,16) if Size.upper().startswith("0X") else int(Size)\r
+ except:\r
+ IsValid = False\r
+ Size = -1\r
+ return [Value, Type, str(Size)], IsValid, 0\r
elif PcdType in (MODEL_PCD_DYNAMIC_VPD, MODEL_PCD_DYNAMIC_EX_VPD):\r
VpdOffset = FieldList[0]\r
Value = Size = ''\r
IsValid = (len(FieldList) <= 1)\r
else:\r
IsValid = (len(FieldList) <= 3)\r
-\r
- return [VpdOffset, Size, Value], IsValid, 2\r
+ if Size:\r
+ try:\r
+ int(Size,16) if Size.upper().startswith("0X") else int(Size)\r
+ except:\r
+ IsValid = False\r
+ Size = -1\r
+ return [VpdOffset, str(Size), Value], IsValid, 2\r
elif PcdType in (MODEL_PCD_DYNAMIC_HII, MODEL_PCD_DYNAMIC_EX_HII):\r
HiiString = FieldList[0]\r
Guid = Offset = Value = Attribute = ''\r
Value = (Value << 8) | int(ByteList[index])\r
return Value\r
\r
+class DefaultStore():\r
+ def __init__(self,DefaultStores ):\r
\r
+ self.DefaultStores = DefaultStores\r
+ def DefaultStoreID(self,DefaultStoreName):\r
+ for key,value in self.DefaultStores.items():\r
+ if value == DefaultStoreName:\r
+ return key\r
+ return None\r
+ def GetDefaultDefault(self):\r
+ if not self.DefaultStores or "0" in self.DefaultStores:\r
+ return "0",TAB_DEFAULT_STORES_DEFAULT\r
+ else:\r
+ minvalue = min([int(value_str) for value_str in self.DefaultStores.keys()])\r
+ return (str(minvalue), self.DefaultStores[str(minvalue)])\r
+ def GetMin(self,DefaultSIdList):\r
+ if not DefaultSIdList:\r
+ return "STANDARD"\r
+ storeidset = {storeid for storeid, storename in self.DefaultStores.values() if storename in DefaultSIdList}\r
+ if not storeidset:\r
+ return ""\r
+ minid = min(storeidset )\r
+ for sid,name in self.DefaultStores.values():\r
+ if sid == minid:\r
+ return name\r
class SkuClass():\r
\r
DEFAULT = 0\r
SINGLE = 1\r
MULTIPLE =2\r
\r
- def __init__(self,SkuIdentifier='', SkuIds={}):\r
+ def __init__(self,SkuIdentifier='', SkuIds=None):\r
+ if SkuIds is None:\r
+ SkuIds = {}\r
+\r
+ for SkuName in SkuIds:\r
+ SkuId = SkuIds[SkuName][0]\r
+ skuid_num = int(SkuId,16) if SkuId.upper().startswith("0X") else int(SkuId)\r
+ if skuid_num > 0xFFFFFFFFFFFFFFFF:\r
+ EdkLogger.error("build", PARAMETER_INVALID,\r
+ ExtraData = "SKU-ID [%s] value %s exceeds the max value of UINT64"\r
+ % (SkuName, SkuId))\r
\r
self.AvailableSkuIds = sdict()\r
self.SkuIdSet = []\r
self.SkuIdNumberSet = []\r
+ self.SkuData = SkuIds\r
+ self.__SkuInherit = {}\r
+ self.__SkuIdentifier = SkuIdentifier\r
if SkuIdentifier == '' or SkuIdentifier is None:\r
self.SkuIdSet = ['DEFAULT']\r
self.SkuIdNumberSet = ['0U']\r
elif SkuIdentifier == 'ALL':\r
self.SkuIdSet = SkuIds.keys()\r
- self.SkuIdNumberSet = [num.strip() + 'U' for num in SkuIds.values()]\r
+ self.SkuIdNumberSet = [num[0].strip() + 'U' for num in SkuIds.values()]\r
else:\r
r = SkuIdentifier.split('|') \r
- self.SkuIdSet=[r[k].strip() for k in range(len(r))] \r
+ self.SkuIdSet=[(r[k].strip()).upper() for k in range(len(r))]\r
k = None\r
try: \r
- self.SkuIdNumberSet = [SkuIds[k].strip() + 'U' for k in self.SkuIdSet] \r
+ self.SkuIdNumberSet = [SkuIds[k][0].strip() + 'U' for k in self.SkuIdSet]\r
except Exception:\r
EdkLogger.error("build", PARAMETER_INVALID,\r
ExtraData = "SKU-ID [%s] is not supported by the platform. [Valid SKU-ID: %s]"\r
% (k, " | ".join(SkuIds.keys())))\r
- if len(self.SkuIdSet) == 2 and 'DEFAULT' in self.SkuIdSet and SkuIdentifier != 'ALL':\r
- self.SkuIdSet.remove('DEFAULT')\r
- self.SkuIdNumberSet.remove('0U')\r
for each in self.SkuIdSet:\r
if each in SkuIds:\r
- self.AvailableSkuIds[each] = SkuIds[each]\r
+ self.AvailableSkuIds[each] = SkuIds[each][0]\r
else:\r
EdkLogger.error("build", PARAMETER_INVALID,\r
ExtraData="SKU-ID [%s] is not supported by the platform. [Valid SKU-ID: %s]"\r
% (each, " | ".join(SkuIds.keys())))\r
+ if self.SkuUsageType != self.SINGLE:\r
+ self.AvailableSkuIds.update({'DEFAULT':0, 'COMMON':0})\r
+ if self.SkuIdSet:\r
+ GlobalData.gSkuids = (self.SkuIdSet)\r
+ if 'COMMON' in GlobalData.gSkuids:\r
+ GlobalData.gSkuids.remove('COMMON')\r
+ if GlobalData.gSkuids:\r
+ GlobalData.gSkuids.sort()\r
+\r
+ def GetNextSkuId(self, skuname):\r
+ if not self.__SkuInherit:\r
+ self.__SkuInherit = {}\r
+ for item in self.SkuData.values():\r
+ self.__SkuInherit[item[1]]=item[2] if item[2] else "DEFAULT"\r
+ return self.__SkuInherit.get(skuname,"DEFAULT")\r
+\r
+ def GetSkuChain(self,sku):\r
+ skulist = [sku]\r
+ nextsku = sku\r
+ while 1:\r
+ nextsku = self.GetNextSkuId(nextsku)\r
+ skulist.append(nextsku)\r
+ if nextsku == "DEFAULT":\r
+ break\r
+ skulist.reverse()\r
+ return skulist\r
+ def SkuOverrideOrder(self):\r
+ skuorderset = []\r
+ for skuname in self.SkuIdSet:\r
+ skuorderset.append(self.GetSkuChain(skuname))\r
\r
+ skuorder = []\r
+ for index in range(max([len(item) for item in skuorderset])):\r
+ for subset in skuorderset:\r
+ if index > len(subset)-1:\r
+ continue\r
+ if subset[index] in skuorder:\r
+ continue\r
+ skuorder.append(subset[index])\r
+\r
+ return skuorder\r
+\r
def __SkuUsageType(self): \r
\r
+ if self.__SkuIdentifier.upper() == "ALL":\r
+ return SkuClass.MULTIPLE\r
+\r
if len(self.SkuIdSet) == 1:\r
if self.SkuIdSet[0] == 'DEFAULT':\r
return SkuClass.DEFAULT\r
else:\r
return SkuClass.SINGLE\r
+ elif len(self.SkuIdSet) == 2:\r
+ if 'DEFAULT' in self.SkuIdSet:\r
+ return SkuClass.SINGLE\r
+ else:\r
+ return SkuClass.MULTIPLE\r
else:\r
return SkuClass.MULTIPLE\r
+ def DumpSkuIdArrary(self):\r
\r
+ ArrayStrList = []\r
+ if self.SkuUsageType == SkuClass.SINGLE:\r
+ ArrayStr = "{0x0}"\r
+ else:\r
+ for skuname in self.AvailableSkuIds:\r
+ if skuname == "COMMON":\r
+ continue\r
+ while skuname != "DEFAULT":\r
+ ArrayStrList.append(hex(int(self.AvailableSkuIds[skuname])))\r
+ skuname = self.GetNextSkuId(skuname)\r
+ ArrayStrList.append("0x0")\r
+ ArrayStr = "{" + ",".join(ArrayStrList) + "}"\r
+ return ArrayStr\r
def __GetAvailableSkuIds(self):\r
return self.AvailableSkuIds\r
\r
def __GetSystemSkuID(self):\r
if self.__SkuUsageType() == SkuClass.SINGLE:\r
- return self.SkuIdSet[0]\r
+ if len(self.SkuIdSet) == 1:\r
+ return self.SkuIdSet[0]\r
+ else:\r
+ return self.SkuIdSet[0] if self.SkuIdSet[0] != 'DEFAULT' else self.SkuIdSet[1]\r
else:\r
return 'DEFAULT'\r
def __GetAvailableSkuIdNumber(self):\r