diff options
Diffstat (limited to 'include/linux/pm_qos.h')
| -rw-r--r-- | include/linux/pm_qos.h | 86 | 
1 files changed, 50 insertions, 36 deletions
diff --git a/include/linux/pm_qos.h b/include/linux/pm_qos.h index ebf5ef17cc2a..19eafca5680e 100644 --- a/include/linux/pm_qos.h +++ b/include/linux/pm_qos.h @@ -34,6 +34,8 @@ enum pm_qos_flags_status {  #define PM_QOS_RESUME_LATENCY_NO_CONSTRAINT	PM_QOS_LATENCY_ANY  #define PM_QOS_RESUME_LATENCY_NO_CONSTRAINT_NS	PM_QOS_LATENCY_ANY_NS  #define PM_QOS_LATENCY_TOLERANCE_DEFAULT_VALUE	0 +#define PM_QOS_MIN_FREQUENCY_DEFAULT_VALUE	0 +#define PM_QOS_MAX_FREQUENCY_DEFAULT_VALUE	FREQ_QOS_MAX_DEFAULT_VALUE  #define PM_QOS_LATENCY_TOLERANCE_NO_CONSTRAINT	(-1)  #define PM_QOS_FLAG_NO_POWER_OFF	(1 << 0) @@ -49,21 +51,6 @@ struct pm_qos_flags_request {  	s32 flags;	/* Do not change to 64 bit */  }; -enum dev_pm_qos_req_type { -	DEV_PM_QOS_RESUME_LATENCY = 1, -	DEV_PM_QOS_LATENCY_TOLERANCE, -	DEV_PM_QOS_FLAGS, -}; - -struct dev_pm_qos_request { -	enum dev_pm_qos_req_type type; -	union { -		struct plist_node pnode; -		struct pm_qos_flags_request flr; -	} data; -	struct device *dev; -}; -  enum pm_qos_type {  	PM_QOS_UNITIALIZED,  	PM_QOS_MAX,		/* return the largest value */ @@ -90,9 +77,51 @@ struct pm_qos_flags {  	s32 effective_flags;	/* Do not change to 64 bit */  }; + +#define FREQ_QOS_MIN_DEFAULT_VALUE	0 +#define FREQ_QOS_MAX_DEFAULT_VALUE	S32_MAX + +enum freq_qos_req_type { +	FREQ_QOS_MIN = 1, +	FREQ_QOS_MAX, +}; + +struct freq_constraints { +	struct pm_qos_constraints min_freq; +	struct blocking_notifier_head min_freq_notifiers; +	struct pm_qos_constraints max_freq; +	struct blocking_notifier_head max_freq_notifiers; +}; + +struct freq_qos_request { +	enum freq_qos_req_type type; +	struct plist_node pnode; +	struct freq_constraints *qos; +}; + + +enum dev_pm_qos_req_type { +	DEV_PM_QOS_RESUME_LATENCY = 1, +	DEV_PM_QOS_LATENCY_TOLERANCE, +	DEV_PM_QOS_MIN_FREQUENCY, +	DEV_PM_QOS_MAX_FREQUENCY, +	DEV_PM_QOS_FLAGS, +}; + +struct dev_pm_qos_request { +	enum dev_pm_qos_req_type type; +	union { +		struct plist_node pnode; +		struct pm_qos_flags_request flr; +		struct freq_qos_request freq; +	} data; +	struct device *dev; +}; +  struct dev_pm_qos {  	struct pm_qos_constraints resume_latency;  	struct pm_qos_constraints latency_tolerance; +	struct freq_constraints freq;  	struct pm_qos_flags flags;  	struct dev_pm_qos_request *resume_latency_req;  	struct dev_pm_qos_request *latency_tolerance_req; @@ -191,6 +220,10 @@ static inline s32 dev_pm_qos_read_value(struct device *dev,  	switch (type) {  	case DEV_PM_QOS_RESUME_LATENCY:  		return PM_QOS_RESUME_LATENCY_NO_CONSTRAINT; +	case DEV_PM_QOS_MIN_FREQUENCY: +		return PM_QOS_MIN_FREQUENCY_DEFAULT_VALUE; +	case DEV_PM_QOS_MAX_FREQUENCY: +		return PM_QOS_MAX_FREQUENCY_DEFAULT_VALUE;  	default:  		WARN_ON(1);  		return 0; @@ -255,27 +288,6 @@ static inline s32 dev_pm_qos_raw_resume_latency(struct device *dev)  }  #endif -#define FREQ_QOS_MIN_DEFAULT_VALUE	0 -#define FREQ_QOS_MAX_DEFAULT_VALUE	(-1) - -enum freq_qos_req_type { -	FREQ_QOS_MIN = 1, -	FREQ_QOS_MAX, -}; - -struct freq_constraints { -	struct pm_qos_constraints min_freq; -	struct blocking_notifier_head min_freq_notifiers; -	struct pm_qos_constraints max_freq; -	struct blocking_notifier_head max_freq_notifiers; -}; - -struct freq_qos_request { -	enum freq_qos_req_type type; -	struct plist_node pnode; -	struct freq_constraints *qos; -}; -  static inline int freq_qos_request_active(struct freq_qos_request *req)  {  	return !IS_ERR_OR_NULL(req->qos); @@ -291,6 +303,8 @@ int freq_qos_add_request(struct freq_constraints *qos,  			 enum freq_qos_req_type type, s32 value);  int freq_qos_update_request(struct freq_qos_request *req, s32 new_value);  int freq_qos_remove_request(struct freq_qos_request *req); +int freq_qos_apply(struct freq_qos_request *req, +		   enum pm_qos_req_action action, s32 value);  int freq_qos_add_notifier(struct freq_constraints *qos,  			  enum freq_qos_req_type type,  |