1/* SPDX-License-Identifier: GPL-2.0-only */
2/*
3 * linux/include/linux/cpufreq.h
4 *
5 * Copyright (C) 2001 Russell King
6 *           (C) 2002 - 2003 Dominik Brodowski <linux@brodo.de>
7 */
8#ifndef _LINUX_CPUFREQ_H
9#define _LINUX_CPUFREQ_H
10
11#include <linux/clk.h>
12#include <linux/cpumask.h>
13#include <linux/completion.h>
14#include <linux/kobject.h>
15#include <linux/notifier.h>
16#include <linux/pm_qos.h>
17#include <linux/spinlock.h>
18#include <linux/sysfs.h>
19
20/*********************************************************************
21 *                        CPUFREQ INTERFACE                          *
22 *********************************************************************/
23/*
24 * Frequency values here are CPU kHz
25 *
26 * Maximum transition latency is in nanoseconds - if it's unknown,
27 * CPUFREQ_ETERNAL shall be used.
28 */
29
30#define CPUFREQ_ETERNAL			(-1)
31#define CPUFREQ_NAME_LEN		16
32/* Print length for names. Extra 1 space for accommodating '\n' in prints */
33#define CPUFREQ_NAME_PLEN		(CPUFREQ_NAME_LEN + 1)
34
35struct cpufreq_governor;
36
37enum cpufreq_table_sorting {
38	CPUFREQ_TABLE_UNSORTED,
39	CPUFREQ_TABLE_SORTED_ASCENDING,
40	CPUFREQ_TABLE_SORTED_DESCENDING
41};
42
43struct cpufreq_cpuinfo {
44	unsigned int		max_freq;
45	unsigned int		min_freq;
46
47	/* in 10^(-9) s = nanoseconds */
48	unsigned int		transition_latency;
49};
50
51struct cpufreq_policy {
52	/* CPUs sharing clock, require sw coordination */
53	cpumask_var_t		cpus;	/* Online CPUs only */
54	cpumask_var_t		related_cpus; /* Online + Offline CPUs */
55	cpumask_var_t		real_cpus; /* Related and present */
56
57	unsigned int		shared_type; /* ACPI: ANY or ALL affected CPUs
58						should set cpufreq */
59	unsigned int		cpu;    /* cpu managing this policy, must be online */
60
61	struct clk		*clk;
62	struct cpufreq_cpuinfo	cpuinfo;/* see above */
63
64	unsigned int		min;    /* in kHz */
65	unsigned int		max;    /* in kHz */
66	unsigned int		cur;    /* in kHz, only needed if cpufreq
67					 * governors are used */
68	unsigned int		restore_freq; /* = policy->cur before transition */
69	unsigned int		suspend_freq; /* freq to set during suspend */
70
71	unsigned int		policy; /* see above */
72	unsigned int		last_policy; /* policy before unplug */
73	struct cpufreq_governor	*governor; /* see below */
74	void			*governor_data;
75	char			last_governor[CPUFREQ_NAME_LEN]; /* last governor used */
76
77	struct work_struct	update; /* if update_policy() needs to be
78					 * called, but you're in IRQ context */
79
80	struct freq_constraints	constraints;
81	struct freq_qos_request	*min_freq_req;
82	struct freq_qos_request	*max_freq_req;
83
84	struct cpufreq_frequency_table	*freq_table;
85	enum cpufreq_table_sorting freq_table_sorted;
86
87	struct list_head        policy_list;
88	struct kobject		kobj;
89	struct completion	kobj_unregister;
90
91	/*
92	 * The rules for this semaphore:
93	 * - Any routine that wants to read from the policy structure will
94	 *   do a down_read on this semaphore.
95	 * - Any routine that will write to the policy structure and/or may take away
96	 *   the policy altogether (eg. CPU hotplug), will hold this lock in write
97	 *   mode before doing so.
98	 */
99	struct rw_semaphore	rwsem;
100
101	/*
102	 * Fast switch flags:
103	 * - fast_switch_possible should be set by the driver if it can
104	 *   guarantee that frequency can be changed on any CPU sharing the
105	 *   policy and that the change will affect all of the policy CPUs then.
106	 * - fast_switch_enabled is to be set by governors that support fast
107	 *   frequency switching with the help of cpufreq_enable_fast_switch().
108	 */
109	bool			fast_switch_possible;
110	bool			fast_switch_enabled;
111
112	/*
113	 * Set if the CPUFREQ_GOV_STRICT_TARGET flag is set for the current
114	 * governor.
115	 */
116	bool			strict_target;
117
118	/*
119	 * Preferred average time interval between consecutive invocations of
120	 * the driver to set the frequency for this policy.  To be set by the
121	 * scaling driver (0, which is the default, means no preference).
122	 */
123	unsigned int		transition_delay_us;
124
125	/*
126	 * Remote DVFS flag (Not added to the driver structure as we don't want
127	 * to access another structure from scheduler hotpath).
128	 *
129	 * Should be set if CPUs can do DVFS on behalf of other CPUs from
130	 * different cpufreq policies.
131	 */
132	bool			dvfs_possible_from_any_cpu;
133
134	 /* Cached frequency lookup from cpufreq_driver_resolve_freq. */
135	unsigned int cached_target_freq;
136	unsigned int cached_resolved_idx;
137
138	/* Synchronization for frequency transitions */
139	bool			transition_ongoing; /* Tracks transition status */
140	spinlock_t		transition_lock;
141	wait_queue_head_t	transition_wait;
142	struct task_struct	*transition_task; /* Task which is doing the transition */
143
144	/* cpufreq-stats */
145	struct cpufreq_stats	*stats;
146
147	/* For cpufreq driver's internal use */
148	void			*driver_data;
149
150	/* Pointer to the cooling device if used for thermal mitigation */
151	struct thermal_cooling_device *cdev;
152
153	struct notifier_block nb_min;
154	struct notifier_block nb_max;
155};
156
157/*
158 * Used for passing new cpufreq policy data to the cpufreq driver's ->verify()
159 * callback for sanitization.  That callback is only expected to modify the min
160 * and max values, if necessary, and specifically it must not update the
161 * frequency table.
162 */
163struct cpufreq_policy_data {
164	struct cpufreq_cpuinfo		cpuinfo;
165	struct cpufreq_frequency_table	*freq_table;
166	unsigned int			cpu;
167	unsigned int			min;    /* in kHz */
168	unsigned int			max;    /* in kHz */
169};
170
171struct cpufreq_freqs {
172	struct cpufreq_policy *policy;
173	unsigned int old;
174	unsigned int new;
175	u8 flags;		/* flags of cpufreq_driver, see below. */
176};
177
178/* Only for ACPI */
179#define CPUFREQ_SHARED_TYPE_NONE (0) /* None */
180#define CPUFREQ_SHARED_TYPE_HW	 (1) /* HW does needed coordination */
181#define CPUFREQ_SHARED_TYPE_ALL	 (2) /* All dependent CPUs should set freq */
182#define CPUFREQ_SHARED_TYPE_ANY	 (3) /* Freq can be set from any dependent CPU*/
183
184#ifdef CONFIG_CPU_FREQ
185struct cpufreq_policy *cpufreq_cpu_get_raw(unsigned int cpu);
186struct cpufreq_policy *cpufreq_cpu_get(unsigned int cpu);
187void cpufreq_cpu_put(struct cpufreq_policy *policy);
188#else
189static inline struct cpufreq_policy *cpufreq_cpu_get_raw(unsigned int cpu)
190{
191	return NULL;
192}
193static inline struct cpufreq_policy *cpufreq_cpu_get(unsigned int cpu)
194{
195	return NULL;
196}
197static inline void cpufreq_cpu_put(struct cpufreq_policy *policy) { }
198#endif
199
200static inline bool policy_is_inactive(struct cpufreq_policy *policy)
201{
202	return cpumask_empty(policy->cpus);
203}
204
205static inline bool policy_is_shared(struct cpufreq_policy *policy)
206{
207	return cpumask_weight(policy->cpus) > 1;
208}
209
210#ifdef CONFIG_CPU_FREQ
211unsigned int cpufreq_get(unsigned int cpu);
212unsigned int cpufreq_quick_get(unsigned int cpu);
213unsigned int cpufreq_quick_get_max(unsigned int cpu);
214unsigned int cpufreq_get_hw_max_freq(unsigned int cpu);
215void disable_cpufreq(void);
216
217u64 get_cpu_idle_time(unsigned int cpu, u64 *wall, int io_busy);
218
219struct cpufreq_policy *cpufreq_cpu_acquire(unsigned int cpu);
220void cpufreq_cpu_release(struct cpufreq_policy *policy);
221int cpufreq_get_policy(struct cpufreq_policy *policy, unsigned int cpu);
222void refresh_frequency_limits(struct cpufreq_policy *policy);
223void cpufreq_update_policy(unsigned int cpu);
224void cpufreq_update_limits(unsigned int cpu);
225bool have_governor_per_policy(void);
226bool cpufreq_supports_freq_invariance(void);
227struct kobject *get_governor_parent_kobj(struct cpufreq_policy *policy);
228void cpufreq_enable_fast_switch(struct cpufreq_policy *policy);
229void cpufreq_disable_fast_switch(struct cpufreq_policy *policy);
230#else
231static inline unsigned int cpufreq_get(unsigned int cpu)
232{
233	return 0;
234}
235static inline unsigned int cpufreq_quick_get(unsigned int cpu)
236{
237	return 0;
238}
239static inline unsigned int cpufreq_quick_get_max(unsigned int cpu)
240{
241	return 0;
242}
243static inline unsigned int cpufreq_get_hw_max_freq(unsigned int cpu)
244{
245	return 0;
246}
247static inline bool cpufreq_supports_freq_invariance(void)
248{
249	return false;
250}
251static inline void disable_cpufreq(void) { }
252#endif
253
254#ifdef CONFIG_CPU_FREQ_STAT
255void cpufreq_stats_create_table(struct cpufreq_policy *policy);
256void cpufreq_stats_free_table(struct cpufreq_policy *policy);
257void cpufreq_stats_record_transition(struct cpufreq_policy *policy,
258				     unsigned int new_freq);
259#else
260static inline void cpufreq_stats_create_table(struct cpufreq_policy *policy) { }
261static inline void cpufreq_stats_free_table(struct cpufreq_policy *policy) { }
262static inline void cpufreq_stats_record_transition(struct cpufreq_policy *policy,
263						   unsigned int new_freq) { }
264#endif /* CONFIG_CPU_FREQ_STAT */
265
266/*********************************************************************
267 *                      CPUFREQ DRIVER INTERFACE                     *
268 *********************************************************************/
269
270#define CPUFREQ_RELATION_L 0  /* lowest frequency at or above target */
271#define CPUFREQ_RELATION_H 1  /* highest frequency below or at target */
272#define CPUFREQ_RELATION_C 2  /* closest frequency to target */
273
274struct freq_attr {
275	struct attribute attr;
276	ssize_t (*show)(struct cpufreq_policy *, char *);
277	ssize_t (*store)(struct cpufreq_policy *, const char *, size_t count);
278};
279
280#define cpufreq_freq_attr_ro(_name)		\
281static struct freq_attr _name =			\
282__ATTR(_name, 0444, show_##_name, NULL)
283
284#define cpufreq_freq_attr_ro_perm(_name, _perm)	\
285static struct freq_attr _name =			\
286__ATTR(_name, _perm, show_##_name, NULL)
287
288#define cpufreq_freq_attr_rw(_name)		\
289static struct freq_attr _name =			\
290__ATTR(_name, 0644, show_##_name, store_##_name)
291
292#define cpufreq_freq_attr_wo(_name)		\
293static struct freq_attr _name =			\
294__ATTR(_name, 0200, NULL, store_##_name)
295
296#define define_one_global_ro(_name)		\
297static struct kobj_attribute _name =		\
298__ATTR(_name, 0444, show_##_name, NULL)
299
300#define define_one_global_rw(_name)		\
301static struct kobj_attribute _name =		\
302__ATTR(_name, 0644, show_##_name, store_##_name)
303
304
305struct cpufreq_driver {
306	char		name[CPUFREQ_NAME_LEN];
307	u16		flags;
308	void		*driver_data;
309
310	/* needed by all drivers */
311	int		(*init)(struct cpufreq_policy *policy);
312	int		(*verify)(struct cpufreq_policy_data *policy);
313
314	/* define one out of two */
315	int		(*setpolicy)(struct cpufreq_policy *policy);
316
317	/*
318	 * On failure, should always restore frequency to policy->restore_freq
319	 * (i.e. old freq).
320	 */
321	int		(*target)(struct cpufreq_policy *policy,
322				  unsigned int target_freq,
323				  unsigned int relation);	/* Deprecated */
324	int		(*target_index)(struct cpufreq_policy *policy,
325					unsigned int index);
326	unsigned int	(*fast_switch)(struct cpufreq_policy *policy,
327				       unsigned int target_freq);
328
329	/*
330	 * Caches and returns the lowest driver-supported frequency greater than
331	 * or equal to the target frequency, subject to any driver limitations.
332	 * Does not set the frequency. Only to be implemented for drivers with
333	 * target().
334	 */
335	unsigned int	(*resolve_freq)(struct cpufreq_policy *policy,
336					unsigned int target_freq);
337
338	/*
339	 * Only for drivers with target_index() and CPUFREQ_ASYNC_NOTIFICATION
340	 * unset.
341	 *
342	 * get_intermediate should return a stable intermediate frequency
343	 * platform wants to switch to and target_intermediate() should set CPU
344	 * to that frequency, before jumping to the frequency corresponding
345	 * to 'index'. Core will take care of sending notifications and driver
346	 * doesn't have to handle them in target_intermediate() or
347	 * target_index().
348	 *
349	 * Drivers can return '0' from get_intermediate() in case they don't
350	 * wish to switch to intermediate frequency for some target frequency.
351	 * In that case core will directly call ->target_index().
352	 */
353	unsigned int	(*get_intermediate)(struct cpufreq_policy *policy,
354					    unsigned int index);
355	int		(*target_intermediate)(struct cpufreq_policy *policy,
356					       unsigned int index);
357
358	/* should be defined, if possible */
359	unsigned int	(*get)(unsigned int cpu);
360
361	/* Called to update policy limits on firmware notifications. */
362	void		(*update_limits)(unsigned int cpu);
363
364	/* optional */
365	int		(*bios_limit)(int cpu, unsigned int *limit);
366
367	int		(*online)(struct cpufreq_policy *policy);
368	int		(*offline)(struct cpufreq_policy *policy);
369	int		(*exit)(struct cpufreq_policy *policy);
370	void		(*stop_cpu)(struct cpufreq_policy *policy);
371	int		(*suspend)(struct cpufreq_policy *policy);
372	int		(*resume)(struct cpufreq_policy *policy);
373
374	/* Will be called after the driver is fully initialized */
375	void		(*ready)(struct cpufreq_policy *policy);
376
377	struct freq_attr **attr;
378
379	/* platform specific boost support code */
380	bool		boost_enabled;
381	int		(*set_boost)(struct cpufreq_policy *policy, int state);
382};
383
384/* flags */
385
386/* driver isn't removed even if all ->init() calls failed */
387#define CPUFREQ_STICKY				BIT(0)
388
389/* loops_per_jiffy or other kernel "constants" aren't affected by frequency transitions */
390#define CPUFREQ_CONST_LOOPS			BIT(1)
391
392/* don't warn on suspend/resume speed mismatches */
393#define CPUFREQ_PM_NO_WARN			BIT(2)
394
395/*
396 * This should be set by platforms having multiple clock-domains, i.e.
397 * supporting multiple policies. With this sysfs directories of governor would
398 * be created in cpu/cpu<num>/cpufreq/ directory and so they can use the same
399 * governor with different tunables for different clusters.
400 */
401#define CPUFREQ_HAVE_GOVERNOR_PER_POLICY	BIT(3)
402
403/*
404 * Driver will do POSTCHANGE notifications from outside of their ->target()
405 * routine and so must set cpufreq_driver->flags with this flag, so that core
406 * can handle them specially.
407 */
408#define CPUFREQ_ASYNC_NOTIFICATION		BIT(4)
409
410/*
411 * Set by drivers which want cpufreq core to check if CPU is running at a
412 * frequency present in freq-table exposed by the driver. For these drivers if
413 * CPU is found running at an out of table freq, we will try to set it to a freq
414 * from the table. And if that fails, we will stop further boot process by
415 * issuing a BUG_ON().
416 */
417#define CPUFREQ_NEED_INITIAL_FREQ_CHECK	BIT(5)
418
419/*
420 * Set by drivers to disallow use of governors with "dynamic_switching" flag
421 * set.
422 */
423#define CPUFREQ_NO_AUTO_DYNAMIC_SWITCHING	BIT(6)
424
425/*
426 * Set by drivers that want the core to automatically register the cpufreq
427 * driver as a thermal cooling device.
428 */
429#define CPUFREQ_IS_COOLING_DEV			BIT(7)
430
431/*
432 * Set by drivers that need to update internale upper and lower boundaries along
433 * with the target frequency and so the core and governors should also invoke
434 * the diver if the target frequency does not change, but the policy min or max
435 * may have changed.
436 */
437#define CPUFREQ_NEED_UPDATE_LIMITS		BIT(8)
438
439int cpufreq_register_driver(struct cpufreq_driver *driver_data);
440int cpufreq_unregister_driver(struct cpufreq_driver *driver_data);
441
442bool cpufreq_driver_test_flags(u16 flags);
443const char *cpufreq_get_current_driver(void);
444void *cpufreq_get_driver_data(void);
445
446static inline int cpufreq_thermal_control_enabled(struct cpufreq_driver *drv)
447{
448	return IS_ENABLED(CONFIG_CPU_THERMAL) &&
449		(drv->flags & CPUFREQ_IS_COOLING_DEV);
450}
451
452static inline void cpufreq_verify_within_limits(struct cpufreq_policy_data *policy,
453						unsigned int min,
454						unsigned int max)
455{
456	if (policy->min < min)
457		policy->min = min;
458	if (policy->max < min)
459		policy->max = min;
460	if (policy->min > max)
461		policy->min = max;
462	if (policy->max > max)
463		policy->max = max;
464	if (policy->min > policy->max)
465		policy->min = policy->max;
466	return;
467}
468
469static inline void
470cpufreq_verify_within_cpu_limits(struct cpufreq_policy_data *policy)
471{
472	cpufreq_verify_within_limits(policy, policy->cpuinfo.min_freq,
473				     policy->cpuinfo.max_freq);
474}
475
476#ifdef CONFIG_CPU_FREQ
477void cpufreq_suspend(void);
478void cpufreq_resume(void);
479int cpufreq_generic_suspend(struct cpufreq_policy *policy);
480#else
481static inline void cpufreq_suspend(void) {}
482static inline void cpufreq_resume(void) {}
483#endif
484
485/*********************************************************************
486 *                     CPUFREQ NOTIFIER INTERFACE                    *
487 *********************************************************************/
488
489#define CPUFREQ_TRANSITION_NOTIFIER	(0)
490#define CPUFREQ_POLICY_NOTIFIER		(1)
491
492/* Transition notifiers */
493#define CPUFREQ_PRECHANGE		(0)
494#define CPUFREQ_POSTCHANGE		(1)
495
496/* Policy Notifiers  */
497#define CPUFREQ_CREATE_POLICY		(0)
498#define CPUFREQ_REMOVE_POLICY		(1)
499
500#ifdef CONFIG_CPU_FREQ
501int cpufreq_register_notifier(struct notifier_block *nb, unsigned int list);
502int cpufreq_unregister_notifier(struct notifier_block *nb, unsigned int list);
503
504void cpufreq_freq_transition_begin(struct cpufreq_policy *policy,
505		struct cpufreq_freqs *freqs);
506void cpufreq_freq_transition_end(struct cpufreq_policy *policy,
507		struct cpufreq_freqs *freqs, int transition_failed);
508
509#else /* CONFIG_CPU_FREQ */
510static inline int cpufreq_register_notifier(struct notifier_block *nb,
511						unsigned int list)
512{
513	return 0;
514}
515static inline int cpufreq_unregister_notifier(struct notifier_block *nb,
516						unsigned int list)
517{
518	return 0;
519}
520#endif /* !CONFIG_CPU_FREQ */
521
522/**
523 * cpufreq_scale - "old * mult / div" calculation for large values (32-bit-arch
524 * safe)
525 * @old:   old value
526 * @div:   divisor
527 * @mult:  multiplier
528 *
529 *
530 * new = old * mult / div
531 */
532static inline unsigned long cpufreq_scale(unsigned long old, u_int div,
533		u_int mult)
534{
535#if BITS_PER_LONG == 32
536	u64 result = ((u64) old) * ((u64) mult);
537	do_div(result, div);
538	return (unsigned long) result;
539
540#elif BITS_PER_LONG == 64
541	unsigned long result = old * ((u64) mult);
542	result /= div;
543	return result;
544#endif
545}
546
547/*********************************************************************
548 *                          CPUFREQ GOVERNORS                        *
549 *********************************************************************/
550
551#define CPUFREQ_POLICY_UNKNOWN		(0)
552/*
553 * If (cpufreq_driver->target) exists, the ->governor decides what frequency
554 * within the limits is used. If (cpufreq_driver->setpolicy> exists, these
555 * two generic policies are available:
556 */
557#define CPUFREQ_POLICY_POWERSAVE	(1)
558#define CPUFREQ_POLICY_PERFORMANCE	(2)
559
560/*
561 * The polling frequency depends on the capability of the processor. Default
562 * polling frequency is 1000 times the transition latency of the processor. The
563 * ondemand governor will work on any processor with transition latency <= 10ms,
564 * using appropriate sampling rate.
565 */
566#define LATENCY_MULTIPLIER		(1000)
567
568struct cpufreq_governor {
569	char	name[CPUFREQ_NAME_LEN];
570	int	(*init)(struct cpufreq_policy *policy);
571	void	(*exit)(struct cpufreq_policy *policy);
572	int	(*start)(struct cpufreq_policy *policy);
573	void	(*stop)(struct cpufreq_policy *policy);
574	void	(*limits)(struct cpufreq_policy *policy);
575	ssize_t	(*show_setspeed)	(struct cpufreq_policy *policy,
576					 char *buf);
577	int	(*store_setspeed)	(struct cpufreq_policy *policy,
578					 unsigned int freq);
579	struct list_head	governor_list;
580	struct module		*owner;
581	u8			flags;
582};
583
584/* Governor flags */
585
586/* For governors which change frequency dynamically by themselves */
587#define CPUFREQ_GOV_DYNAMIC_SWITCHING	BIT(0)
588
589/* For governors wanting the target frequency to be set exactly */
590#define CPUFREQ_GOV_STRICT_TARGET	BIT(1)
591
592
593/* Pass a target to the cpufreq driver */
594unsigned int cpufreq_driver_fast_switch(struct cpufreq_policy *policy,
595					unsigned int target_freq);
596int cpufreq_driver_target(struct cpufreq_policy *policy,
597				 unsigned int target_freq,
598				 unsigned int relation);
599int __cpufreq_driver_target(struct cpufreq_policy *policy,
600				   unsigned int target_freq,
601				   unsigned int relation);
602unsigned int cpufreq_driver_resolve_freq(struct cpufreq_policy *policy,
603					 unsigned int target_freq);
604unsigned int cpufreq_policy_transition_delay_us(struct cpufreq_policy *policy);
605int cpufreq_register_governor(struct cpufreq_governor *governor);
606void cpufreq_unregister_governor(struct cpufreq_governor *governor);
607int cpufreq_start_governor(struct cpufreq_policy *policy);
608void cpufreq_stop_governor(struct cpufreq_policy *policy);
609
610#define cpufreq_governor_init(__governor)			\
611static int __init __governor##_init(void)			\
612{								\
613	return cpufreq_register_governor(&__governor);	\
614}								\
615core_initcall(__governor##_init)
616
617#define cpufreq_governor_exit(__governor)			\
618static void __exit __governor##_exit(void)			\
619{								\
620	return cpufreq_unregister_governor(&__governor);	\
621}								\
622module_exit(__governor##_exit)
623
624struct cpufreq_governor *cpufreq_default_governor(void);
625struct cpufreq_governor *cpufreq_fallback_governor(void);
626
627static inline void cpufreq_policy_apply_limits(struct cpufreq_policy *policy)
628{
629	if (policy->max < policy->cur)
630		__cpufreq_driver_target(policy, policy->max, CPUFREQ_RELATION_H);
631	else if (policy->min > policy->cur)
632		__cpufreq_driver_target(policy, policy->min, CPUFREQ_RELATION_L);
633}
634
635/* Governor attribute set */
636struct gov_attr_set {
637	struct kobject kobj;
638	struct list_head policy_list;
639	struct mutex update_lock;
640	int usage_count;
641};
642
643/* sysfs ops for cpufreq governors */
644extern const struct sysfs_ops governor_sysfs_ops;
645
646void gov_attr_set_init(struct gov_attr_set *attr_set, struct list_head *list_node);
647void gov_attr_set_get(struct gov_attr_set *attr_set, struct list_head *list_node);
648unsigned int gov_attr_set_put(struct gov_attr_set *attr_set, struct list_head *list_node);
649
650/* Governor sysfs attribute */
651struct governor_attr {
652	struct attribute attr;
653	ssize_t (*show)(struct gov_attr_set *attr_set, char *buf);
654	ssize_t (*store)(struct gov_attr_set *attr_set, const char *buf,
655			 size_t count);
656};
657
658/*********************************************************************
659 *                     FREQUENCY TABLE HELPERS                       *
660 *********************************************************************/
661
662/* Special Values of .frequency field */
663#define CPUFREQ_ENTRY_INVALID	~0u
664#define CPUFREQ_TABLE_END	~1u
665/* Special Values of .flags field */
666#define CPUFREQ_BOOST_FREQ	(1 << 0)
667
668struct cpufreq_frequency_table {
669	unsigned int	flags;
670	unsigned int	driver_data; /* driver specific data, not used by core */
671	unsigned int	frequency; /* kHz - doesn't need to be in ascending
672				    * order */
673};
674
675#if defined(CONFIG_CPU_FREQ) && defined(CONFIG_PM_OPP)
676int dev_pm_opp_init_cpufreq_table(struct device *dev,
677				  struct cpufreq_frequency_table **table);
678void dev_pm_opp_free_cpufreq_table(struct device *dev,
679				   struct cpufreq_frequency_table **table);
680#else
681static inline int dev_pm_opp_init_cpufreq_table(struct device *dev,
682						struct cpufreq_frequency_table
683						**table)
684{
685	return -EINVAL;
686}
687
688static inline void dev_pm_opp_free_cpufreq_table(struct device *dev,
689						 struct cpufreq_frequency_table
690						 **table)
691{
692}
693#endif
694
695/*
696 * cpufreq_for_each_entry -	iterate over a cpufreq_frequency_table
697 * @pos:	the cpufreq_frequency_table * to use as a loop cursor.
698 * @table:	the cpufreq_frequency_table * to iterate over.
699 */
700
701#define cpufreq_for_each_entry(pos, table)	\
702	for (pos = table; pos->frequency != CPUFREQ_TABLE_END; pos++)
703
704/*
705 * cpufreq_for_each_entry_idx -	iterate over a cpufreq_frequency_table
706 *	with index
707 * @pos:	the cpufreq_frequency_table * to use as a loop cursor.
708 * @table:	the cpufreq_frequency_table * to iterate over.
709 * @idx:	the table entry currently being processed
710 */
711
712#define cpufreq_for_each_entry_idx(pos, table, idx)	\
713	for (pos = table, idx = 0; pos->frequency != CPUFREQ_TABLE_END; \
714		pos++, idx++)
715
716/*
717 * cpufreq_for_each_valid_entry -     iterate over a cpufreq_frequency_table
718 *	excluding CPUFREQ_ENTRY_INVALID frequencies.
719 * @pos:        the cpufreq_frequency_table * to use as a loop cursor.
720 * @table:      the cpufreq_frequency_table * to iterate over.
721 */
722
723#define cpufreq_for_each_valid_entry(pos, table)			\
724	for (pos = table; pos->frequency != CPUFREQ_TABLE_END; pos++)	\
725		if (pos->frequency == CPUFREQ_ENTRY_INVALID)		\
726			continue;					\
727		else
728
729/*
730 * cpufreq_for_each_valid_entry_idx -     iterate with index over a cpufreq
731 *	frequency_table excluding CPUFREQ_ENTRY_INVALID frequencies.
732 * @pos:	the cpufreq_frequency_table * to use as a loop cursor.
733 * @table:	the cpufreq_frequency_table * to iterate over.
734 * @idx:	the table entry currently being processed
735 */
736
737#define cpufreq_for_each_valid_entry_idx(pos, table, idx)		\
738	cpufreq_for_each_entry_idx(pos, table, idx)			\
739		if (pos->frequency == CPUFREQ_ENTRY_INVALID)		\
740			continue;					\
741		else
742
743
744int cpufreq_frequency_table_cpuinfo(struct cpufreq_policy *policy,
745				    struct cpufreq_frequency_table *table);
746
747int cpufreq_frequency_table_verify(struct cpufreq_policy_data *policy,
748				   struct cpufreq_frequency_table *table);
749int cpufreq_generic_frequency_table_verify(struct cpufreq_policy_data *policy);
750
751int cpufreq_table_index_unsorted(struct cpufreq_policy *policy,
752				 unsigned int target_freq,
753				 unsigned int relation);
754int cpufreq_frequency_table_get_index(struct cpufreq_policy *policy,
755		unsigned int freq);
756
757ssize_t cpufreq_show_cpus(const struct cpumask *mask, char *buf);
758
759#ifdef CONFIG_CPU_FREQ
760int cpufreq_boost_trigger_state(int state);
761int cpufreq_boost_enabled(void);
762int cpufreq_enable_boost_support(void);
763bool policy_has_boost_freq(struct cpufreq_policy *policy);
764
765/* Find lowest freq at or above target in a table in ascending order */
766static inline int cpufreq_table_find_index_al(struct cpufreq_policy *policy,
767					      unsigned int target_freq)
768{
769	struct cpufreq_frequency_table *table = policy->freq_table;
770	struct cpufreq_frequency_table *pos;
771	unsigned int freq;
772	int idx, best = -1;
773
774	cpufreq_for_each_valid_entry_idx(pos, table, idx) {
775		freq = pos->frequency;
776
777		if (freq >= target_freq)
778			return idx;
779
780		best = idx;
781	}
782
783	return best;
784}
785
786/* Find lowest freq at or above target in a table in descending order */
787static inline int cpufreq_table_find_index_dl(struct cpufreq_policy *policy,
788					      unsigned int target_freq)
789{
790	struct cpufreq_frequency_table *table = policy->freq_table;
791	struct cpufreq_frequency_table *pos;
792	unsigned int freq;
793	int idx, best = -1;
794
795	cpufreq_for_each_valid_entry_idx(pos, table, idx) {
796		freq = pos->frequency;
797
798		if (freq == target_freq)
799			return idx;
800
801		if (freq > target_freq) {
802			best = idx;
803			continue;
804		}
805
806		/* No freq found above target_freq */
807		if (best == -1)
808			return idx;
809
810		return best;
811	}
812
813	return best;
814}
815
816/* Works only on sorted freq-tables */
817static inline int cpufreq_table_find_index_l(struct cpufreq_policy *policy,
818					     unsigned int target_freq)
819{
820	target_freq = clamp_val(target_freq, policy->min, policy->max);
821
822	if (policy->freq_table_sorted == CPUFREQ_TABLE_SORTED_ASCENDING)
823		return cpufreq_table_find_index_al(policy, target_freq);
824	else
825		return cpufreq_table_find_index_dl(policy, target_freq);
826}
827
828/* Find highest freq at or below target in a table in ascending order */
829static inline int cpufreq_table_find_index_ah(struct cpufreq_policy *policy,
830					      unsigned int target_freq)
831{
832	struct cpufreq_frequency_table *table = policy->freq_table;
833	struct cpufreq_frequency_table *pos;
834	unsigned int freq;
835	int idx, best = -1;
836
837	cpufreq_for_each_valid_entry_idx(pos, table, idx) {
838		freq = pos->frequency;
839
840		if (freq == target_freq)
841			return idx;
842
843		if (freq < target_freq) {
844			best = idx;
845			continue;
846		}
847
848		/* No freq found below target_freq */
849		if (best == -1)
850			return idx;
851
852		return best;
853	}
854
855	return best;
856}
857
858/* Find highest freq at or below target in a table in descending order */
859static inline int cpufreq_table_find_index_dh(struct cpufreq_policy *policy,
860					      unsigned int target_freq)
861{
862	struct cpufreq_frequency_table *table = policy->freq_table;
863	struct cpufreq_frequency_table *pos;
864	unsigned int freq;
865	int idx, best = -1;
866
867	cpufreq_for_each_valid_entry_idx(pos, table, idx) {
868		freq = pos->frequency;
869
870		if (freq <= target_freq)
871			return idx;
872
873		best = idx;
874	}
875
876	return best;
877}
878
879/* Works only on sorted freq-tables */
880static inline int cpufreq_table_find_index_h(struct cpufreq_policy *policy,
881					     unsigned int target_freq)
882{
883	target_freq = clamp_val(target_freq, policy->min, policy->max);
884
885	if (policy->freq_table_sorted == CPUFREQ_TABLE_SORTED_ASCENDING)
886		return cpufreq_table_find_index_ah(policy, target_freq);
887	else
888		return cpufreq_table_find_index_dh(policy, target_freq);
889}
890
891/* Find closest freq to target in a table in ascending order */
892static inline int cpufreq_table_find_index_ac(struct cpufreq_policy *policy,
893					      unsigned int target_freq)
894{
895	struct cpufreq_frequency_table *table = policy->freq_table;
896	struct cpufreq_frequency_table *pos;
897	unsigned int freq;
898	int idx, best = -1;
899
900	cpufreq_for_each_valid_entry_idx(pos, table, idx) {
901		freq = pos->frequency;
902
903		if (freq == target_freq)
904			return idx;
905
906		if (freq < target_freq) {
907			best = idx;
908			continue;
909		}
910
911		/* No freq found below target_freq */
912		if (best == -1)
913			return idx;
914
915		/* Choose the closest freq */
916		if (target_freq - table[best].frequency > freq - target_freq)
917			return idx;
918
919		return best;
920	}
921
922	return best;
923}
924
925/* Find closest freq to target in a table in descending order */
926static inline int cpufreq_table_find_index_dc(struct cpufreq_policy *policy,
927					      unsigned int target_freq)
928{
929	struct cpufreq_frequency_table *table = policy->freq_table;
930	struct cpufreq_frequency_table *pos;
931	unsigned int freq;
932	int idx, best = -1;
933
934	cpufreq_for_each_valid_entry_idx(pos, table, idx) {
935		freq = pos->frequency;
936
937		if (freq == target_freq)
938			return idx;
939
940		if (freq > target_freq) {
941			best = idx;
942			continue;
943		}
944
945		/* No freq found above target_freq */
946		if (best == -1)
947			return idx;
948
949		/* Choose the closest freq */
950		if (table[best].frequency - target_freq > target_freq - freq)
951			return idx;
952
953		return best;
954	}
955
956	return best;
957}
958
959/* Works only on sorted freq-tables */
960static inline int cpufreq_table_find_index_c(struct cpufreq_policy *policy,
961					     unsigned int target_freq)
962{
963	target_freq = clamp_val(target_freq, policy->min, policy->max);
964
965	if (policy->freq_table_sorted == CPUFREQ_TABLE_SORTED_ASCENDING)
966		return cpufreq_table_find_index_ac(policy, target_freq);
967	else
968		return cpufreq_table_find_index_dc(policy, target_freq);
969}
970
971static inline int cpufreq_frequency_table_target(struct cpufreq_policy *policy,
972						 unsigned int target_freq,
973						 unsigned int relation)
974{
975	if (unlikely(policy->freq_table_sorted == CPUFREQ_TABLE_UNSORTED))
976		return cpufreq_table_index_unsorted(policy, target_freq,
977						    relation);
978
979	switch (relation) {
980	case CPUFREQ_RELATION_L:
981		return cpufreq_table_find_index_l(policy, target_freq);
982	case CPUFREQ_RELATION_H:
983		return cpufreq_table_find_index_h(policy, target_freq);
984	case CPUFREQ_RELATION_C:
985		return cpufreq_table_find_index_c(policy, target_freq);
986	default:
987		WARN_ON_ONCE(1);
988		return 0;
989	}
990}
991
992static inline int cpufreq_table_count_valid_entries(const struct cpufreq_policy *policy)
993{
994	struct cpufreq_frequency_table *pos;
995	int count = 0;
996
997	if (unlikely(!policy->freq_table))
998		return 0;
999
1000	cpufreq_for_each_valid_entry(pos, policy->freq_table)
1001		count++;
1002
1003	return count;
1004}
1005#else
1006static inline int cpufreq_boost_trigger_state(int state)
1007{
1008	return 0;
1009}
1010static inline int cpufreq_boost_enabled(void)
1011{
1012	return 0;
1013}
1014
1015static inline int cpufreq_enable_boost_support(void)
1016{
1017	return -EINVAL;
1018}
1019
1020static inline bool policy_has_boost_freq(struct cpufreq_policy *policy)
1021{
1022	return false;
1023}
1024#endif
1025
1026#if defined(CONFIG_ENERGY_MODEL) && defined(CONFIG_CPU_FREQ_GOV_SCHEDUTIL)
1027void sched_cpufreq_governor_change(struct cpufreq_policy *policy,
1028			struct cpufreq_governor *old_gov);
1029#else
1030static inline void sched_cpufreq_governor_change(struct cpufreq_policy *policy,
1031			struct cpufreq_governor *old_gov) { }
1032#endif
1033
1034extern void arch_freq_prepare_all(void);
1035extern unsigned int arch_freq_get_on_cpu(int cpu);
1036
1037#ifndef arch_set_freq_scale
1038static __always_inline
1039void arch_set_freq_scale(const struct cpumask *cpus,
1040			 unsigned long cur_freq,
1041			 unsigned long max_freq)
1042{
1043}
1044#endif
1045
1046/* the following are really really optional */
1047extern struct freq_attr cpufreq_freq_attr_scaling_available_freqs;
1048extern struct freq_attr cpufreq_freq_attr_scaling_boost_freqs;
1049extern struct freq_attr *cpufreq_generic_attr[];
1050int cpufreq_table_validate_and_sort(struct cpufreq_policy *policy);
1051
1052unsigned int cpufreq_generic_get(unsigned int cpu);
1053void cpufreq_generic_init(struct cpufreq_policy *policy,
1054		struct cpufreq_frequency_table *table,
1055		unsigned int transition_latency);
1056#endif /* _LINUX_CPUFREQ_H */
1057