Lines Matching +full:max +full:- +full:by +full:- +full:define

1 /* SPDX-License-Identifier: GPL-2.0-only */
6 * (C) 2002 - 2003 Dominik Brodowski <linux@brodo.de>
9 #define _LINUX_CPUFREQ_H
30 * Maximum transition latency is in nanoseconds - if it's unknown,
34 #define CPUFREQ_ETERNAL (-1)
35 #define CPUFREQ_NAME_LEN 16
37 #define CPUFREQ_NAME_PLEN (CPUFREQ_NAME_LEN + 1)
51 /* in 10^(-9) s = nanoseconds */
69 unsigned int max; /* in kHz */ member
96 * - Any routine that wants to read from the policy structure will
98 * - Any routine that will write to the policy structure and/or may take away
106 * - fast_switch_possible should be set by the driver if it can
109 * - fast_switch_enabled is to be set by governors that support fast
130 * the driver to set the frequency for this policy. To be set by the
160 /* cpufreq-stats */
174 * Used for passing new cpufreq policy data to the cpufreq driver's ->verify()
176 * and max values, if necessary, and specifically it must not update the
184 unsigned int max; /* in kHz */ member
195 #define CPUFREQ_SHARED_TYPE_NONE (0) /* None */
196 #define CPUFREQ_SHARED_TYPE_HW (1) /* HW does needed coordination */
197 #define CPUFREQ_SHARED_TYPE_ALL (2) /* All dependent CPUs should set freq */
198 #define CPUFREQ_SHARED_TYPE_ANY (3) /* Freq can be set from any dependent CPU*/
221 return cpumask_empty(policy->cpus); in DEFINE_FREE()
226 return cpumask_weight(policy->cpus) > 1; in policy_is_shared()
301 #define CPUFREQ_RELATION_L 0 /* lowest frequency at or above target */
302 #define CPUFREQ_RELATION_H 1 /* highest frequency below or at target */
303 #define CPUFREQ_RELATION_C 2 /* closest frequency to target */
305 #define CPUFREQ_RELATION_E BIT(2) /* Get if possible an efficient frequency */
307 #define CPUFREQ_RELATION_LE (CPUFREQ_RELATION_L | CPUFREQ_RELATION_E)
308 #define CPUFREQ_RELATION_HE (CPUFREQ_RELATION_H | CPUFREQ_RELATION_E)
309 #define CPUFREQ_RELATION_CE (CPUFREQ_RELATION_C | CPUFREQ_RELATION_E)
317 #define cpufreq_freq_attr_ro(_name) \
321 #define cpufreq_freq_attr_ro_perm(_name, _perm) \
325 #define cpufreq_freq_attr_rw(_name) \
329 #define cpufreq_freq_attr_wo(_name) \
333 #define define_one_global_ro(_name) \
337 #define define_one_global_rw(_name) \
347 /* needed by all drivers */
351 /* define one out of two */
362 * ->fast_switch() replacement for drivers that use an internal
365 * if ->fast_switch is set too, because in those cases (under specific
387 * In that case core will directly call ->target_index().
419 * Set by drivers that want to register with the energy model after the
428 * Set by drivers that need to update internal upper and lower boundaries along
430 * the diver if the target frequency does not change, but the policy min or max
433 #define CPUFREQ_NEED_UPDATE_LIMITS BIT(0)
435 /* loops_per_jiffy or other kernel "constants" aren't affected by frequency transitions */
436 #define CPUFREQ_CONST_LOOPS BIT(1)
439 * Set by drivers that want the core to automatically register the cpufreq
442 #define CPUFREQ_IS_COOLING_DEV BIT(2)
445 * This should be set by platforms having multiple clock-domains, i.e.
450 #define CPUFREQ_HAVE_GOVERNOR_PER_POLICY BIT(3)
453 * Driver will do POSTCHANGE notifications from outside of their ->target()
454 * routine and so must set cpufreq_driver->flags with this flag, so that core
457 #define CPUFREQ_ASYNC_NOTIFICATION BIT(4)
460 * Set by drivers which want cpufreq core to check if CPU is running at a
461 * frequency present in freq-table exposed by the driver. For these drivers if
463 * from the table. And if that fails, we will stop further boot process by
466 #define CPUFREQ_NEED_INITIAL_FREQ_CHECK BIT(5)
469 * Set by drivers to disallow use of governors with "dynamic_switching" flag
472 #define CPUFREQ_NO_AUTO_DYNAMIC_SWITCHING BIT(6)
484 (drv->flags & CPUFREQ_IS_COOLING_DEV); in cpufreq_thermal_control_enabled()
489 unsigned int max) in cpufreq_verify_within_limits() argument
491 policy->max = clamp(policy->max, min, max); in cpufreq_verify_within_limits()
492 policy->min = clamp(policy->min, min, policy->max); in cpufreq_verify_within_limits()
498 cpufreq_verify_within_limits(policy, policy->cpuinfo.min_freq, in cpufreq_verify_within_cpu_limits()
499 policy->cpuinfo.max_freq); in cpufreq_verify_within_cpu_limits()
515 #define CPUFREQ_TRANSITION_NOTIFIER (0)
516 #define CPUFREQ_POLICY_NOTIFIER (1)
519 #define CPUFREQ_PRECHANGE (0)
520 #define CPUFREQ_POSTCHANGE (1)
523 #define CPUFREQ_CREATE_POLICY (0)
524 #define CPUFREQ_REMOVE_POLICY (1)
549 * cpufreq_scale - "old * mult / div" calculation for large values (32-bit-arch
577 #define CPUFREQ_POLICY_UNKNOWN (0)
579 * If (cpufreq_driver->target) exists, the ->governor decides what frequency
580 * within the limits is used. If (cpufreq_driver->setpolicy> exists, these
583 #define CPUFREQ_POLICY_POWERSAVE (1)
584 #define CPUFREQ_POLICY_PERFORMANCE (2)
604 /* For governors which change frequency dynamically by themselves */
605 #define CPUFREQ_GOV_DYNAMIC_SWITCHING BIT(0)
608 #define CPUFREQ_GOV_STRICT_TARGET BIT(1)
633 #define cpufreq_governor_init(__governor) \
640 #define cpufreq_governor_exit(__governor) \
652 if (policy->max < policy->cur) in cpufreq_policy_apply_limits()
653 __cpufreq_driver_target(policy, policy->max, in cpufreq_policy_apply_limits()
655 else if (policy->min > policy->cur) in cpufreq_policy_apply_limits()
656 __cpufreq_driver_target(policy, policy->min, in cpufreq_policy_apply_limits()
693 #define CPUFREQ_ENTRY_INVALID ~0u
694 #define CPUFREQ_TABLE_END ~1u
696 #define CPUFREQ_BOOST_FREQ (1 << 0)
697 #define CPUFREQ_INEFFICIENT_FREQ (1 << 1)
701 unsigned int driver_data; /* driver specific data, not used by core */
702 unsigned int frequency; /* kHz - doesn't need to be in ascending
707 * cpufreq_for_each_entry - iterate over a cpufreq_frequency_table
712 #define cpufreq_for_each_entry(pos, table) \
713 for (pos = table; pos->frequency != CPUFREQ_TABLE_END; pos++)
716 * cpufreq_for_each_entry_idx - iterate over a cpufreq_frequency_table
723 #define cpufreq_for_each_entry_idx(pos, table, idx) \
724 for (pos = table, idx = 0; pos->frequency != CPUFREQ_TABLE_END; \
728 * cpufreq_for_each_valid_entry - iterate over a cpufreq_frequency_table
734 #define cpufreq_for_each_valid_entry(pos, table) \
735 for (pos = table; pos->frequency != CPUFREQ_TABLE_END; pos++) \
736 if (pos->frequency == CPUFREQ_ENTRY_INVALID) \
741 * cpufreq_for_each_valid_entry_idx - iterate with index over a cpufreq
748 #define cpufreq_for_each_valid_entry_idx(pos, table, idx) \
750 if (pos->frequency == CPUFREQ_ENTRY_INVALID) \
755 * cpufreq_for_each_efficient_entry_idx - iterate with index over a cpufreq
764 #define cpufreq_for_each_efficient_entry_idx(pos, table, idx, efficiencies) \
766 if (efficiencies && (pos->flags & CPUFREQ_INEFFICIENT_FREQ)) \
780 unsigned int max, unsigned int relation);
795 struct cpufreq_frequency_table *table = policy->freq_table; in cpufreq_table_find_index_al()
798 int idx, best = -1; in cpufreq_table_find_index_al()
801 freq = pos->frequency; in cpufreq_table_find_index_al()
817 struct cpufreq_frequency_table *table = policy->freq_table; in cpufreq_table_find_index_dl()
820 int idx, best = -1; in cpufreq_table_find_index_dl()
823 freq = pos->frequency; in cpufreq_table_find_index_dl()
834 if (best == -1) in cpufreq_table_find_index_dl()
845 unsigned int min, unsigned int max, in find_index_l() argument
848 target_freq = clamp_val(target_freq, min, max); in find_index_l()
850 if (policy->freq_table_sorted == CPUFREQ_TABLE_SORTED_ASCENDING) in find_index_l()
858 /* Works only on sorted freq-tables */
863 return find_index_l(policy, target_freq, policy->min, policy->max, efficiencies); in cpufreq_table_find_index_l()
871 struct cpufreq_frequency_table *table = policy->freq_table; in cpufreq_table_find_index_ah()
874 int idx, best = -1; in cpufreq_table_find_index_ah()
877 freq = pos->frequency; in cpufreq_table_find_index_ah()
888 if (best == -1) in cpufreq_table_find_index_ah()
902 struct cpufreq_frequency_table *table = policy->freq_table; in cpufreq_table_find_index_dh()
905 int idx, best = -1; in cpufreq_table_find_index_dh()
908 freq = pos->frequency; in cpufreq_table_find_index_dh()
921 unsigned int min, unsigned int max, in find_index_h() argument
924 target_freq = clamp_val(target_freq, min, max); in find_index_h()
926 if (policy->freq_table_sorted == CPUFREQ_TABLE_SORTED_ASCENDING) in find_index_h()
934 /* Works only on sorted freq-tables */
939 return find_index_h(policy, target_freq, policy->min, policy->max, efficiencies); in cpufreq_table_find_index_h()
947 struct cpufreq_frequency_table *table = policy->freq_table; in cpufreq_table_find_index_ac()
950 int idx, best = -1; in cpufreq_table_find_index_ac()
953 freq = pos->frequency; in cpufreq_table_find_index_ac()
964 if (best == -1) in cpufreq_table_find_index_ac()
968 if (target_freq - table[best].frequency > freq - target_freq) in cpufreq_table_find_index_ac()
982 struct cpufreq_frequency_table *table = policy->freq_table; in cpufreq_table_find_index_dc()
985 int idx, best = -1; in cpufreq_table_find_index_dc()
988 freq = pos->frequency; in cpufreq_table_find_index_dc()
999 if (best == -1) in cpufreq_table_find_index_dc()
1003 if (table[best].frequency - target_freq > target_freq - freq) in cpufreq_table_find_index_dc()
1014 unsigned int min, unsigned int max, in find_index_c() argument
1017 target_freq = clamp_val(target_freq, min, max); in find_index_c()
1019 if (policy->freq_table_sorted == CPUFREQ_TABLE_SORTED_ASCENDING) in find_index_c()
1027 /* Works only on sorted freq-tables */
1032 return find_index_c(policy, target_freq, policy->min, policy->max, efficiencies); in cpufreq_table_find_index_c()
1036 unsigned int min, unsigned int max, in cpufreq_is_in_limits() argument
1044 freq = policy->freq_table[idx].frequency; in cpufreq_is_in_limits()
1046 return freq == clamp_val(freq, min, max); in cpufreq_is_in_limits()
1052 unsigned int max, in cpufreq_frequency_table_target() argument
1055 bool efficiencies = policy->efficiencies_available && in cpufreq_frequency_table_target()
1062 if (unlikely(policy->freq_table_sorted == CPUFREQ_TABLE_UNSORTED)) in cpufreq_frequency_table_target()
1064 max, relation); in cpufreq_frequency_table_target()
1068 idx = find_index_l(policy, target_freq, min, max, efficiencies); in cpufreq_frequency_table_target()
1071 idx = find_index_h(policy, target_freq, min, max, efficiencies); in cpufreq_frequency_table_target()
1074 idx = find_index_c(policy, target_freq, min, max, efficiencies); in cpufreq_frequency_table_target()
1081 /* Limit frequency index to honor min and max */ in cpufreq_frequency_table_target()
1082 if (!cpufreq_is_in_limits(policy, min, max, idx) && efficiencies) { in cpufreq_frequency_table_target()
1095 if (unlikely(!policy->freq_table)) in cpufreq_table_count_valid_entries()
1098 cpufreq_for_each_valid_entry(pos, policy->freq_table) in cpufreq_table_count_valid_entries()
1105 * cpufreq_table_set_inefficient() - Mark a frequency as inefficient
1121 if (policy->freq_table_sorted == CPUFREQ_TABLE_UNSORTED) in cpufreq_table_set_inefficient()
1122 return -EINVAL; in cpufreq_table_set_inefficient()
1124 cpufreq_for_each_valid_entry(pos, policy->freq_table) { in cpufreq_table_set_inefficient()
1125 if (pos->frequency == frequency) { in cpufreq_table_set_inefficient()
1126 pos->flags |= CPUFREQ_INEFFICIENT_FREQ; in cpufreq_table_set_inefficient()
1127 policy->efficiencies_available = true; in cpufreq_table_set_inefficient()
1132 return -EINVAL; in cpufreq_table_set_inefficient()
1143 return -ENODEV; in parse_perf_domain()
1189 return -EOPNOTSUPP; in cpufreq_boost_set_sw()
1196 return -EINVAL; in cpufreq_table_set_inefficient()
1203 return -EOPNOTSUPP; in of_perf_domain_get_sharing_cpumask()
1230 dev_pm_opp_of_register_em(get_cpu_device(policy->cpu), in cpufreq_register_em_with_opp()
1231 policy->related_cpus); in cpufreq_register_em_with_opp()