1
2
3
4
5
6
7
8
9
10
11#ifndef _LINUX_CPUFREQ_H
12#define _LINUX_CPUFREQ_H
13
14#include <linux/clk.h>
15#include <linux/cpumask.h>
16#include <linux/completion.h>
17#include <linux/kobject.h>
18#include <linux/notifier.h>
19#include <linux/spinlock.h>
20#include <linux/sysfs.h>
21
22
23
24
25
26
27
28
29
30
31
32#define CPUFREQ_ETERNAL (-1)
33#define CPUFREQ_NAME_LEN 16
34
35#define CPUFREQ_NAME_PLEN (CPUFREQ_NAME_LEN + 1)
36
37struct cpufreq_governor;
38
39enum cpufreq_table_sorting {
40 CPUFREQ_TABLE_UNSORTED,
41 CPUFREQ_TABLE_SORTED_ASCENDING,
42 CPUFREQ_TABLE_SORTED_DESCENDING
43};
44
45struct cpufreq_freqs {
46 unsigned int cpu;
47 unsigned int old;
48 unsigned int new;
49 u8 flags;
50};
51
52struct cpufreq_cpuinfo {
53 unsigned int max_freq;
54 unsigned int min_freq;
55
56
57 unsigned int transition_latency;
58};
59
60struct cpufreq_user_policy {
61 unsigned int min;
62 unsigned int max;
63};
64
65struct cpufreq_policy {
66
67 cpumask_var_t cpus;
68 cpumask_var_t related_cpus;
69 cpumask_var_t real_cpus;
70
71 unsigned int shared_type;
72
73 unsigned int cpu;
74
75 struct clk *clk;
76 struct cpufreq_cpuinfo cpuinfo;
77
78 unsigned int min;
79 unsigned int max;
80 unsigned int cur;
81
82 unsigned int restore_freq;
83 unsigned int suspend_freq;
84
85 unsigned int policy;
86 unsigned int last_policy;
87 struct cpufreq_governor *governor;
88 void *governor_data;
89 char last_governor[CPUFREQ_NAME_LEN];
90
91 struct work_struct update;
92
93
94 struct cpufreq_user_policy user_policy;
95 struct cpufreq_frequency_table *freq_table;
96 enum cpufreq_table_sorting freq_table_sorted;
97
98 struct list_head policy_list;
99 struct kobject kobj;
100 struct completion kobj_unregister;
101
102
103
104
105
106
107
108
109
110 struct rw_semaphore rwsem;
111
112
113
114
115
116
117
118
119
120 bool fast_switch_possible;
121 bool fast_switch_enabled;
122
123
124
125
126
127
128 unsigned int transition_delay_us;
129
130
131
132
133
134
135
136
137 bool dvfs_possible_from_any_cpu;
138
139
140 unsigned int cached_target_freq;
141 int cached_resolved_idx;
142
143
144 bool transition_ongoing;
145 spinlock_t transition_lock;
146 wait_queue_head_t transition_wait;
147 struct task_struct *transition_task;
148
149
150 struct cpufreq_stats *stats;
151
152
153 void *driver_data;
154};
155
156
157#define CPUFREQ_SHARED_TYPE_NONE (0)
158#define CPUFREQ_SHARED_TYPE_HW (1)
159#define CPUFREQ_SHARED_TYPE_ALL (2)
160#define CPUFREQ_SHARED_TYPE_ANY (3)
161
162#ifdef CONFIG_CPU_FREQ
163struct cpufreq_policy *cpufreq_cpu_get_raw(unsigned int cpu);
164struct cpufreq_policy *cpufreq_cpu_get(unsigned int cpu);
165void cpufreq_cpu_put(struct cpufreq_policy *policy);
166#else
167static inline struct cpufreq_policy *cpufreq_cpu_get_raw(unsigned int cpu)
168{
169 return NULL;
170}
171static inline struct cpufreq_policy *cpufreq_cpu_get(unsigned int cpu)
172{
173 return NULL;
174}
175static inline void cpufreq_cpu_put(struct cpufreq_policy *policy) { }
176#endif
177
178static inline bool policy_is_shared(struct cpufreq_policy *policy)
179{
180 return cpumask_weight(policy->cpus) > 1;
181}
182
183
184extern struct kobject *cpufreq_global_kobject;
185
186#ifdef CONFIG_CPU_FREQ
187unsigned int cpufreq_get(unsigned int cpu);
188unsigned int cpufreq_quick_get(unsigned int cpu);
189unsigned int cpufreq_quick_get_max(unsigned int cpu);
190void disable_cpufreq(void);
191
192u64 get_cpu_idle_time(unsigned int cpu, u64 *wall, int io_busy);
193int cpufreq_get_policy(struct cpufreq_policy *policy, unsigned int cpu);
194void cpufreq_update_policy(unsigned int cpu);
195bool have_governor_per_policy(void);
196struct kobject *get_governor_parent_kobj(struct cpufreq_policy *policy);
197void cpufreq_enable_fast_switch(struct cpufreq_policy *policy);
198void cpufreq_disable_fast_switch(struct cpufreq_policy *policy);
199#else
200static inline unsigned int cpufreq_get(unsigned int cpu)
201{
202 return 0;
203}
204static inline unsigned int cpufreq_quick_get(unsigned int cpu)
205{
206 return 0;
207}
208static inline unsigned int cpufreq_quick_get_max(unsigned int cpu)
209{
210 return 0;
211}
212static inline void disable_cpufreq(void) { }
213#endif
214
215#ifdef CONFIG_CPU_FREQ_STAT
216void cpufreq_stats_create_table(struct cpufreq_policy *policy);
217void cpufreq_stats_free_table(struct cpufreq_policy *policy);
218void cpufreq_stats_record_transition(struct cpufreq_policy *policy,
219 unsigned int new_freq);
220#else
221static inline void cpufreq_stats_create_table(struct cpufreq_policy *policy) { }
222static inline void cpufreq_stats_free_table(struct cpufreq_policy *policy) { }
223static inline void cpufreq_stats_record_transition(struct cpufreq_policy *policy,
224 unsigned int new_freq) { }
225#endif
226
227
228
229
230
231#define CPUFREQ_RELATION_L 0
232#define CPUFREQ_RELATION_H 1
233#define CPUFREQ_RELATION_C 2
234
235struct freq_attr {
236 struct attribute attr;
237 ssize_t (*show)(struct cpufreq_policy *, char *);
238 ssize_t (*store)(struct cpufreq_policy *, const char *, size_t count);
239};
240
241#define cpufreq_freq_attr_ro(_name) \
242static struct freq_attr _name = \
243__ATTR(_name, 0444, show_##_name, NULL)
244
245#define cpufreq_freq_attr_ro_perm(_name, _perm) \
246static struct freq_attr _name = \
247__ATTR(_name, _perm, show_##_name, NULL)
248
249#define cpufreq_freq_attr_rw(_name) \
250static struct freq_attr _name = \
251__ATTR(_name, 0644, show_##_name, store_##_name)
252
253#define cpufreq_freq_attr_wo(_name) \
254static struct freq_attr _name = \
255__ATTR(_name, 0200, NULL, store_##_name)
256
257struct global_attr {
258 struct attribute attr;
259 ssize_t (*show)(struct kobject *kobj,
260 struct attribute *attr, char *buf);
261 ssize_t (*store)(struct kobject *a, struct attribute *b,
262 const char *c, size_t count);
263};
264
265#define define_one_global_ro(_name) \
266static struct global_attr _name = \
267__ATTR(_name, 0444, show_##_name, NULL)
268
269#define define_one_global_rw(_name) \
270static struct global_attr _name = \
271__ATTR(_name, 0644, show_##_name, store_##_name)
272
273
274struct cpufreq_driver {
275 char name[CPUFREQ_NAME_LEN];
276 u8 flags;
277 void *driver_data;
278
279
280 int (*init)(struct cpufreq_policy *policy);
281 int (*verify)(struct cpufreq_policy *policy);
282
283
284 int (*setpolicy)(struct cpufreq_policy *policy);
285
286
287
288
289
290 int (*target)(struct cpufreq_policy *policy,
291 unsigned int target_freq,
292 unsigned int relation);
293 int (*target_index)(struct cpufreq_policy *policy,
294 unsigned int index);
295 unsigned int (*fast_switch)(struct cpufreq_policy *policy,
296 unsigned int target_freq);
297
298
299
300
301
302
303
304 unsigned int (*resolve_freq)(struct cpufreq_policy *policy,
305 unsigned int target_freq);
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322 unsigned int (*get_intermediate)(struct cpufreq_policy *policy,
323 unsigned int index);
324 int (*target_intermediate)(struct cpufreq_policy *policy,
325 unsigned int index);
326
327
328 unsigned int (*get)(unsigned int cpu);
329
330
331 int (*bios_limit)(int cpu, unsigned int *limit);
332
333 int (*exit)(struct cpufreq_policy *policy);
334 void (*stop_cpu)(struct cpufreq_policy *policy);
335 int (*suspend)(struct cpufreq_policy *policy);
336 int (*resume)(struct cpufreq_policy *policy);
337
338
339 void (*ready)(struct cpufreq_policy *policy);
340
341 struct freq_attr **attr;
342
343
344 bool boost_enabled;
345 int (*set_boost)(int state);
346};
347
348
349#define CPUFREQ_STICKY (1 << 0)
350
351#define CPUFREQ_CONST_LOOPS (1 << 1)
352
353
354
355#define CPUFREQ_PM_NO_WARN (1 << 2)
356
357
358
359
360
361
362
363
364#define CPUFREQ_HAVE_GOVERNOR_PER_POLICY (1 << 3)
365
366
367
368
369
370
371#define CPUFREQ_ASYNC_NOTIFICATION (1 << 4)
372
373
374
375
376
377
378
379
380#define CPUFREQ_NEED_INITIAL_FREQ_CHECK (1 << 5)
381
382
383
384
385
386#define CPUFREQ_NO_AUTO_DYNAMIC_SWITCHING (1 << 6)
387
388int cpufreq_register_driver(struct cpufreq_driver *driver_data);
389int cpufreq_unregister_driver(struct cpufreq_driver *driver_data);
390
391const char *cpufreq_get_current_driver(void);
392void *cpufreq_get_driver_data(void);
393
394static inline void cpufreq_verify_within_limits(struct cpufreq_policy *policy,
395 unsigned int min, unsigned int max)
396{
397 if (policy->min < min)
398 policy->min = min;
399 if (policy->max < min)
400 policy->max = min;
401 if (policy->min > max)
402 policy->min = max;
403 if (policy->max > max)
404 policy->max = max;
405 if (policy->min > policy->max)
406 policy->min = policy->max;
407 return;
408}
409
410static inline void
411cpufreq_verify_within_cpu_limits(struct cpufreq_policy *policy)
412{
413 cpufreq_verify_within_limits(policy, policy->cpuinfo.min_freq,
414 policy->cpuinfo.max_freq);
415}
416
417#ifdef CONFIG_CPU_FREQ
418void cpufreq_suspend(void);
419void cpufreq_resume(void);
420int cpufreq_generic_suspend(struct cpufreq_policy *policy);
421#else
422static inline void cpufreq_suspend(void) {}
423static inline void cpufreq_resume(void) {}
424#endif
425
426
427
428
429
430#define CPUFREQ_TRANSITION_NOTIFIER (0)
431#define CPUFREQ_POLICY_NOTIFIER (1)
432
433
434#define CPUFREQ_PRECHANGE (0)
435#define CPUFREQ_POSTCHANGE (1)
436
437
438#define CPUFREQ_ADJUST (0)
439#define CPUFREQ_NOTIFY (1)
440
441#ifdef CONFIG_CPU_FREQ
442int cpufreq_register_notifier(struct notifier_block *nb, unsigned int list);
443int cpufreq_unregister_notifier(struct notifier_block *nb, unsigned int list);
444
445void cpufreq_freq_transition_begin(struct cpufreq_policy *policy,
446 struct cpufreq_freqs *freqs);
447void cpufreq_freq_transition_end(struct cpufreq_policy *policy,
448 struct cpufreq_freqs *freqs, int transition_failed);
449
450#else
451static inline int cpufreq_register_notifier(struct notifier_block *nb,
452 unsigned int list)
453{
454 return 0;
455}
456static inline int cpufreq_unregister_notifier(struct notifier_block *nb,
457 unsigned int list)
458{
459 return 0;
460}
461#endif
462
463
464
465
466
467
468
469
470
471
472
473static inline unsigned long cpufreq_scale(unsigned long old, u_int div,
474 u_int mult)
475{
476#if BITS_PER_LONG == 32
477 u64 result = ((u64) old) * ((u64) mult);
478 do_div(result, div);
479 return (unsigned long) result;
480
481#elif BITS_PER_LONG == 64
482 unsigned long result = old * ((u64) mult);
483 result /= div;
484 return result;
485#endif
486}
487
488
489
490
491
492
493
494
495
496
497#define CPUFREQ_POLICY_POWERSAVE (1)
498#define CPUFREQ_POLICY_PERFORMANCE (2)
499
500
501
502
503
504
505
506#define LATENCY_MULTIPLIER (1000)
507
508struct cpufreq_governor {
509 char name[CPUFREQ_NAME_LEN];
510 int (*init)(struct cpufreq_policy *policy);
511 void (*exit)(struct cpufreq_policy *policy);
512 int (*start)(struct cpufreq_policy *policy);
513 void (*stop)(struct cpufreq_policy *policy);
514 void (*limits)(struct cpufreq_policy *policy);
515 ssize_t (*show_setspeed) (struct cpufreq_policy *policy,
516 char *buf);
517 int (*store_setspeed) (struct cpufreq_policy *policy,
518 unsigned int freq);
519
520 bool dynamic_switching;
521 struct list_head governor_list;
522 struct module *owner;
523};
524
525
526unsigned int cpufreq_driver_fast_switch(struct cpufreq_policy *policy,
527 unsigned int target_freq);
528int cpufreq_driver_target(struct cpufreq_policy *policy,
529 unsigned int target_freq,
530 unsigned int relation);
531int __cpufreq_driver_target(struct cpufreq_policy *policy,
532 unsigned int target_freq,
533 unsigned int relation);
534unsigned int cpufreq_driver_resolve_freq(struct cpufreq_policy *policy,
535 unsigned int target_freq);
536unsigned int cpufreq_policy_transition_delay_us(struct cpufreq_policy *policy);
537int cpufreq_register_governor(struct cpufreq_governor *governor);
538void cpufreq_unregister_governor(struct cpufreq_governor *governor);
539
540struct cpufreq_governor *cpufreq_default_governor(void);
541struct cpufreq_governor *cpufreq_fallback_governor(void);
542
543static inline void cpufreq_policy_apply_limits(struct cpufreq_policy *policy)
544{
545 if (policy->max < policy->cur)
546 __cpufreq_driver_target(policy, policy->max, CPUFREQ_RELATION_H);
547 else if (policy->min > policy->cur)
548 __cpufreq_driver_target(policy, policy->min, CPUFREQ_RELATION_L);
549}
550
551
552struct gov_attr_set {
553 struct kobject kobj;
554 struct list_head policy_list;
555 struct mutex update_lock;
556 int usage_count;
557};
558
559
560extern const struct sysfs_ops governor_sysfs_ops;
561
562void gov_attr_set_init(struct gov_attr_set *attr_set, struct list_head *list_node);
563void gov_attr_set_get(struct gov_attr_set *attr_set, struct list_head *list_node);
564unsigned int gov_attr_set_put(struct gov_attr_set *attr_set, struct list_head *list_node);
565
566
567struct governor_attr {
568 struct attribute attr;
569 ssize_t (*show)(struct gov_attr_set *attr_set, char *buf);
570 ssize_t (*store)(struct gov_attr_set *attr_set, const char *buf,
571 size_t count);
572};
573
574static inline bool cpufreq_can_do_remote_dvfs(struct cpufreq_policy *policy)
575{
576
577
578
579
580
581 return policy->dvfs_possible_from_any_cpu ||
582 cpumask_test_cpu(smp_processor_id(), policy->cpus);
583}
584
585
586
587
588
589
590#define CPUFREQ_ENTRY_INVALID ~0u
591#define CPUFREQ_TABLE_END ~1u
592
593#define CPUFREQ_BOOST_FREQ (1 << 0)
594
595struct cpufreq_frequency_table {
596 unsigned int flags;
597 unsigned int driver_data;
598 unsigned int frequency;
599
600};
601
602#if defined(CONFIG_CPU_FREQ) && defined(CONFIG_PM_OPP)
603int dev_pm_opp_init_cpufreq_table(struct device *dev,
604 struct cpufreq_frequency_table **table);
605void dev_pm_opp_free_cpufreq_table(struct device *dev,
606 struct cpufreq_frequency_table **table);
607#else
608static inline int dev_pm_opp_init_cpufreq_table(struct device *dev,
609 struct cpufreq_frequency_table
610 **table)
611{
612 return -EINVAL;
613}
614
615static inline void dev_pm_opp_free_cpufreq_table(struct device *dev,
616 struct cpufreq_frequency_table
617 **table)
618{
619}
620#endif
621
622
623
624
625
626
627
628#define cpufreq_for_each_entry(pos, table) \
629 for (pos = table; pos->frequency != CPUFREQ_TABLE_END; pos++)
630
631
632
633
634
635
636
637
638#define cpufreq_for_each_valid_entry(pos, table) \
639 for (pos = table; pos->frequency != CPUFREQ_TABLE_END; pos++) \
640 if (pos->frequency == CPUFREQ_ENTRY_INVALID) \
641 continue; \
642 else
643
644int cpufreq_frequency_table_cpuinfo(struct cpufreq_policy *policy,
645 struct cpufreq_frequency_table *table);
646
647int cpufreq_frequency_table_verify(struct cpufreq_policy *policy,
648 struct cpufreq_frequency_table *table);
649int cpufreq_generic_frequency_table_verify(struct cpufreq_policy *policy);
650
651int cpufreq_table_index_unsorted(struct cpufreq_policy *policy,
652 unsigned int target_freq,
653 unsigned int relation);
654int cpufreq_frequency_table_get_index(struct cpufreq_policy *policy,
655 unsigned int freq);
656
657ssize_t cpufreq_show_cpus(const struct cpumask *mask, char *buf);
658
659#ifdef CONFIG_CPU_FREQ
660int cpufreq_boost_trigger_state(int state);
661int cpufreq_boost_enabled(void);
662int cpufreq_enable_boost_support(void);
663bool policy_has_boost_freq(struct cpufreq_policy *policy);
664
665
666static inline int cpufreq_table_find_index_al(struct cpufreq_policy *policy,
667 unsigned int target_freq)
668{
669 struct cpufreq_frequency_table *table = policy->freq_table;
670 struct cpufreq_frequency_table *pos, *best = table - 1;
671 unsigned int freq;
672
673 cpufreq_for_each_valid_entry(pos, table) {
674 freq = pos->frequency;
675
676 if (freq >= target_freq)
677 return pos - table;
678
679 best = pos;
680 }
681
682 return best - table;
683}
684
685
686static inline int cpufreq_table_find_index_dl(struct cpufreq_policy *policy,
687 unsigned int target_freq)
688{
689 struct cpufreq_frequency_table *table = policy->freq_table;
690 struct cpufreq_frequency_table *pos, *best = table - 1;
691 unsigned int freq;
692
693 cpufreq_for_each_valid_entry(pos, table) {
694 freq = pos->frequency;
695
696 if (freq == target_freq)
697 return pos - table;
698
699 if (freq > target_freq) {
700 best = pos;
701 continue;
702 }
703
704
705 if (best == table - 1)
706 return pos - table;
707
708 return best - table;
709 }
710
711 return best - table;
712}
713
714
715static inline int cpufreq_table_find_index_l(struct cpufreq_policy *policy,
716 unsigned int target_freq)
717{
718 target_freq = clamp_val(target_freq, policy->min, policy->max);
719
720 if (policy->freq_table_sorted == CPUFREQ_TABLE_SORTED_ASCENDING)
721 return cpufreq_table_find_index_al(policy, target_freq);
722 else
723 return cpufreq_table_find_index_dl(policy, target_freq);
724}
725
726
727static inline int cpufreq_table_find_index_ah(struct cpufreq_policy *policy,
728 unsigned int target_freq)
729{
730 struct cpufreq_frequency_table *table = policy->freq_table;
731 struct cpufreq_frequency_table *pos, *best = table - 1;
732 unsigned int freq;
733
734 cpufreq_for_each_valid_entry(pos, table) {
735 freq = pos->frequency;
736
737 if (freq == target_freq)
738 return pos - table;
739
740 if (freq < target_freq) {
741 best = pos;
742 continue;
743 }
744
745
746 if (best == table - 1)
747 return pos - table;
748
749 return best - table;
750 }
751
752 return best - table;
753}
754
755
756static inline int cpufreq_table_find_index_dh(struct cpufreq_policy *policy,
757 unsigned int target_freq)
758{
759 struct cpufreq_frequency_table *table = policy->freq_table;
760 struct cpufreq_frequency_table *pos, *best = table - 1;
761 unsigned int freq;
762
763 cpufreq_for_each_valid_entry(pos, table) {
764 freq = pos->frequency;
765
766 if (freq <= target_freq)
767 return pos - table;
768
769 best = pos;
770 }
771
772 return best - table;
773}
774
775
776static inline int cpufreq_table_find_index_h(struct cpufreq_policy *policy,
777 unsigned int target_freq)
778{
779 target_freq = clamp_val(target_freq, policy->min, policy->max);
780
781 if (policy->freq_table_sorted == CPUFREQ_TABLE_SORTED_ASCENDING)
782 return cpufreq_table_find_index_ah(policy, target_freq);
783 else
784 return cpufreq_table_find_index_dh(policy, target_freq);
785}
786
787
788static inline int cpufreq_table_find_index_ac(struct cpufreq_policy *policy,
789 unsigned int target_freq)
790{
791 struct cpufreq_frequency_table *table = policy->freq_table;
792 struct cpufreq_frequency_table *pos, *best = table - 1;
793 unsigned int freq;
794
795 cpufreq_for_each_valid_entry(pos, table) {
796 freq = pos->frequency;
797
798 if (freq == target_freq)
799 return pos - table;
800
801 if (freq < target_freq) {
802 best = pos;
803 continue;
804 }
805
806
807 if (best == table - 1)
808 return pos - table;
809
810
811 if (target_freq - best->frequency > freq - target_freq)
812 return pos - table;
813
814 return best - table;
815 }
816
817 return best - table;
818}
819
820
821static inline int cpufreq_table_find_index_dc(struct cpufreq_policy *policy,
822 unsigned int target_freq)
823{
824 struct cpufreq_frequency_table *table = policy->freq_table;
825 struct cpufreq_frequency_table *pos, *best = table - 1;
826 unsigned int freq;
827
828 cpufreq_for_each_valid_entry(pos, table) {
829 freq = pos->frequency;
830
831 if (freq == target_freq)
832 return pos - table;
833
834 if (freq > target_freq) {
835 best = pos;
836 continue;
837 }
838
839
840 if (best == table - 1)
841 return pos - table;
842
843
844 if (best->frequency - target_freq > target_freq - freq)
845 return pos - table;
846
847 return best - table;
848 }
849
850 return best - table;
851}
852
853
854static inline int cpufreq_table_find_index_c(struct cpufreq_policy *policy,
855 unsigned int target_freq)
856{
857 target_freq = clamp_val(target_freq, policy->min, policy->max);
858
859 if (policy->freq_table_sorted == CPUFREQ_TABLE_SORTED_ASCENDING)
860 return cpufreq_table_find_index_ac(policy, target_freq);
861 else
862 return cpufreq_table_find_index_dc(policy, target_freq);
863}
864
865static inline int cpufreq_frequency_table_target(struct cpufreq_policy *policy,
866 unsigned int target_freq,
867 unsigned int relation)
868{
869 if (unlikely(policy->freq_table_sorted == CPUFREQ_TABLE_UNSORTED))
870 return cpufreq_table_index_unsorted(policy, target_freq,
871 relation);
872
873 switch (relation) {
874 case CPUFREQ_RELATION_L:
875 return cpufreq_table_find_index_l(policy, target_freq);
876 case CPUFREQ_RELATION_H:
877 return cpufreq_table_find_index_h(policy, target_freq);
878 case CPUFREQ_RELATION_C:
879 return cpufreq_table_find_index_c(policy, target_freq);
880 default:
881 pr_err("%s: Invalid relation: %d\n", __func__, relation);
882 return -EINVAL;
883 }
884}
885
886static inline int cpufreq_table_count_valid_entries(const struct cpufreq_policy *policy)
887{
888 struct cpufreq_frequency_table *pos;
889 int count = 0;
890
891 if (unlikely(!policy->freq_table))
892 return 0;
893
894 cpufreq_for_each_valid_entry(pos, policy->freq_table)
895 count++;
896
897 return count;
898}
899#else
900static inline int cpufreq_boost_trigger_state(int state)
901{
902 return 0;
903}
904static inline int cpufreq_boost_enabled(void)
905{
906 return 0;
907}
908
909static inline int cpufreq_enable_boost_support(void)
910{
911 return -EINVAL;
912}
913
914static inline bool policy_has_boost_freq(struct cpufreq_policy *policy)
915{
916 return false;
917}
918#endif
919
920extern unsigned int arch_freq_get_on_cpu(int cpu);
921
922
923extern struct freq_attr cpufreq_freq_attr_scaling_available_freqs;
924extern struct freq_attr cpufreq_freq_attr_scaling_boost_freqs;
925extern struct freq_attr *cpufreq_generic_attr[];
926int cpufreq_table_validate_and_show(struct cpufreq_policy *policy,
927 struct cpufreq_frequency_table *table);
928
929unsigned int cpufreq_generic_get(unsigned int cpu);
930int cpufreq_generic_init(struct cpufreq_policy *policy,
931 struct cpufreq_frequency_table *table,
932 unsigned int transition_latency);
933#endif
934