diff options
Diffstat (limited to 'Documentation/power/pm_qos_interface.txt')
-rw-r--r-- | Documentation/power/pm_qos_interface.txt | 92 |
1 files changed, 5 insertions, 87 deletions
diff --git a/Documentation/power/pm_qos_interface.txt b/Documentation/power/pm_qos_interface.txt index 79a2a58425e..bfed898a03f 100644 --- a/Documentation/power/pm_qos_interface.txt +++ b/Documentation/power/pm_qos_interface.txt | |||
@@ -4,19 +4,14 @@ This interface provides a kernel and user mode interface for registering | |||
4 | performance expectations by drivers, subsystems and user space applications on | 4 | performance expectations by drivers, subsystems and user space applications on |
5 | one of the parameters. | 5 | one of the parameters. |
6 | 6 | ||
7 | Two different PM QoS frameworks are available: | 7 | Currently we have {cpu_dma_latency, network_latency, network_throughput} as the |
8 | 1. PM QoS classes for cpu_dma_latency, network_latency, network_throughput. | 8 | initial set of pm_qos parameters. |
9 | 2. the per-device PM QoS framework provides the API to manage the per-device latency | ||
10 | constraints. | ||
11 | 9 | ||
12 | Each parameters have defined units: | 10 | Each parameters have defined units: |
13 | * latency: usec | 11 | * latency: usec |
14 | * timeout: usec | 12 | * timeout: usec |
15 | * throughput: kbs (kilo bit / sec) | 13 | * throughput: kbs (kilo bit / sec) |
16 | 14 | ||
17 | |||
18 | 1. PM QoS framework | ||
19 | |||
20 | The infrastructure exposes multiple misc device nodes one per implemented | 15 | The infrastructure exposes multiple misc device nodes one per implemented |
21 | parameter. The set of parameters implement is defined by pm_qos_power_init() | 16 | parameter. The set of parameters implement is defined by pm_qos_power_init() |
22 | and pm_qos_params.h. This is done because having the available parameters | 17 | and pm_qos_params.h. This is done because having the available parameters |
@@ -28,18 +23,14 @@ an aggregated target value. The aggregated target value is updated with | |||
28 | changes to the request list or elements of the list. Typically the | 23 | changes to the request list or elements of the list. Typically the |
29 | aggregated target value is simply the max or min of the request values held | 24 | aggregated target value is simply the max or min of the request values held |
30 | in the parameter list elements. | 25 | in the parameter list elements. |
31 | Note: the aggregated target value is implemented as an atomic variable so that | ||
32 | reading the aggregated value does not require any locking mechanism. | ||
33 | |||
34 | 26 | ||
35 | From kernel mode the use of this interface is simple: | 27 | From kernel mode the use of this interface is simple: |
36 | 28 | ||
37 | void pm_qos_add_request(handle, param_class, target_value): | 29 | handle = pm_qos_add_request(param_class, target_value): |
38 | Will insert an element into the list for that identified PM QoS class with the | 30 | Will insert an element into the list for that identified PM_QOS class with the |
39 | target value. Upon change to this list the new target is recomputed and any | 31 | target value. Upon change to this list the new target is recomputed and any |
40 | registered notifiers are called only if the target value is now different. | 32 | registered notifiers are called only if the target value is now different. |
41 | Clients of pm_qos need to save the returned handle for future use in other | 33 | Clients of pm_qos need to save the returned handle. |
42 | pm_qos API functions. | ||
43 | 34 | ||
44 | void pm_qos_update_request(handle, new_target_value): | 35 | void pm_qos_update_request(handle, new_target_value): |
45 | Will update the list element pointed to by the handle with the new target value | 36 | Will update the list element pointed to by the handle with the new target value |
@@ -51,20 +42,6 @@ Will remove the element. After removal it will update the aggregate target and | |||
51 | call the notification tree if the target was changed as a result of removing | 42 | call the notification tree if the target was changed as a result of removing |
52 | the request. | 43 | the request. |
53 | 44 | ||
54 | int pm_qos_request(param_class): | ||
55 | Returns the aggregated value for a given PM QoS class. | ||
56 | |||
57 | int pm_qos_request_active(handle): | ||
58 | Returns if the request is still active, i.e. it has not been removed from a | ||
59 | PM QoS class constraints list. | ||
60 | |||
61 | int pm_qos_add_notifier(param_class, notifier): | ||
62 | Adds a notification callback function to the PM QoS class. The callback is | ||
63 | called when the aggregated value for the PM QoS class is changed. | ||
64 | |||
65 | int pm_qos_remove_notifier(int param_class, notifier): | ||
66 | Removes the notification callback function for the PM QoS class. | ||
67 | |||
68 | 45 | ||
69 | From user mode: | 46 | From user mode: |
70 | Only processes can register a pm_qos request. To provide for automatic | 47 | Only processes can register a pm_qos request. To provide for automatic |
@@ -86,63 +63,4 @@ To remove the user mode request for a target value simply close the device | |||
86 | node. | 63 | node. |
87 | 64 | ||
88 | 65 | ||
89 | 2. PM QoS per-device latency framework | ||
90 | |||
91 | For each device a list of performance requests is maintained along with | ||
92 | an aggregated target value. The aggregated target value is updated with | ||
93 | changes to the request list or elements of the list. Typically the | ||
94 | aggregated target value is simply the max or min of the request values held | ||
95 | in the parameter list elements. | ||
96 | Note: the aggregated target value is implemented as an atomic variable so that | ||
97 | reading the aggregated value does not require any locking mechanism. | ||
98 | |||
99 | |||
100 | From kernel mode the use of this interface is the following: | ||
101 | |||
102 | int dev_pm_qos_add_request(device, handle, type, value): | ||
103 | Will insert an element into the list for that identified device with the | ||
104 | target value. Upon change to this list the new target is recomputed and any | ||
105 | registered notifiers are called only if the target value is now different. | ||
106 | Clients of dev_pm_qos need to save the handle for future use in other | ||
107 | dev_pm_qos API functions. | ||
108 | |||
109 | int dev_pm_qos_update_request(handle, new_value): | ||
110 | Will update the list element pointed to by the handle with the new target value | ||
111 | and recompute the new aggregated target, calling the notification trees if the | ||
112 | target is changed. | ||
113 | |||
114 | int dev_pm_qos_remove_request(handle): | ||
115 | Will remove the element. After removal it will update the aggregate target and | ||
116 | call the notification trees if the target was changed as a result of removing | ||
117 | the request. | ||
118 | |||
119 | s32 dev_pm_qos_read_value(device): | ||
120 | Returns the aggregated value for a given device's constraints list. | ||
121 | |||
122 | |||
123 | Notification mechanisms: | ||
124 | The per-device PM QoS framework has 2 different and distinct notification trees: | ||
125 | a per-device notification tree and a global notification tree. | ||
126 | |||
127 | int dev_pm_qos_add_notifier(device, notifier): | ||
128 | Adds a notification callback function for the device. | ||
129 | The callback is called when the aggregated value of the device constraints list | ||
130 | is changed. | ||
131 | |||
132 | int dev_pm_qos_remove_notifier(device, notifier): | ||
133 | Removes the notification callback function for the device. | ||
134 | |||
135 | int dev_pm_qos_add_global_notifier(notifier): | ||
136 | Adds a notification callback function in the global notification tree of the | ||
137 | framework. | ||
138 | The callback is called when the aggregated value for any device is changed. | ||
139 | |||
140 | int dev_pm_qos_remove_global_notifier(notifier): | ||
141 | Removes the notification callback function from the global notification tree | ||
142 | of the framework. | ||
143 | |||
144 | |||
145 | From user mode: | ||
146 | No API for user space access to the per-device latency constraints is provided | ||
147 | yet - still under discussion. | ||
148 | 66 | ||