From 66aca8aa35bc0b07c754d9ad95c808e4d91f58f1 Mon Sep 17 00:00:00 2001 From: PA4WDH Date: Sat, 24 Aug 2024 16:07:11 +0200 Subject: Add multi-CPU support --- cpufreq.c | 47 +++++++++++++---------------------------------- 1 file changed, 13 insertions(+), 34 deletions(-) (limited to 'cpufreq.c') diff --git a/cpufreq.c b/cpufreq.c index 5ad9abf..55a8a8d 100644 --- a/cpufreq.c +++ b/cpufreq.c @@ -7,62 +7,41 @@ #include #include "debug.h" #include "sysfs.h" +#include "cputemp2maxfreq.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; -} +extern struct s_cpudata cpudata; // Set a cpufreq parameter to a value int cpufreq_set_str(char *parameter,char *value,long int checkdelay) { - DIR *cpudir; - struct dirent *cpu_dirent; + int cpu; 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) + if (cpudata.cpulist==NULL) { - DEBUG1_CPUFREQ("Unable to find CPU's\n"); + DEBUG1_CPUFREQ("No CPU list\n"); return -1; } - cpu_dirent=readdir(cpudir); - while(cpu_dirent!=NULL) + for(cpu=0;cpud_name)) + DEBUG2_CPUFREQ("Set CPU %s\n",cpudata.cpulist[cpu]); + snprintf(sysfs_file,128,"/sys/devices/system/cpu/%s/cpufreq/%s",cpudata.cpulist[cpu],parameter); + if (sysfs_write_str(sysfs_file,value,checkdelay)!=0) { - 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++; + DEBUG1_CPUFREQ("Failed to set %s\n",cpudata.cpulist[cpu]); + return -1; } - - cpu_dirent=readdir(cpudir); + done++; } - 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) -- cgit v1.2.3