diff options
author | Jean Pihet <j-pihet@ti.com> | 2011-08-25 09:35:41 -0400 |
---|---|---|
committer | Rafael J. Wysocki <rjw@sisk.pl> | 2011-08-25 09:35:41 -0400 |
commit | 91ff4cb803df6de9114351b9f2f0f39f397ee03e (patch) | |
tree | eb24c7df28d0f93557ac1d9e7d72a79fc3556b97 /include/linux/pm.h | |
parent | abe98ec2d86279fe821c9051003a0abc43444f15 (diff) |
PM QoS: Implement per-device PM QoS constraints
Implement the per-device PM QoS constraints by creating a device
PM QoS API, which calls the PM QoS constraints management core code.
The per-device latency constraints data strctures are stored
in the device dev_pm_info struct.
The device PM code calls the init and destroy of the per-device constraints
data struct in order to support the dynamic insertion and removal of the
devices in the system.
To minimize the data usage by the per-device constraints, the data struct
is only allocated at the first call to dev_pm_qos_add_request.
The data is later free'd when the device is removed from the system.
A global mutex protects the constraints users from the data being
allocated and free'd.
Signed-off-by: Jean Pihet <j-pihet@ti.com>
Reviewed-by: Kevin Hilman <khilman@ti.com>
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Diffstat (limited to 'include/linux/pm.h')
-rw-r--r-- | include/linux/pm.h | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/include/linux/pm.h b/include/linux/pm.h index ed10f24d5259..d78187e9ca99 100644 --- a/include/linux/pm.h +++ b/include/linux/pm.h | |||
@@ -419,6 +419,13 @@ enum rpm_request { | |||
419 | RPM_REQ_RESUME, | 419 | RPM_REQ_RESUME, |
420 | }; | 420 | }; |
421 | 421 | ||
422 | /* Per-device PM QoS constraints data struct state */ | ||
423 | enum dev_pm_qos_state { | ||
424 | DEV_PM_QOS_NO_DEVICE, /* No device present */ | ||
425 | DEV_PM_QOS_DEVICE_PRESENT, /* Device present, data not allocated */ | ||
426 | DEV_PM_QOS_ALLOCATED, /* Device present, data allocated */ | ||
427 | }; | ||
428 | |||
422 | struct wakeup_source; | 429 | struct wakeup_source; |
423 | 430 | ||
424 | struct pm_domain_data { | 431 | struct pm_domain_data { |
@@ -480,6 +487,8 @@ struct dev_pm_info { | |||
480 | unsigned long accounting_timestamp; | 487 | unsigned long accounting_timestamp; |
481 | #endif | 488 | #endif |
482 | struct pm_subsys_data *subsys_data; /* Owned by the subsystem. */ | 489 | struct pm_subsys_data *subsys_data; /* Owned by the subsystem. */ |
490 | struct pm_qos_constraints *constraints; | ||
491 | enum dev_pm_qos_state constraints_state; | ||
483 | }; | 492 | }; |
484 | 493 | ||
485 | extern void update_pm_runtime_accounting(struct device *dev); | 494 | extern void update_pm_runtime_accounting(struct device *dev); |