power-generic: Add helper function to get_value and set_value 12/277712/4 accepted/tizen_7.0_unified_hotfix tizen_7.0_hotfix accepted/tizen/7.0/unified/20221110.063453 accepted/tizen/7.0/unified/hotfix/20221116.110411 accepted/tizen/unified/20220715.141322 submit/tizen/20220714.022424 tizen_7.0_m2_release
authorJaehoon Chung <jh80.chung@samsung.com>
Tue, 12 Jul 2022 08:03:32 +0000 (17:03 +0900)
committerJaehoon Chung <jh80.chung@samsung.com>
Tue, 12 Jul 2022 10:47:37 +0000 (19:47 +0900)
Almost functions were implemented similarly. It means that
it is possible to be replaced with the some helper function.

When using the following get_value and set_value functions,
reduce the duplicate code and simplify the operaiont of getting/setting
value from the specific file path.

[Added function description]
- int get_value_string(char *prefix, char *res_name, char *suffix, char *buf)
- int set_value_string(char *prefix, char *res_name, char *suffix, char *buf)
- int get_value_integer(char *prefix, char *res_name, char *suffix, int *value)
- int set_value_integer(char *prefix, char *res_name, char *suffix, int value)
- int get_path(char *path, char *prefix, char *res_name, char *suffix)

Change-Id: I4031d39a1440b51caad8acaa51184c6ccbb69ecb
Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
src/hal-backend-power.c

index c4f52ad159db96f3f429504305c140c942a2bcb5..b25ad6fd7bc134a2d83d5f3d5288f9a075dad6aa 100644 (file)
 
 #define FAULT_AROUND_BYTES_PATH                        "/sys/kernel/debug/fault_around_bytes"
 
-/*************************************************
- * HAL backend implementation for CPU H/W Resource
- */
-static int cpufreq_dvfs_get_curr_governor(char *res_name, char *governor)
+static int get_path(char *path, char *prefix, char *res_name, char *suffix)
 {
-       char path[PATH_MAX];
        int ret;
 
-       if ((!res_name) || (!governor))
+       if (!path || !prefix || !res_name || !suffix)
                return -EINVAL;
 
-       snprintf(path, PATH_MAX, "%s%s%s",
-               CPUFREQ_PATH_PREFIX,
-               res_name,
-               CPUFREQ_CURR_GOVERNOR_PATH_SUFFIX);
+       ret = snprintf(path, PATH_MAX, "%s%s%s", prefix, res_name, suffix);
+       if (ret <= 0)
+               return -EINVAL;
 
-       ret = sysfs_read_str(path, governor, BUFF_MAX);
-       if (ret < 0)
-               return ret;
+       path[PATH_MAX - 1] = '\0';
 
        return 0;
 }
 
-static int cpufreq_dvfs_set_curr_governor(char *res_name, char *governor)
+static int __handle_value_string(int is_write, char *prefix, char *res_name, char *suffix, char *buf)
 {
        char path[PATH_MAX];
        int ret;
 
-       if ((!res_name) || (!governor))
+       if (!buf)
                return -EINVAL;
 
-       snprintf(path, PATH_MAX, "%s%s%s",
-               CPUFREQ_PATH_PREFIX,
-               res_name,
-               CPUFREQ_CURR_GOVERNOR_PATH_SUFFIX);
-
-       ret = sysfs_write_str(path, governor);
+       ret = get_path(path, prefix, res_name, suffix);
        if (ret < 0)
                return ret;
 
-       return 0;
+       if (!!is_write)
+               ret = sysfs_write_str(path, buf);
+       else
+               ret = sysfs_read_str(path, buf, BUFF_MAX);
+
+       return (ret < 0) ? ret : 0;
 }
 
-static int cpufreq_dvfs_get_curr_freq(char *res_name)
+static int get_value_string(char *prefix, char *res_name, char *suffix, char *buf)
+{
+       return __handle_value_string(0, prefix, res_name, suffix, buf);
+}
+
+static int set_value_string(char *prefix, char *res_name, char *suffix, char *buf)
+{
+       return __handle_value_string(1, prefix, res_name, suffix, buf);
+}
+
+static int get_value_integer(char *prefix, char *res_name, char *suffix, int *value)
 {
        char path[PATH_MAX];
-       int freq, ret;
+       int ret;
 
-       if (!res_name)
+       if (!value)
                return -EINVAL;
 
-       snprintf(path, PATH_MAX, "%s%s%s",
-               CPUFREQ_PATH_PREFIX,
-               res_name,
-               CPUFREQ_CURR_FREQ_PATH_SUFFIX);
+       ret = get_path(path, prefix, res_name, suffix);
+       if (ret < 0)
+               return ret;
 
-       ret = sysfs_read_int(path, &freq);
+       ret = sysfs_read_int(path, value);
        if (ret < 0)
                return ret;
 
-       return freq;
+       return 0;
 }
 
-static int cpufreq_dvfs_get_min_freq(char *res_name)
+static int set_value_integer(char *prefix, char *res_name, char *suffix, int value)
 {
        char path[PATH_MAX];
-       int freq, ret;
-
-       if (!res_name)
-               return -EINVAL;
+       int ret;
 
-       snprintf(path, PATH_MAX, "%s%s%s",
-               CPUFREQ_PATH_PREFIX,
-               res_name,
-               CPUFREQ_MIN_FREQ_PATH_SUFFIX);
+       ret = get_path(path, prefix, res_name, suffix);
+       if (ret < 0)
+               return ret;
 
-       ret = sysfs_read_int(path, &freq);
+       ret = sysfs_write_int(path, value);
        if (ret < 0)
                return ret;
 
-       return freq;
+       return 0;
 }
 
-static int cpufreq_dvfs_set_min_freq(char *res_name, int freq)
+/*************************************************
+ * HAL backend implementation for CPU H/W Resource
+ */
+static int cpufreq_dvfs_get_curr_governor(char *res_name, char *governor)
 {
-       char path[PATH_MAX];
        int ret;
 
-       if ((!res_name) || (freq < 0))
-               return -EINVAL;
+       ret = get_value_string(CPUFREQ_PATH_PREFIX, res_name,
+                               CPUFREQ_CURR_GOVERNOR_PATH_SUFFIX, governor);
+       return (ret < 0) ? ret : 0;
+}
+
+static int cpufreq_dvfs_set_curr_governor(char *res_name, char *governor)
+{
+       int ret;
 
-       snprintf(path, PATH_MAX, "%s%s%s",
-               CPUFREQ_PATH_PREFIX,
-               res_name,
-               CPUFREQ_MIN_FREQ_PATH_SUFFIX);
+       ret = set_value_string(CPUFREQ_PATH_PREFIX, res_name,
+                               CPUFREQ_CURR_GOVERNOR_PATH_SUFFIX, governor);
+       return (ret < 0) ? ret : 0;
+}
 
-       ret = sysfs_write_int(path, freq);
-       if (ret < 0)
-               return ret;
+static int cpufreq_dvfs_get_curr_freq(char *res_name)
+{
+       int freq, ret;
 
-       return 0;
+       ret = get_value_integer(CPUFREQ_PATH_PREFIX, res_name,
+                               CPUFREQ_CURR_FREQ_PATH_SUFFIX, &freq);
+       return (ret < 0) ? ret : freq;
 }
 
-static int cpufreq_dvfs_get_max_freq(char *res_name)
+static int cpufreq_dvfs_get_min_freq(char *res_name)
 {
-       char path[PATH_MAX];
        int freq, ret;
 
-       if (!res_name)
+       ret = get_value_integer(CPUFREQ_PATH_PREFIX, res_name,
+                               CPUFREQ_MIN_FREQ_PATH_SUFFIX, &freq);
+       return (ret < 0) ? ret : freq;
+}
+
+static int cpufreq_dvfs_set_min_freq(char *res_name, int freq)
+{
+       int ret;
+
+       if (freq < 0)
                return -EINVAL;
 
-       snprintf(path, PATH_MAX, "%s%s%s",
-               CPUFREQ_PATH_PREFIX,
-               res_name,
-               CPUFREQ_MAX_FREQ_PATH_SUFFIX);
+       ret = set_value_integer(CPUFREQ_PATH_PREFIX, res_name,
+                               CPUFREQ_MIN_FREQ_PATH_SUFFIX, freq);
+       return (ret < 0) ? ret : 0;
+}
 
-       ret = sysfs_read_int(path, &freq);
-       if (ret < 0)
-               return ret;
+static int cpufreq_dvfs_get_max_freq(char *res_name)
+{
+       int freq, ret;
 
-       return freq;
+       ret = get_value_integer(CPUFREQ_PATH_PREFIX, res_name,
+                               CPUFREQ_MAX_FREQ_PATH_SUFFIX, &freq);
+       return (ret < 0) ? ret : freq;
 }
 
 static int cpufreq_dvfs_set_max_freq(char *res_name, int freq)
 {
-       char path[PATH_MAX];
        int ret;
 
-       if ((!res_name) || (freq < 0))
+       if (freq < 0)
                return -EINVAL;
 
-       snprintf(path, PATH_MAX, "%s%s%s",
-               CPUFREQ_PATH_PREFIX,
-               res_name,
-               CPUFREQ_MAX_FREQ_PATH_SUFFIX);
-
-       ret = sysfs_write_int(path, freq);
-       if (ret < 0)
-               return ret;
-       return 0;
+       ret = set_value_integer(CPUFREQ_PATH_PREFIX, res_name,
+                               CPUFREQ_MAX_FREQ_PATH_SUFFIX, freq);
+       return (ret < 0) ? ret : 0;
 }
 
 static int cpufreq_dvfs_get_available_min_freq(char *res_name)
 {
-       char path[PATH_MAX];
        int val, ret;
 
-       if (!res_name)
-               return -EINVAL;
-
-       snprintf(path, PATH_MAX, "%s%s%s",
-               CPUFREQ_PATH_PREFIX,
-               res_name,
-               CPUFREQ_AVAILABLE_MIN_FREQ_PATH_SUFFIX);
-
-       ret = sysfs_read_int(path, &val);
-       if (ret < 0)
-               return ret;
-
-       return val;
+       ret = get_value_integer(CPUFREQ_PATH_PREFIX, res_name,
+                               CPUFREQ_AVAILABLE_MIN_FREQ_PATH_SUFFIX, &val);
+       return (ret < 0) ? ret : val;
 }
 
-
 static int cpufreq_dvfs_get_available_max_freq(char *res_name)
 {
-       char path[PATH_MAX];
        int val, ret;
 
-       if (!res_name)
-               return -EINVAL;
-
-       snprintf(path, PATH_MAX, "%s%s%s",
-               CPUFREQ_PATH_PREFIX,
-               res_name,
-               CPUFREQ_AVAILABLE_MAX_FREQ_PATH_SUFFIX);
-
-       ret = sysfs_read_int(path, &val);
-       if (ret < 0)
-               return ret;
-
-       return val;
+       ret = get_value_integer(CPUFREQ_PATH_PREFIX, res_name,
+                               CPUFREQ_AVAILABLE_MAX_FREQ_PATH_SUFFIX, &val);
+       return (ret < 0) ? ret : val;
 }
 
 static int cpufreq_dvfs_get_up_threshold(char *res_name)
 {
-       char path[PATH_MAX];
        int val, ret;
 
-       if (!res_name)
-               return -EINVAL;
-
-       snprintf(path, PATH_MAX, "%s%s%s",
-               CPUFREQ_PATH_PREFIX,
-               res_name,
-               CPUFREQ_UP_THRESHOLD_PATH_SUFFIX);
-
-       ret = sysfs_read_int(path, &val);
-       if (ret < 0)
-               return ret;
-
-       return val;
+       ret = get_value_integer(CPUFREQ_PATH_PREFIX, res_name,
+                               CPUFREQ_UP_THRESHOLD_PATH_SUFFIX, &val);
+       return (ret < 0) ? ret : val;
 }
 
 static int cpufreq_dvfs_set_up_threshold(char *res_name, int up_threshold)
 {
-       char path[PATH_MAX];
        int ret;
 
-       if ((!res_name) || (up_threshold < 0))
+       if (up_threshold < 0)
                return -EINVAL;
 
-       snprintf(path, PATH_MAX, "%s%s%s",
-               CPUFREQ_PATH_PREFIX,
-               res_name,
-               CPUFREQ_UP_THRESHOLD_PATH_SUFFIX);
-
-       ret = sysfs_write_int(path, up_threshold);
-       if (ret < 0)
-               return ret;
-
-       return 0;
+       ret = set_value_integer(CPUFREQ_PATH_PREFIX, res_name,
+                               CPUFREQ_UP_THRESHOLD_PATH_SUFFIX, up_threshold);
+       return (ret < 0) ? ret : 0;
 }
 
 static struct pass_resource_dvfs_ops cpufreq_dvfs_ops =  {
@@ -365,19 +334,11 @@ static struct pass_resource_hotplug_ops cpu_hotplus_ops = {
 
 static int tmu_get_temp(char *res_thermal_name)
 {
-       char path[PATH_MAX];
        int temp, ret;
 
-       if (!res_thermal_name)
-               return -EINVAL;
-
-       snprintf(path, PATH_MAX, "%s%s%s",
-               TMU_PATH_PREFIX,
-               res_thermal_name,
-               TMU_TEMP_PATH_SUFFIX);
-
-       ret = sysfs_read_int(path, &temp);
-       if (ret < 0)
+       ret = get_value_integer(TMU_PATH_PREFIX, res_thermal_name,
+                               TMU_TEMP_PATH_SUFFIX, &temp);
+       if (ret <  0)
                return ret;
 
        /*
@@ -395,22 +356,14 @@ static int tmu_get_temp(char *res_thermal_name)
 
 static int tmu_get_policy(char *res_thermal_name, char *policy)
 {
-       char path[PATH_MAX];
        int ret;
 
-       if ((!res_thermal_name) || (!policy))
+       if (!policy)
                return -EINVAL;
 
-       snprintf(path, PATH_MAX, "%s%s%s",
-               TMU_PATH_PREFIX,
-               res_thermal_name,
-               TMU_POLICY_PATH_SUFFIX);
-
-       ret = sysfs_read_str(path, policy, BUFF_MAX);
-       if (ret < 0)
-               return ret;
-
-       return 0;
+       ret = get_value_string(TMU_PATH_PREFIX, res_thermal_name,
+                               TMU_POLICY_PATH_SUFFIX, policy);
+       return (ret < 0) ? ret : 0;
 }
 
 static struct pass_resource_tmu_ops tmu_ops = {
@@ -423,160 +376,88 @@ static struct pass_resource_tmu_ops tmu_ops = {
  */
 static int devfreq_dvfs_get_curr_governor(char *res_name, char *governor)
 {
-       char path[PATH_MAX];
        int ret;
 
-       if ((!res_name) || (!governor))
+       if (!governor)
                return -EINVAL;
 
-       snprintf(path, PATH_MAX, "%s%s%s",
-               DEVFREQ_BUS_PATH_PREFIX,
-               res_name,
-               DEVFREQ_BUS_CURR_GOVERNOR_PATH_SUFFIX);
-
-       ret = sysfs_read_str(path, governor, BUFF_MAX);
-       if (ret < 0)
-               return ret;
-
-       return 0;
+       ret = get_value_string(DEVFREQ_BUS_PATH_PREFIX, res_name,
+                               DEVFREQ_BUS_CURR_GOVERNOR_PATH_SUFFIX, governor);
+       return (ret < 0) ? ret : 0;
 }
 
 static int devfreq_dvfs_set_curr_governor(char *res_name, char *governor)
 {
-       char path[PATH_MAX];
        int ret;
 
-       if ((!res_name) || (!governor))
+       if (!governor)
                return -EINVAL;
 
-       snprintf(path, PATH_MAX, "%s%s%s",
-               DEVFREQ_BUS_PATH_PREFIX,
-               res_name,
-               DEVFREQ_BUS_CURR_GOVERNOR_PATH_SUFFIX);
-
-       ret = sysfs_write_str(path, governor);
-       if (ret < 0)
-               return ret;
-
-       return 0;
+       ret = set_value_string(DEVFREQ_BUS_PATH_PREFIX, res_name,
+                               DEVFREQ_BUS_CURR_GOVERNOR_PATH_SUFFIX, governor);
+       return (ret < 0) ? ret : 0;
 }
 
 static int devfreq_dvfs_get_curr_freq(char *res_name)
 {
-       char path[PATH_MAX];
        int freq, ret;
 
-       if (!res_name)
-               return -EINVAL;
-
-       snprintf(path, PATH_MAX, "%s%s%s",
-               DEVFREQ_BUS_PATH_PREFIX,
-               res_name,
-               DEVFREQ_BUS_CURR_FREQ_PATH_SUFFIX);
-
-       ret = sysfs_read_int(path, &freq);
-       if (ret < 0)
-               return ret;
-
-       return freq;
+       ret = get_value_integer(DEVFREQ_BUS_PATH_PREFIX, res_name,
+                               DEVFREQ_BUS_CURR_FREQ_PATH_SUFFIX, &freq);
+       return (ret < 0) ? ret : freq;
 }
 
 static int devfreq_dvfs_get_min_freq(char *res_name)
 {
-       char path[PATH_MAX];
        int freq, ret;
 
-       if (!res_name)
-               return -EINVAL;
-
-       snprintf(path, PATH_MAX, "%s%s%s",
-               DEVFREQ_BUS_PATH_PREFIX,
-               res_name,
-               DEVFREQ_BUS_MIN_FREQ_PATH_SUFFIX);
-
-       ret = sysfs_read_int(path, &freq);
-       if (ret < 0)
-               return ret;
-
-       return freq;
+       ret = get_value_integer(DEVFREQ_BUS_PATH_PREFIX, res_name,
+                               DEVFREQ_BUS_MIN_FREQ_PATH_SUFFIX, &freq);
+       return (ret < 0) ? ret : freq;
 }
 
 static int devfreq_dvfs_set_min_freq(char *res_name, int freq)
 {
-       char path[PATH_MAX];
        int ret;
 
-       if ((!res_name) || (freq < 0))
+       if (freq < 0)
                return -EINVAL;
 
-       snprintf(path, PATH_MAX, "%s%s%s",
-               DEVFREQ_BUS_PATH_PREFIX,
-               res_name,
-               DEVFREQ_BUS_MIN_FREQ_PATH_SUFFIX);
-
-       ret = sysfs_write_int(path, freq);
-       if (ret < 0)
-               return ret;
-
-       return 0;
+       ret = set_value_integer(DEVFREQ_BUS_PATH_PREFIX, res_name,
+                               DEVFREQ_BUS_MIN_FREQ_PATH_SUFFIX, freq);
+       return (ret < 0) ? ret : 0;
 }
 
 static int devfreq_dvfs_get_max_freq(char *res_name)
 {
-       char path[PATH_MAX];
        int freq, ret;
 
-       if (!res_name)
-               return -EINVAL;
-
-       snprintf(path, PATH_MAX, "%s%s%s",
-               DEVFREQ_BUS_PATH_PREFIX,
-               res_name,
-               DEVFREQ_BUS_MAX_FREQ_PATH_SUFFIX);
-
-       ret = sysfs_read_int(path, &freq);
-       if (ret < 0)
-               return ret;
-
-       return freq;
+       ret = get_value_integer(DEVFREQ_BUS_PATH_PREFIX, res_name,
+                               DEVFREQ_BUS_MAX_FREQ_PATH_SUFFIX, &freq);
+       return (ret < 0) ? ret : freq;
 }
 
 static int devfreq_dvfs_set_max_freq(char *res_name, int freq)
 {
-       char path[PATH_MAX];
        int ret;
 
-       if ((!res_name) || (freq < 0))
+       if (freq < 0)
                return -EINVAL;
 
-       snprintf(path, PATH_MAX, "%s%s%s",
-               DEVFREQ_BUS_PATH_PREFIX,
-               res_name,
-               DEVFREQ_BUS_MAX_FREQ_PATH_SUFFIX);
-
-       ret = sysfs_write_int(path, freq);
-       if (ret < 0)
-               return ret;
-       return 0;
+       ret = set_value_integer(DEVFREQ_BUS_PATH_PREFIX, res_name,
+                               DEVFREQ_BUS_MAX_FREQ_PATH_SUFFIX, freq);
+       return (ret < 0) ? ret : 0;
 }
 
 static int devfreq_dvfs_get_available_min_freq(char *res_name)
 {
-       char path[PATH_MAX];
        char buf[MAX_BUF_SIZE + 1];
        char *p;
        int ret;
 
-       if (!res_name)
-               return -EINVAL;
-
-       snprintf(path, PATH_MAX, "%s%s%s",
-               DEVFREQ_BUS_PATH_PREFIX,
-               res_name,
-               DEVFREQ_BUS_AVAILABLE_FREQ_PATH_SUFFIX);
-
-       ret = sysfs_read_str(path, buf, MAX_BUF_SIZE);
-       if (ret < 0)
+       ret = get_value_string(DEVFREQ_BUS_PATH_PREFIX, res_name,
+                               DEVFREQ_BUS_AVAILABLE_FREQ_PATH_SUFFIX, buf);
+       if (ret <  0)
                return ret;
 
        p = strchr(buf, ' ');
@@ -592,21 +473,13 @@ static int devfreq_dvfs_get_available_min_freq(char *res_name)
 
 static int devfreq_dvfs_get_available_max_freq(char *res_name)
 {
-       char path[PATH_MAX];
        char buf[MAX_BUF_SIZE + 1];
        char *p;
        int ret;
 
-       if (!res_name)
-               return -EINVAL;
-
-       snprintf(path, PATH_MAX, "%s%s%s",
-               DEVFREQ_BUS_PATH_PREFIX,
-               res_name,
-               DEVFREQ_BUS_AVAILABLE_FREQ_PATH_SUFFIX);
-
-       ret = sysfs_read_str(path, buf, MAX_BUF_SIZE);
-       if (ret < 0)
+       ret = get_value_string(DEVFREQ_BUS_PATH_PREFIX, res_name,
+                               DEVFREQ_BUS_AVAILABLE_FREQ_PATH_SUFFIX, buf);
+       if (ret <  0)
                return ret;
 
        p = strrchr(buf, ' ');