|
@@ -7,7 +7,7 @@ one of the parameters.
|
|
|
Two different PM QoS frameworks are available:
|
|
|
1. PM QoS classes for cpu_dma_latency, network_latency, network_throughput.
|
|
|
2. the per-device PM QoS framework provides the API to manage the per-device latency
|
|
|
-constraints.
|
|
|
+constraints and PM QoS flags.
|
|
|
|
|
|
Each parameters have defined units:
|
|
|
* latency: usec
|
|
@@ -86,13 +86,17 @@ To remove the user mode request for a target value simply close the device
|
|
|
node.
|
|
|
|
|
|
|
|
|
-2. PM QoS per-device latency framework
|
|
|
+2. PM QoS per-device latency and flags framework
|
|
|
+
|
|
|
+For each device, there are two lists of PM QoS requests. One is maintained
|
|
|
+along with the aggregated target of latency value and the other is for PM QoS
|
|
|
+flags. Values are updated in response to changes of the request list.
|
|
|
+
|
|
|
+Target latency value is simply the minimum of the request values held in the
|
|
|
+parameter list elements. The PM QoS flags aggregate value is a gather (bitwise
|
|
|
+OR) of all list elements' values. Two device PM QoS flags are defined currently:
|
|
|
+PM_QOS_FLAG_NO_POWER_OFF and PM_QOS_FLAG_REMOTE_WAKEUP.
|
|
|
|
|
|
-For each device a list of performance requests is maintained along with
|
|
|
-an aggregated target value. The aggregated target value is updated with
|
|
|
-changes to the request list or elements of the list. Typically the
|
|
|
-aggregated target value is simply the max or min of the request values held
|
|
|
-in the parameter list elements.
|
|
|
Note: the aggregated target value is implemented as an atomic variable so that
|
|
|
reading the aggregated value does not require any locking mechanism.
|
|
|
|
|
@@ -119,6 +123,38 @@ the request.
|
|
|
s32 dev_pm_qos_read_value(device):
|
|
|
Returns the aggregated value for a given device's constraints list.
|
|
|
|
|
|
+enum pm_qos_flags_status dev_pm_qos_flags(device, mask)
|
|
|
+Check PM QoS flags of the given device against the given mask of flags.
|
|
|
+The meaning of the return values is as follows:
|
|
|
+ PM_QOS_FLAGS_ALL: All flags from the mask are set
|
|
|
+ PM_QOS_FLAGS_SOME: Some flags from the mask are set
|
|
|
+ PM_QOS_FLAGS_NONE: No flags from the mask are set
|
|
|
+ PM_QOS_FLAGS_UNDEFINED: The device's PM QoS structure has not been
|
|
|
+ initialized or the list of requests is empty.
|
|
|
+
|
|
|
+int dev_pm_qos_add_ancestor_request(dev, handle, value)
|
|
|
+Add a PM QoS request for the first direct ancestor of the given device whose
|
|
|
+power.ignore_children flag is unset.
|
|
|
+
|
|
|
+int dev_pm_qos_expose_latency_limit(device, value)
|
|
|
+Add a request to the device's PM QoS list of latency constraints and create
|
|
|
+a sysfs attribute pm_qos_resume_latency_us under the device's power directory
|
|
|
+allowing user space to manipulate that request.
|
|
|
+
|
|
|
+void dev_pm_qos_hide_latency_limit(device)
|
|
|
+Drop the request added by dev_pm_qos_expose_latency_limit() from the device's
|
|
|
+PM QoS list of latency constraints and remove sysfs attribute pm_qos_resume_latency_us
|
|
|
+from the device's power directory.
|
|
|
+
|
|
|
+int dev_pm_qos_expose_flags(device, value)
|
|
|
+Add a request to the device's PM QoS list of flags and create sysfs attributes
|
|
|
+pm_qos_no_power_off and pm_qos_remote_wakeup under the device's power directory
|
|
|
+allowing user space to change these flags' value.
|
|
|
+
|
|
|
+void dev_pm_qos_hide_flags(device)
|
|
|
+Drop the request added by dev_pm_qos_expose_flags() from the device's PM QoS list
|
|
|
+of flags and remove sysfs attributes pm_qos_no_power_off and pm_qos_remote_wakeup
|
|
|
+under the device's power directory.
|
|
|
|
|
|
Notification mechanisms:
|
|
|
The per-device PM QoS framework has 2 different and distinct notification trees:
|