예제 #1
0
        public ServiceDialog(System.Drawing.Icon icon)
        {
            InitializeComponent();

            this.Icon = icon;

            makePermanentCheckBox.CheckedChanged += (s, e) => updateButton.Enabled = makePermanentCheckBox.Checked;
            turboCheckBox.CheckedChanged         += (s, e) =>
            {
                if (turboCheckBox.Checked)
                {
                    enableCustomCnQCheckBox.Checked = false;
                    enableCustomCnQCheckBox.Enabled = false;
                }
                else
                {
                    enableCustomCnQCheckBox.Enabled = true;
                }
            };
            enableCustomCnQCheckBox.CheckedChanged += (s, e) => tabControl1.Enabled = enableCustomCnQCheckBox.Checked;

            // select the current P-state settings as default settings
            updateButton_Click(updateButton, EventArgs.Empty);

            turboCheckBox.Enabled = K10Manager.IsTurboSupported();
            turboCheckBox.Checked = K10Manager.IsTurboSupported();

            balancedProfileControl.LoadFromRegistry();
            highPerformanceProfileControl.LoadFromRegistry();
            powerSaverProfileControl.LoadFromRegistry();

            var key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"Software\BrazosTweaker");

            if (key == null)
            {
                return;
            }

            for (int i = 0; i < (_maxPstate + 1); i++)
            {
                string text = (string)key.GetValue("P" + i);
                _pStates[i] = PState.Decode(text, i);
            }
            for (int i = 3; i < 5; i++)
            {
                string text = (string)key.GetValue("P" + i);
                _pStates[i] = PState.Decode(text, i);
            }

            RefreshPStatesLabel();

            makePermanentCheckBox.Checked = ((int)key.GetValue("EnableCustomPStates", 0) != 0);

            enableCustomCnQCheckBox.Checked = ((int)key.GetValue("EnableCustomCnQ", 0) != 0);

            key.Close();
        }
예제 #2
0
        public static PStateMsr Decode(uint value, int pstate)
        {
            //uint maxDiv = (uint)K10Manager.MaxCOF();
            uint maxDiv = (uint)K10Manager.CurrCOF();
            uint clk    = (uint)K10Manager.GetBIOSBusSpeed();
            bool turbo  = K10Manager.IsTurboSupported();

            if (pstate < 3)
            {
                if (pstate <= K10Manager.GetHighestPState())
                {
                    uint cpuDidLSD = (value >> 0) & 0x0F;
                    uint cpuDidMSD = (value >> 4) & 0x1F;
                    uint cpuVid    = (value >> 9) & 0x7F;

                    double Div    = cpuDidMSD + (cpuDidLSD * 0.25) + 1;
                    double DivPLL = cpuDidMSD + (cpuDidLSD * 0.25) + 1;
                    if (maxDiv == 16 && Div < 2) //E-350 seems to restrict PLL frequencies higher than 1.6GHz
                    {
                        DivPLL = 2;
                    }
                    else if (maxDiv == 24 && Div < 4 && !turbo) //C-50 seems to restrict PLL frequencies higher than 1.0GHz
                    {
                        DivPLL = 4;
                    }
                    else if (maxDiv == 24 && Div < 3 && turbo) //C-60 (with turbo seems to restrict PLL frequencies higher than 1.33GHz
                    {
                        DivPLL = 3;
                    }

                    var msr = new PStateMsr()
                    {
                        Divider = Div,
                        Vid     = 1.55 - 0.0125 * cpuVid,
                        CLK     = clk,
                        PLL     = (16 + maxDiv) / DivPLL * clk
                    };
                    return(msr);
                }
                else
                {
                    var msr = new PStateMsr()
                    {
                        Divider = 10,
                        Vid     = 0.4,
                        CLK     = 100,
                        PLL     = 1000
                    };
                    return(msr);
                }
            }
            else if (pstate == 3)
            {
                uint   nclk    = ((value >> 20) & 0x7F);
                uint   nbVid   = ((value >> 12) & 0x7F);
                double nclkdiv = 1;
                //NCLK Div 2-16 ind 0.25 steps / Div 16-32 in 0.5 steps / Div 32-63 in 1.0 steps
                if (nclk >= 8 && nclk <= 63)
                {
                    nclkdiv = nclk * 0.25;
                }
                else if (nclk >= 64 && nclk <= 95)
                {
                    nclkdiv = (nclk - 64) * 0.5 - 16;
                }
                else if (nclk >= 96 && nclk <= 127)
                {
                    nclkdiv = nclk - 64;
                }
                else
                {
                    nclkdiv = 1;
                }
                var msr = new PStateMsr()
                {
                    Divider = nclkdiv,
                    Vid     = 1.55 - 0.0125 * nbVid,
                    CLK     = clk,
                    PLL     = (16 + maxDiv) / nclkdiv * clk
                };
                return(msr);
            }
            else if (pstate == 4)
            {
                uint   nclk    = ((value >> 0) & 0x7F);
                uint   nbVid   = ((value >> 8) & 0x7F);
                double nclkdiv = 1;
                //NCLK Div 2-16 ind 0.25 steps / Div 16-32 in 0.5 steps / Div 32-63 in 1.0 steps
                if (nclk >= 8 && nclk <= 63)
                {
                    nclkdiv = nclk * 0.25;
                }
                else if (nclk >= 64 && nclk <= 95)
                {
                    nclkdiv = (nclk - 64) * 0.5 - 16;
                }
                else if (nclk >= 96 && nclk <= 127)
                {
                    nclkdiv = nclk - 64;
                }
                else
                {
                    nclkdiv = 1;
                }
                var msr = new PStateMsr()
                {
                    Divider = nclkdiv,
                    Vid     = 1.55 - 0.0125 * nbVid,
                    CLK     = clk,
                    PLL     = (16 + maxDiv) / nclkdiv * clk
                };
                return(msr);
            }
            else
            {
                var msr = new PStateMsr()
                {
                    Divider = 10,
                    Vid     = 0.4,
                    CLK     = 100,
                    PLL     = 1000
                };
                return(msr);
            }
        }