LCOV - code coverage report
Current view: top level - include/linux - cpufreq.h (source / functions) Hit Total Coverage
Test: landlock.info Lines: 0 3 0.0 %
Date: 2021-04-22 12:43:58 Functions: 0 0 -

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

Generated by: LCOV version 1.14