X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=BaseTools%2FSource%2FPython%2FCommon%2FMisc.py;h=549c8791765ffc0c46f381dbda5ce9d7b7ddb61d;hb=520365decb26e5176ec2bb614f11ddeaa495de54;hp=3ae2ec5b59b2204a505e7f06e115d9235ff2eb33;hpb=34952f493c24c02f5eba6ae86ed758d3311cddb1;p=mirror_edk2.git diff --git a/BaseTools/Source/Python/Common/Misc.py b/BaseTools/Source/Python/Common/Misc.py index 3ae2ec5b59..549c879176 100644 --- a/BaseTools/Source/Python/Common/Misc.py +++ b/BaseTools/Source/Python/Common/Misc.py @@ -1611,6 +1611,12 @@ def AnalyzeDscPcd(Setting, PcdType, DataType=''): else: IsValid = (len(FieldList) <= 3) # Value, Size = ParseFieldValue(Value) + if Size: + try: + int(Size,16) if Size.upper().startswith("0X") else int(Size) + except: + IsValid = False + Size = -1 return [str(Value), '', str(Size)], IsValid, 0 elif PcdType in (MODEL_PCD_DYNAMIC_DEFAULT, MODEL_PCD_DYNAMIC_EX_DEFAULT): Value = FieldList[0] @@ -1633,7 +1639,14 @@ def AnalyzeDscPcd(Setting, PcdType, DataType=''): IsValid = (len(FieldList) <= 1) else: IsValid = (len(FieldList) <= 3) - return [Value, Type, Size], IsValid, 0 + + if Size: + try: + int(Size,16) if Size.upper().startswith("0X") else int(Size) + except: + IsValid = False + Size = -1 + return [Value, Type, str(Size)], IsValid, 0 elif PcdType in (MODEL_PCD_DYNAMIC_VPD, MODEL_PCD_DYNAMIC_EX_VPD): VpdOffset = FieldList[0] Value = Size = '' @@ -1649,8 +1662,13 @@ def AnalyzeDscPcd(Setting, PcdType, DataType=''): IsValid = (len(FieldList) <= 1) else: IsValid = (len(FieldList) <= 3) - - return [VpdOffset, Size, Value], IsValid, 2 + if Size: + try: + int(Size,16) if Size.upper().startswith("0X") else int(Size) + except: + IsValid = False + Size = -1 + return [VpdOffset, str(Size), Value], IsValid, 2 elif PcdType in (MODEL_PCD_DYNAMIC_HII, MODEL_PCD_DYNAMIC_EX_HII): HiiString = FieldList[0] Guid = Offset = Value = Attribute = '' @@ -2093,44 +2111,84 @@ class PeImageClass(): Value = (Value << 8) | int(ByteList[index]) return Value +class DefaultStore(): + def __init__(self,DefaultStores ): + self.DefaultStores = DefaultStores + def DefaultStoreID(self,DefaultStoreName): + for key,value in self.DefaultStores.items(): + if value == DefaultStoreName: + return key + return None + def GetDefaultDefault(self): + if not self.DefaultStores or "0" in self.DefaultStores: + return "0",TAB_DEFAULT_STORES_DEFAULT + else: + minvalue = min([int(value_str) for value_str in self.DefaultStores.keys()]) + return (str(minvalue), self.DefaultStores[str(minvalue)]) + def GetMin(self,DefaultSIdList): + if not DefaultSIdList: + return "STANDARD" + storeidset = {storeid for storeid, storename in self.DefaultStores.values() if storename in DefaultSIdList} + if not storeidset: + return "" + minid = min(storeidset ) + for sid,name in self.DefaultStores.values(): + if sid == minid: + return name class SkuClass(): DEFAULT = 0 SINGLE = 1 MULTIPLE =2 - def __init__(self,SkuIdentifier='', SkuIds={}): + def __init__(self,SkuIdentifier='', SkuIds=None): + if SkuIds is None: + SkuIds = {} self.AvailableSkuIds = sdict() self.SkuIdSet = [] self.SkuIdNumberSet = [] + self.SkuData = SkuIds + self.__SkuInherit = {} if SkuIdentifier == '' or SkuIdentifier is None: self.SkuIdSet = ['DEFAULT'] self.SkuIdNumberSet = ['0U'] elif SkuIdentifier == 'ALL': self.SkuIdSet = SkuIds.keys() - self.SkuIdNumberSet = [num.strip() + 'U' for num in SkuIds.values()] + self.SkuIdNumberSet = [num[0].strip() + 'U' for num in SkuIds.values()] else: r = SkuIdentifier.split('|') - self.SkuIdSet=[r[k].strip() for k in range(len(r))] + self.SkuIdSet=[(r[k].strip()).upper() for k in range(len(r))] k = None try: - self.SkuIdNumberSet = [SkuIds[k].strip() + 'U' for k in self.SkuIdSet] + self.SkuIdNumberSet = [SkuIds[k][0].strip() + 'U' for k in self.SkuIdSet] except Exception: EdkLogger.error("build", PARAMETER_INVALID, ExtraData = "SKU-ID [%s] is not supported by the platform. [Valid SKU-ID: %s]" % (k, " | ".join(SkuIds.keys()))) - if len(self.SkuIdSet) == 2 and 'DEFAULT' in self.SkuIdSet and SkuIdentifier != 'ALL': - self.SkuIdSet.remove('DEFAULT') - self.SkuIdNumberSet.remove('0U') for each in self.SkuIdSet: if each in SkuIds: - self.AvailableSkuIds[each] = SkuIds[each] + self.AvailableSkuIds[each] = SkuIds[each][0] else: EdkLogger.error("build", PARAMETER_INVALID, ExtraData="SKU-ID [%s] is not supported by the platform. [Valid SKU-ID: %s]" % (each, " | ".join(SkuIds.keys()))) + if self.SkuUsageType != self.SINGLE: + self.AvailableSkuIds.update({'DEFAULT':0, 'COMMON':0}) + if self.SkuIdSet: + GlobalData.gSkuids = (self.SkuIdSet) + if 'COMMON' in GlobalData.gSkuids: + GlobalData.gSkuids.remove('COMMON') + if GlobalData.gSkuids: + GlobalData.gSkuids.sort() + + def GetNextSkuId(self, skuname): + if not self.__SkuInherit: + self.__SkuInherit = {} + for item in self.SkuData.values(): + self.__SkuInherit[item[1]]=item[2] if item[2] else "DEFAULT" + return self.__SkuInherit.get(skuname,"DEFAULT") def __SkuUsageType(self): @@ -2141,7 +2199,21 @@ class SkuClass(): return SkuClass.SINGLE else: return SkuClass.MULTIPLE + def DumpSkuIdArrary(self): + ArrayStrList = [] + if self.SkuUsageType == SkuClass.SINGLE: + ArrayStr = "{0x0}" + else: + for skuname in self.AvailableSkuIds: + if skuname == "COMMON": + continue + while skuname != "DEFAULT": + ArrayStrList.append(hex(int(self.AvailableSkuIds[skuname]))) + skuname = self.GetNextSkuId(skuname) + ArrayStrList.append("0x0") + ArrayStr = "{" + ",".join(ArrayStrList) + "}" + return ArrayStr def __GetAvailableSkuIds(self): return self.AvailableSkuIds