diff options
| author | Dave Airlie <airlied@redhat.com> | 2019-11-14 05:53:10 +1000 | 
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2019-11-14 05:53:10 +1000 | 
| commit | 77e0723bd27f830d0903225372aa778fe2975648 (patch) | |
| tree | 4c035783e014b3a0ac9174390f88dc75150533e4 /include/linux/pm_qos.h | |
| parent | 3ca3a9eab7085b3c938b5d088c3020269cfecdc8 (diff) | |
| parent | 31f4f5b495a62c9a8b15b1c3581acd5efeb9af8c (diff) | |
Merge v5.4-rc7 into drm-next
We have the i915 security fixes to backmerge, but first
let's clear the decks for other drivers to avoid a bigger
mess.
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'include/linux/pm_qos.h')
| -rw-r--r-- | include/linux/pm_qos.h | 56 | 
1 files changed, 44 insertions, 12 deletions
diff --git a/include/linux/pm_qos.h b/include/linux/pm_qos.h index 222c3e01397c..ebf5ef17cc2a 100644 --- a/include/linux/pm_qos.h +++ b/include/linux/pm_qos.h @@ -34,8 +34,6 @@ 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	(-1)  #define PM_QOS_LATENCY_TOLERANCE_NO_CONSTRAINT	(-1)  #define PM_QOS_FLAG_NO_POWER_OFF	(1 << 0) @@ -54,8 +52,6 @@ struct pm_qos_flags_request {  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,  }; @@ -97,14 +93,10 @@ struct pm_qos_flags {  struct dev_pm_qos {  	struct pm_qos_constraints resume_latency;  	struct pm_qos_constraints latency_tolerance; -	struct pm_qos_constraints min_frequency; -	struct pm_qos_constraints max_frequency;  	struct pm_qos_flags flags;  	struct dev_pm_qos_request *resume_latency_req;  	struct dev_pm_qos_request *latency_tolerance_req;  	struct dev_pm_qos_request *flags_req; -	struct dev_pm_qos_request *min_frequency_req; -	struct dev_pm_qos_request *max_frequency_req;  };  /* Action requested to pm_qos_update_target */ @@ -199,10 +191,6 @@ 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; @@ -267,4 +255,48 @@ 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); +} + +void freq_constraints_init(struct freq_constraints *qos); + +s32 freq_qos_read_value(struct freq_constraints *qos, +			enum freq_qos_req_type type); + +int freq_qos_add_request(struct freq_constraints *qos, +			 struct freq_qos_request *req, +			 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_add_notifier(struct freq_constraints *qos, +			  enum freq_qos_req_type type, +			  struct notifier_block *notifier); +int freq_qos_remove_notifier(struct freq_constraints *qos, +			     enum freq_qos_req_type type, +			     struct notifier_block *notifier); +  #endif  | 
