Ejemplo n.º 1
0
        public bool SetPerfBias(PerfBias pb)
        {
            uint pb1_eax = 0, pb1_edx = 0, pb2_eax = 0, pb2_edx = 0, pb3_eax = 0, pb3_edx = 0, pb4_eax = 0, pb4_edx = 0, pb5_eax = 0, pb5_edx = 0;

            // Read current settings
            if (ols.RdmsrTx(MSR_PERFBIAS1, ref pb1_eax, ref pb1_edx, (UIntPtr)1) != 1)
            {
                return(false);
            }
            if (ols.RdmsrTx(MSR_PERFBIAS2, ref pb2_eax, ref pb2_edx, (UIntPtr)1) != 1)
            {
                return(false);
            }
            if (ols.RdmsrTx(MSR_PERFBIAS3, ref pb3_eax, ref pb3_edx, (UIntPtr)1) != 1)
            {
                return(false);
            }
            if (ols.RdmsrTx(MSR_PERFBIAS4, ref pb4_eax, ref pb4_edx, (UIntPtr)1) != 1)
            {
                return(false);
            }
            if (ols.RdmsrTx(MSR_PERFBIAS5, ref pb5_eax, ref pb5_edx, (UIntPtr)1) != 1)
            {
                return(false);
            }

            // Clear by default
            pb1_eax &= 0xFFFFFFEF;
            pb2_eax &= 0xFF83FFFF;
            pb2_eax |= 0x02000000;
            pb3_eax &= 0xFFFFFFF8;
            pb4_eax &= 0xFFF9FFEF;
            pb5_eax &= 0xFFFFFFFE;

            // Specific settings
            switch (pb)
            {
            case PerfBias.None:
                pb1_eax |= 0x10;
                pb2_eax |= (8 & 0x1F) << 18;
                pb3_eax |= (7 & 0x7);
                pb4_eax |= 0x10;
                break;

            case PerfBias.Cinebench_R11p5:
                pb2_eax &= 0xF1FFFFEF;
                pb3_eax |= (7 & 0x7);
                pb4_eax |= 0x60010;
                break;

            /*case PerfBias.Cinebench_R15:
             *  pb2_eax |= (3 & 0x1F) << 18;
             *  pb2_eax &= 0xF1FFFFEF;
             *  pb3_eax |= (6 & 0x7);
             *  pb4_eax |= 0x10;
             *  pb5_eax |= 1;
             *  break;*/
            case PerfBias.Cinebench_R15:
                pb1_edx &= 0xFFF00F0F;
                pb2_eax |= (3 & 0x1F) << 18;
                pb2_eax &= 0xF1FFFFEF;
                pb3_eax |= (7 & 0x7);
                pb4_eax |= 0x10;
                pb5_eax |= 1;
                break;

            case PerfBias.Geekbench_3:
                //pb2_eax &= 0xF1FFFFEF;
                pb2_eax |= (4 & 0x1F) << 18;
                pb3_eax |= (7 & 0x7);
                pb4_eax |= 0x10;
                break;

            case PerfBias.Auto:
            default:
                return(false);
            }

            // Rewrite
            for (int i = 0; i < Threads; i++)
            {
                if (ols.WrmsrTx(MSR_PERFBIAS1, pb1_eax, pb1_edx, (UIntPtr)(((UInt64)1) << i)) != 1)
                {
                    return(false);
                }
                if (ols.WrmsrTx(MSR_PERFBIAS2, pb2_eax, pb2_edx, (UIntPtr)(((UInt64)1) << i)) != 1)
                {
                    return(false);
                }
                if (ols.WrmsrTx(MSR_PERFBIAS3, pb3_eax, pb3_edx, (UIntPtr)(((UInt64)1) << i)) != 1)
                {
                    return(false);
                }
                if (ols.WrmsrTx(MSR_PERFBIAS4, pb4_eax, pb4_edx, (UIntPtr)(((UInt64)1) << i)) != 1)
                {
                    return(false);
                }
                if (ols.WrmsrTx(MSR_PERFBIAS5, pb5_eax, pb5_edx, (UIntPtr)(((UInt64)1) << i)) != 1)
                {
                    return(false);
                }
            }

            PerformanceBias = pb;

            return(true);
        }
Ejemplo n.º 2
0
        void tempTimerHandler(object sender, ElapsedEventArgs e)
        {
            try
            {
                // timeout handling
                if (di.MemRead(DataInterface.REG_PING_PONG) == 0)
                {
                    // timeout cleared
                    serviceTimeout = 0;
                    di.MemWrite(DataInterface.REG_PING_PONG, 0x01);
                }
                else
                {
                    serviceTimeout++;
                    if (serviceTimeout > 3)
                    {
                        // 6000ms timeout occured
                        tempTimer.Stop();
                        MessageBox.Show("Lost contact with ZenStatesSrv", Application.ProductName);
                        Environment.Exit(0);
                    }
                }

                bool updateGui = false;

                // Manage client commands
                if (waitCmd != DataInterface.NOTIFY_CLEAR)
                {
                    // Check for execution
                    if (di.MemRead(DataInterface.REG_NOTIFY_STATUS) == DataInterface.NOTIFY_DONE)
                    {
                        // Clear command
                        di.MemWrite(DataInterface.REG_NOTIFY_STATUS, DataInterface.NOTIFY_CLEAR);

                        // Update GUI?
                        if (waitCmdUpdateGui)
                        {
                            updateGui = true;
                        }

                        // Clear wait cmd
                        waitCmd = DataInterface.NOTIFY_CLEAR;
                    }
                }

                ServiceVersion = di.MemRead(DataInterface.REG_SERVER_VERSION);

                if ((di.MemRead(DataInterface.REG_SERVER_FLAGS) & DataInterface.FLAG_IS_AVAILABLE) == 0)
                {
                    isAvailable = false;
                }
                else
                {
                    isAvailable = true;
                }

                if ((di.MemRead(DataInterface.REG_SERVER_FLAGS) & DataInterface.FLAG_SUPPORTED_CPU) == 0)
                {
                    supportedCpu = false;
                }
                else
                {
                    supportedCpu = true;
                }

                if ((di.MemRead(DataInterface.REG_SERVER_FLAGS) & DataInterface.FLAG_SETTINGS_RESET) == 0)
                {
                    SettingsReset = false;
                }
                else
                {
                    SettingsReset = true;
                }

                if ((di.MemRead(DataInterface.REG_SERVER_FLAGS) & DataInterface.FLAG_SETTINGS_SAVED) == 0)
                {
                    SettingsSaved = false;
                }
                else
                {
                    SettingsSaved = true;
                }

                if ((di.MemRead(DataInterface.REG_SERVER_FLAGS) & DataInterface.FLAG_SHUTDOWN_UNCLEAN) == 0)
                {
                    ShutdownUnclean = false;
                }
                else
                {
                    ShutdownUnclean = true;
                }

                if ((di.MemRead(DataInterface.REG_SERVER_FLAGS) & DataInterface.FLAG_P80_TEMP_EN) == 0)
                {
                    P80Temp = false;
                }
                else
                {
                    P80Temp = true;
                }

                if ((di.MemRead(DataInterface.REG_SERVER_FLAGS) & DataInterface.FLAG_TRAY_ICON_AT_START) == 0)
                {
                    TrayIconAtStart = false;
                }
                else
                {
                    TrayIconAtStart = true;
                }

                if ((di.MemRead(DataInterface.REG_SERVER_FLAGS) & DataInterface.FLAG_APPLY_AT_START) == 0)
                {
                    ApplyAtStart = false;
                }
                else
                {
                    ApplyAtStart = true;
                }

                for (int i = 0; i < Pstates; i++)
                {
                    Pstate[i] = di.MemRead(DataInterface.REG_P0 + i);
                }
                for (int i = 0; i < 2; i++)
                {
                    BoostFreq[i] = di.MemRead(DataInterface.REG_BOOST_FREQ_0 + i);
                }
                BoostFreq[2] = Pstate[2];

                PstateOc = di.MemRead(DataInterface.REG_PSTATE_OC);

                if ((di.MemRead(DataInterface.REG_SERVER_FLAGS) & DataInterface.FLAG_C6CORE) == 0)
                {
                    ZenC6Core = false;
                }
                else
                {
                    ZenC6Core = true;
                }

                if ((di.MemRead(DataInterface.REG_SERVER_FLAGS) & DataInterface.FLAG_C6PACKAGE) == 0)
                {
                    ZenC6Package = false;
                }
                else
                {
                    ZenC6Package = true;
                }

                if ((di.MemRead(DataInterface.REG_SERVER_FLAGS) & DataInterface.FLAG_CPB) == 0)
                {
                    ZenCorePerfBoost = false;
                }
                else
                {
                    ZenCorePerfBoost = true;
                }

                if ((di.MemRead(DataInterface.REG_SERVER_FLAGS) & DataInterface.FLAG_OC) == 0)
                {
                    ZenOc = false;
                }
                else
                {
                    ZenOc = true;
                }

                ZenPPT    = (int)di.MemRead(DataInterface.REG_PPT);
                ZenTDC    = (int)di.MemRead(DataInterface.REG_TDC);
                ZenEDC    = (int)di.MemRead(DataInterface.REG_EDC);
                ZenScalar = (int)di.MemRead(DataInterface.REG_SCALAR);

                perfBias = (PerfBias)di.MemRead(DataInterface.REG_PERF_BIAS);

                // Temperature display
                Temp = (int)di.MemRead(DataInterface.REG_TEMP);

                if (Temp > 99)
                {
                    Temp = 99;
                }
                else if (Temp < 0)
                {
                    Temp = 0;
                }

                notifyIcon.Icon = iconsW[Temp];

                if (sf != null)
                {
                    if (updateGui)
                    {
                        sf.ResetValues();
                    }
                    sf.SetSavedButton(!SettingsSaved);
                }

                // Handle startup

                /*if (loadWithOs && loadWithOs_state != 1)
                 * {
                 *  setServiceStartup("ZenTCsrv", 2);
                 *  setSystemStartup(true);
                 *  loadWithOs_state = 1;
                 * }
                 * else if (!loadWithOs && loadWithOs_state != 2)
                 * {
                 *  setServiceStartup("ZenTCsrv", 3);
                 *  setSystemStartup(false);
                 *  loadWithOs_state = 2;
                 * }*/
            }
            catch
            {
                // Suppress exception
            }
        }