#include #include #include #include #include #include #include #include "debug.h" #include "sysfs.h" // Validate if we found a file named cpu[0-9][0-9] int cpufreq_is_cpu(char *name) { if (strncmp(name,"cpu",3)!=0) return 0; if ((name[3]<'0') || (name[3]>'9')) return 0; if (name[4]==0) return 1; if ((name[4]<'0') || (name[4]>'9')) return 0; if (name[5]==0) return 1; return 0; } // Set a cpufreq parameter to a value int cpufreq_set_str(char *parameter,char *value,long int checkdelay) { DIR *cpudir; struct dirent *cpu_dirent; char sysfs_file[128]; int done=0; DEBUG1_CPUFREQ("Set %s to %s\n",parameter,value) // Open the CPU directory in sysfs cpudir=opendir("/sys/devices/system/cpu"); if (cpudir==NULL) { DEBUG1_CPUFREQ("Unable to find CPU's\n"); return -1; } cpu_dirent=readdir(cpudir); while(cpu_dirent!=NULL) { // If it's a CPU, set our parameter if (cpufreq_is_cpu(cpu_dirent->d_name)) { DEBUG2_CPUFREQ("Found CPU %s\n",cpu_dirent->d_name); snprintf(sysfs_file,128,"/sys/devices/system/cpu/%s/cpufreq/%s",cpu_dirent->d_name,parameter); if (sysfs_write_str(sysfs_file,value,checkdelay)!=0) { DEBUG1_CPUFREQ("Failed to set %s\n",cpu_dirent->d_name); closedir(cpudir); return -1; } done++; } cpu_dirent=readdir(cpudir); } closedir(cpudir); return done; } // This is just a wrapper around cpufreq_set_str with long int to string // conversion int cpufreq_set_long_int(char *parameter,long int value,long int checkdelay) { char buf[255]; snprintf(buf,255,"%ld",value); return cpufreq_set_str(parameter,buf,checkdelay); }