dit this file 'description' to name the repository.
summaryrefslogblamecommitdiffstats
path: root/include/linux/cpufreq.h
blob: fcabc42d66ab413a38730cb78d8eedc9bda91084 (plain) (tree)
1
2
3
4
5
6
  
                                
  

                                                               
  






                                                                       

                             
                          
                           
                        
 
                                                                      
                                                                      
                                                                       


                                    
                                                                  


                                 




                                                                           

                        





                                                                         
 


                                         


                                                   




                                                    
                                                       



                                                          



                                                                         
                                                                              
                                                                     


                                                                                





                                                                         
                                                       
                                                          
                                               
                                                                                
 




                                                                               
                                            



                                                
                   



                                                                                
 
                                                         
                                                    
 




                                                                  





                                                                       
 




                                                     
 






                                                                        
 










                                                                  
      

                                                                      
                                                                      

                                                                       

                                                                        
 



                                                                              

  


                                                 
 


                                                 
 


















                                                                
 

                       

                                                       






                                                                                














                                                                
                                                               
 
                                                                
                                                                




                                                                
                                                                           
                                                                       
                                                                          

                                                                         

                                                                             
 

                                                                  
 
                                             
 

                                                                              













                                          


                                                                       
 

                                           
 




                                           
 





                                           
 


                                                                              
 

                                                                 
 


                                                                      


                 

                                                                        


                 













                                                                               
 








                                                  
      
 
 
                                                                      
                                                                      

                                                                       
  









































                                                                            


                                                                            
                                      
                                                       
      

                                                                  


                                                                

                                                     






                                                                   

      







                                                                       
                                                                                 















                                                                           



                                                                              
                                                                              


                                                                  
                                                                            
                                                        
                                                        
 
                             
/*
 * linux/include/linux/cpufreq.h
 *
 * Copyright (C) 2001 Russell King
 *           (C) 2002 - 2003 Dominik Brodowski <linux@brodo.de>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */
#ifndef _LINUX_CPUFREQ_H
#define _LINUX_CPUFREQ_H

#include <linux/cpumask.h>
#include <linux/completion.h>
#include <linux/kobject.h>
#include <linux/notifier.h>
#include <linux/sysfs.h>

/*********************************************************************
 *                        CPUFREQ INTERFACE                          *
 *********************************************************************/
/*
 * Frequency values here are CPU kHz
 *
 * Maximum transition latency is in nanoseconds - if it's unknown,
 * CPUFREQ_ETERNAL shall be used.
 */

#define CPUFREQ_ETERNAL			(-1)
#define CPUFREQ_NAME_LEN		16
/* Print length for names. Extra 1 space for accomodating '\n' in prints */
#define CPUFREQ_NAME_PLEN		(CPUFREQ_NAME_LEN + 1)

struct cpufreq_governor;

struct cpufreq_freqs {
	unsigned int cpu;	/* cpu nr */
	unsigned int old;
	unsigned int new;
	u8 flags;		/* flags of cpufreq_driver, see below. */
};

struct cpufreq_cpuinfo {
	unsigned int		max_freq;
	unsigned int		min_freq;

	/* in 10^(-9) s = nanoseconds */
	unsigned int		transition_latency;
};

struct cpufreq_real_policy {
	unsigned int		min;    /* in kHz */
	unsigned int		max;    /* in kHz */
	unsigned int		policy; /* see above */
	struct cpufreq_governor	*governor; /* see below */
};

struct cpufreq_policy {
	/* CPUs sharing clock, require sw coordination */
	cpumask_var_t		cpus;	/* Online CPUs only */
	cpumask_var_t		related_cpus; /* Online + Offline CPUs */

	unsigned int		shared_type; /* ACPI: ANY or ALL affected CPUs
						should set cpufreq */
	unsigned int		cpu;    /* cpu nr of CPU managing this policy */
	unsigned int		last_cpu; /* cpu nr of previous CPU that managed
					   * this policy */
	struct cpufreq_cpuinfo	cpuinfo;/* see above */

	unsigned int		min;    /* in kHz */
	unsigned int		max;    /* in kHz */
	unsigned int		cur;    /* in kHz, only needed if cpufreq
					 * governors are used */
	unsigned int		policy; /* see above */
	struct cpufreq_governor	*governor; /* see below */
	void			*governor_data;
	bool			governor_enabled; /* governor start/stop flag */

	struct work_struct	update; /* if update_policy() needs to be
					 * called, but you're in IRQ context */

	struct cpufreq_real_policy	user_policy;

	struct list_head        policy_list;
	struct kobject		kobj;
	struct completion	kobj_unregister;
};

/* Only for ACPI */
#define CPUFREQ_SHARED_TYPE_NONE (0) /* None */
#define CPUFREQ_SHARED_TYPE_HW	 (1) /* HW does needed coordination */
#define CPUFREQ_SHARED_TYPE_ALL	 (2) /* All dependent CPUs should set freq */
#define CPUFREQ_SHARED_TYPE_ANY	 (3) /* Freq can be set from any dependent CPU*/

struct cpufreq_policy *cpufreq_cpu_get(unsigned int cpu);
void cpufreq_cpu_put(struct cpufreq_policy *policy);

static inline bool policy_is_shared(struct cpufreq_policy *policy)
{
	return cpumask_weight(policy->cpus) > 1;
}

/* /sys/devices/system/cpu/cpufreq: entry point for global variables */
extern struct kobject *cpufreq_global_kobject;
int cpufreq_get_global_kobject(void);
void cpufreq_put_global_kobject(void);