static int get_sys_all_cpu_freq_info(void) { int nCPU_freq_temp, i; char szTempBuf[512]; for(i=0 ; i<NUMBER_OF_CORE ; i++) { sprintf(szTempBuf, "/sys/devices/system/cpu/cpu%01d/cpufreq/cpuinfo_cur_freq", i); nCPU_freq_temp = get_sys_cpu_freq_info(szTempBuf, 3); if(nCPU_freq_temp > 0) { cpufreqs[i] = nCPU_freq_temp/1000; }else { /* CPU is unplug now */ cpufreqs[i] = nCPU_freq_temp*10; } } return 0; }
static int get_sys_all_cpu_freq_info(void) { int nCPU_freq_temp, i; char szTempBuf[512]; int cpu_total_dmips = 0; for(i=0 ; i<NUMBER_OF_CORE ; i++) { sprintf(szTempBuf, "/sys/devices/system/cpu/cpu%01d/cpufreq/cpuinfo_cur_freq", i); nCPU_freq_temp = get_sys_cpu_freq_info(szTempBuf, 3); if(nCPU_freq_temp > 0) { cpufreqs[i] = nCPU_freq_temp/1000; cpu_total_dmips += nCPU_freq_temp; } else { /* CPU is unplug now */ cpufreqs[i] = nCPU_freq_temp*10; } } cpu_total_dmips /= 1000; // TODO: think a way to easy start and stop, and start for only once if (1 == check_dmips_limit) { if (cpu_total_dmips > mtktscpu_limited_dmips) { THRML_ERROR_LOG("cpu %d over limit %d\n", cpu_total_dmips, mtktscpu_limited_dmips); if (dmips_limit_warned == false) { aee_kernel_warning("thermal", "cpu %d over limit %d\n", cpu_total_dmips, mtktscpu_limited_dmips); dmips_limit_warned = true; } } } return 0; }