public static void SetPackagePowerLimitValues(PackagePowerLimitIndex idx, PackagePowerLimit ppl, PackagePowerLimitMask mask) { double pwr, erg, tme; GetRaplPowerUnits(out pwr, out erg, out tme); if ((mask & PackagePowerLimitMask.PowerLimit) == PackagePowerLimitMask.PowerLimit) { switch (idx) { case PackagePowerLimitIndex._1: SetRegisterValue(PropertiesRAPL_RegLocations.Instance.PkgPowerLimit1_MSR, PropertiesRAPL_RegLocations.Instance.PkgPowerLimit1_BitRange, (ulong)(ppl.PowerLimit / pwr)); break; case PackagePowerLimitIndex._2: SetRegisterValue(PropertiesRAPL_RegLocations.Instance.PkgPowerLimit2_MSR, PropertiesRAPL_RegLocations.Instance.PkgPowerLimit2_BitRange, (ulong)(ppl.PowerLimit / pwr)); break; } } if ((mask & PackagePowerLimitMask.TimeWindowForPowerLimit) == PackagePowerLimitMask.TimeWindowForPowerLimit) { ulong encodedTimeVal = EncodeTimeWindowForPowerLimit(ppl.TimeWindowForPowerLimit, tme); switch (idx) { case PackagePowerLimitIndex._1: SetRegisterValue(PropertiesRAPL_RegLocations.Instance.TimeWindowPowerLimit1_MSR, PropertiesRAPL_RegLocations.Instance.TimeWindowPowerLimit1_BitRange, encodedTimeVal); break; case PackagePowerLimitIndex._2: SetRegisterValue(PropertiesRAPL_RegLocations.Instance.TimeWindowPowerLimit2_MSR, PropertiesRAPL_RegLocations.Instance.TimeWindowPowerLimit2_BitRange, encodedTimeVal); break; } } if ((mask & PackagePowerLimitMask.EnablePowerLimit) == PackagePowerLimitMask.EnablePowerLimit) { switch (idx) { case PackagePowerLimitIndex._1: SetRegisterValue(PropertiesRAPL_RegLocations.Instance.EnablePowerLimit1_MSR, PropertiesRAPL_RegLocations.Instance.EnablePowerLimit1_Bit, ppl.EnablePowerLimit); break; case PackagePowerLimitIndex._2: SetRegisterValue(PropertiesRAPL_RegLocations.Instance.EnablePowerLimit2_MSR, PropertiesRAPL_RegLocations.Instance.EnablePowerLimit2_Bit, ppl.EnablePowerLimit); break; } } if ((mask & PackagePowerLimitMask.PackageClampingLimitation) == PackagePowerLimitMask.PackageClampingLimitation) { switch (idx) { case PackagePowerLimitIndex._1: SetRegisterValue(PropertiesRAPL_RegLocations.Instance.PackageClampingLimit1_MSR, PropertiesRAPL_RegLocations.Instance.PackageClampingLimit1_Bit, ppl.PackageClampingLimitation); break; case PackagePowerLimitIndex._2: SetRegisterValue(PropertiesRAPL_RegLocations.Instance.PackageClampingLimit2_MSR, PropertiesRAPL_RegLocations.Instance.PackageClampingLimit2_Bit, ppl.PackageClampingLimitation); break; } } }
public static PackagePowerLimit GetPackagePowerLimitValues(PackagePowerLimitIndex idx) { double pwr, erg, tme; GetRaplPowerUnits(out pwr, out erg, out tme); PackagePowerLimit pplv = new PackagePowerLimit(); switch (idx) { case PackagePowerLimitIndex._1: pplv.PowerLimit = GetPackagePowerLimit1_RegVal() * pwr; pplv.TimeWindowForPowerLimit = DecodeTimeWindowForPowerLimit(GetTimeWindowPowerLimit1_RegVal(), tme); pplv.EnablePowerLimit = GetRegisterValue(PropertiesRAPL_RegLocations.Instance.EnablePowerLimit1_MSR, PropertiesRAPL_RegLocations.Instance.EnablePowerLimit1_Bit); pplv.PackageClampingLimitation = GetRegisterValue(PropertiesRAPL_RegLocations.Instance.PackageClampingLimit1_MSR, PropertiesRAPL_RegLocations.Instance.PackageClampingLimit1_Bit); break; case PackagePowerLimitIndex._2: pplv.PowerLimit = GetPackagePowerLimit2_RegVal() * pwr; pplv.TimeWindowForPowerLimit = DecodeTimeWindowForPowerLimit(GetTimeWindowPowerLimit2_RegVal(), tme); pplv.EnablePowerLimit = GetRegisterValue(PropertiesRAPL_RegLocations.Instance.EnablePowerLimit2_MSR, PropertiesRAPL_RegLocations.Instance.EnablePowerLimit2_Bit); pplv.PackageClampingLimitation = GetRegisterValue(PropertiesRAPL_RegLocations.Instance.PackageClampingLimit2_MSR, PropertiesRAPL_RegLocations.Instance.PackageClampingLimit2_Bit); break; } return pplv; }