xref: /dpdk/drivers/power/intel_pstate/intel_pstate_cpufreq.h (revision 6f987b594fa6751b49769755fe1d1bf9f9d15ac4)
1*6f987b59SSivaprasad Tummala /* SPDX-License-Identifier: BSD-3-Clause
2*6f987b59SSivaprasad Tummala  * Copyright(c) 2018 Intel Corporation
3*6f987b59SSivaprasad Tummala  */
4*6f987b59SSivaprasad Tummala 
5*6f987b59SSivaprasad Tummala #ifndef INTEL_PSTATE_CPUFREQ_H
6*6f987b59SSivaprasad Tummala #define INTEL_PSTATE_CPUFREQ_H
7*6f987b59SSivaprasad Tummala 
8*6f987b59SSivaprasad Tummala /**
9*6f987b59SSivaprasad Tummala  * @file
10*6f987b59SSivaprasad Tummala  * Power Management via Intel Pstate driver
11*6f987b59SSivaprasad Tummala  */
12*6f987b59SSivaprasad Tummala 
13*6f987b59SSivaprasad Tummala #include "power_cpufreq.h"
14*6f987b59SSivaprasad Tummala 
15*6f987b59SSivaprasad Tummala /**
16*6f987b59SSivaprasad Tummala  * Check if pstate power management is supported.
17*6f987b59SSivaprasad Tummala  *
18*6f987b59SSivaprasad Tummala  * @return
19*6f987b59SSivaprasad Tummala  *   - 1 if supported
20*6f987b59SSivaprasad Tummala  *   - 0 if unsupported
21*6f987b59SSivaprasad Tummala  *   - -1 if error, with rte_errno indicating reason for error.
22*6f987b59SSivaprasad Tummala  */
23*6f987b59SSivaprasad Tummala int power_pstate_cpufreq_check_supported(void);
24*6f987b59SSivaprasad Tummala 
25*6f987b59SSivaprasad Tummala /**
26*6f987b59SSivaprasad Tummala  * Initialize power management for a specific lcore. It will check and set the
27*6f987b59SSivaprasad Tummala  * governor to performance for the lcore, get the available frequencies, and
28*6f987b59SSivaprasad Tummala  * prepare to set new lcore frequency.
29*6f987b59SSivaprasad Tummala  *
30*6f987b59SSivaprasad Tummala  * @param lcore_id
31*6f987b59SSivaprasad Tummala  *  lcore id.
32*6f987b59SSivaprasad Tummala  *
33*6f987b59SSivaprasad Tummala  * @return
34*6f987b59SSivaprasad Tummala  *  - 0 on success.
35*6f987b59SSivaprasad Tummala  *  - Negative on error.
36*6f987b59SSivaprasad Tummala  */
37*6f987b59SSivaprasad Tummala int power_pstate_cpufreq_init(unsigned int lcore_id);
38*6f987b59SSivaprasad Tummala 
39*6f987b59SSivaprasad Tummala /**
40*6f987b59SSivaprasad Tummala  * Exit power management on a specific lcore. It will set the governor to which
41*6f987b59SSivaprasad Tummala  * is before initialized.
42*6f987b59SSivaprasad Tummala  *
43*6f987b59SSivaprasad Tummala  * @param lcore_id
44*6f987b59SSivaprasad Tummala  *  lcore id.
45*6f987b59SSivaprasad Tummala  *
46*6f987b59SSivaprasad Tummala  * @return
47*6f987b59SSivaprasad Tummala  *  - 0 on success.
48*6f987b59SSivaprasad Tummala  *  - Negative on error.
49*6f987b59SSivaprasad Tummala  */
50*6f987b59SSivaprasad Tummala int power_pstate_cpufreq_exit(unsigned int lcore_id);
51*6f987b59SSivaprasad Tummala 
52*6f987b59SSivaprasad Tummala /**
53*6f987b59SSivaprasad Tummala  * Get the available frequencies of a specific lcore. The return value will be
54*6f987b59SSivaprasad Tummala  * the minimal one of the total number of available frequencies and the number
55*6f987b59SSivaprasad Tummala  * of buffer. The index of available frequencies used in other interfaces
56*6f987b59SSivaprasad Tummala  * should be in the range of 0 to this return value.
57*6f987b59SSivaprasad Tummala  * It should be protected outside of this function for threadsafe.
58*6f987b59SSivaprasad Tummala  *
59*6f987b59SSivaprasad Tummala  * @param lcore_id
60*6f987b59SSivaprasad Tummala  *  lcore id.
61*6f987b59SSivaprasad Tummala  * @param freqs
62*6f987b59SSivaprasad Tummala  *  The buffer array to save the frequencies.
63*6f987b59SSivaprasad Tummala  * @param num
64*6f987b59SSivaprasad Tummala  *  The number of frequencies to get.
65*6f987b59SSivaprasad Tummala  *
66*6f987b59SSivaprasad Tummala  * @return
67*6f987b59SSivaprasad Tummala  *  The number of available frequencies.
68*6f987b59SSivaprasad Tummala  */
69*6f987b59SSivaprasad Tummala uint32_t power_pstate_cpufreq_freqs(unsigned int lcore_id, uint32_t *freqs,
70*6f987b59SSivaprasad Tummala 		uint32_t num);
71*6f987b59SSivaprasad Tummala 
72*6f987b59SSivaprasad Tummala /**
73*6f987b59SSivaprasad Tummala  * Return the current index of available frequencies of a specific lcore.
74*6f987b59SSivaprasad Tummala  * It should be protected outside of this function for threadsafe.
75*6f987b59SSivaprasad Tummala  *
76*6f987b59SSivaprasad Tummala  * @param lcore_id
77*6f987b59SSivaprasad Tummala  *  lcore id.
78*6f987b59SSivaprasad Tummala  *
79*6f987b59SSivaprasad Tummala  * @return
80*6f987b59SSivaprasad Tummala  *  The current index of available frequencies.
81*6f987b59SSivaprasad Tummala  *  If error, it will return 'RTE_POWER_INVALID_FREQ_INDEX = (~0)'.
82*6f987b59SSivaprasad Tummala  */
83*6f987b59SSivaprasad Tummala uint32_t power_pstate_cpufreq_get_freq(unsigned int lcore_id);
84*6f987b59SSivaprasad Tummala 
85*6f987b59SSivaprasad Tummala /**
86*6f987b59SSivaprasad Tummala  * Set the new frequency for a specific lcore by indicating the index of
87*6f987b59SSivaprasad Tummala  * available frequencies.
88*6f987b59SSivaprasad Tummala  * It should be protected outside of this function for threadsafe.
89*6f987b59SSivaprasad Tummala  *
90*6f987b59SSivaprasad Tummala  * @param lcore_id
91*6f987b59SSivaprasad Tummala  *  lcore id.
92*6f987b59SSivaprasad Tummala  * @param index
93*6f987b59SSivaprasad Tummala  *  The index of available frequencies.
94*6f987b59SSivaprasad Tummala  *
95*6f987b59SSivaprasad Tummala  * @return
96*6f987b59SSivaprasad Tummala  *  - 1 on success with frequency changed.
97*6f987b59SSivaprasad Tummala  *  - 0 on success without frequency changed.
98*6f987b59SSivaprasad Tummala  *  - Negative on error.
99*6f987b59SSivaprasad Tummala  */
100*6f987b59SSivaprasad Tummala int power_pstate_cpufreq_set_freq(unsigned int lcore_id, uint32_t index);
101*6f987b59SSivaprasad Tummala 
102*6f987b59SSivaprasad Tummala /**
103*6f987b59SSivaprasad Tummala  * Scale up the frequency of a specific lcore according to the available
104*6f987b59SSivaprasad Tummala  * frequencies.
105*6f987b59SSivaprasad Tummala  * It should be protected outside of this function for threadsafe.
106*6f987b59SSivaprasad Tummala  *
107*6f987b59SSivaprasad Tummala  * @param lcore_id
108*6f987b59SSivaprasad Tummala  *  lcore id.
109*6f987b59SSivaprasad Tummala  *
110*6f987b59SSivaprasad Tummala  * @return
111*6f987b59SSivaprasad Tummala  *  - 1 on success with frequency changed.
112*6f987b59SSivaprasad Tummala  *  - 0 on success without frequency changed.
113*6f987b59SSivaprasad Tummala  *  - Negative on error.
114*6f987b59SSivaprasad Tummala  */
115*6f987b59SSivaprasad Tummala int power_pstate_cpufreq_freq_up(unsigned int lcore_id);
116*6f987b59SSivaprasad Tummala 
117*6f987b59SSivaprasad Tummala /**
118*6f987b59SSivaprasad Tummala  * Scale down the frequency of a specific lcore according to the available
119*6f987b59SSivaprasad Tummala  * frequencies.
120*6f987b59SSivaprasad Tummala  * It should be protected outside of this function for threadsafe.
121*6f987b59SSivaprasad Tummala  *
122*6f987b59SSivaprasad Tummala  * @param lcore_id
123*6f987b59SSivaprasad Tummala  *  lcore id.
124*6f987b59SSivaprasad Tummala  *
125*6f987b59SSivaprasad Tummala  * @return
126*6f987b59SSivaprasad Tummala  *  - 1 on success with frequency changed.
127*6f987b59SSivaprasad Tummala  *  - 0 on success without frequency changed.
128*6f987b59SSivaprasad Tummala  *  - Negative on error.
129*6f987b59SSivaprasad Tummala  */
130*6f987b59SSivaprasad Tummala int power_pstate_cpufreq_freq_down(unsigned int lcore_id);
131*6f987b59SSivaprasad Tummala 
132*6f987b59SSivaprasad Tummala /**
133*6f987b59SSivaprasad Tummala  * Scale up the frequency of a specific lcore to the highest according to the
134*6f987b59SSivaprasad Tummala  * available frequencies.
135*6f987b59SSivaprasad Tummala  * It should be protected outside of this function for threadsafe.
136*6f987b59SSivaprasad Tummala  *
137*6f987b59SSivaprasad Tummala  * @param lcore_id
138*6f987b59SSivaprasad Tummala  *  lcore id.
139*6f987b59SSivaprasad Tummala  *
140*6f987b59SSivaprasad Tummala  * @return
141*6f987b59SSivaprasad Tummala  *  - 1 on success with frequency changed.
142*6f987b59SSivaprasad Tummala  *  - 0 on success without frequency changed.
143*6f987b59SSivaprasad Tummala  *  - Negative on error.
144*6f987b59SSivaprasad Tummala  */
145*6f987b59SSivaprasad Tummala int power_pstate_cpufreq_freq_max(unsigned int lcore_id);
146*6f987b59SSivaprasad Tummala 
147*6f987b59SSivaprasad Tummala /**
148*6f987b59SSivaprasad Tummala  * Scale down the frequency of a specific lcore to the lowest according to the
149*6f987b59SSivaprasad Tummala  * available frequencies.
150*6f987b59SSivaprasad Tummala  * It should be protected outside of this function for threadsafe.
151*6f987b59SSivaprasad Tummala  *
152*6f987b59SSivaprasad Tummala  * @param lcore_id
153*6f987b59SSivaprasad Tummala  *  lcore id.
154*6f987b59SSivaprasad Tummala  *
155*6f987b59SSivaprasad Tummala  * @return
156*6f987b59SSivaprasad Tummala  *  - 1 on success with frequency changed.
157*6f987b59SSivaprasad Tummala  *  - 0 on success without frequency changed.
158*6f987b59SSivaprasad Tummala  *  - Negative on error.
159*6f987b59SSivaprasad Tummala  */
160*6f987b59SSivaprasad Tummala int power_pstate_cpufreq_freq_min(unsigned int lcore_id);
161*6f987b59SSivaprasad Tummala 
162*6f987b59SSivaprasad Tummala /**
163*6f987b59SSivaprasad Tummala  * Get the turbo status of a specific lcore.
164*6f987b59SSivaprasad Tummala  * It should be protected outside of this function for threadsafe.
165*6f987b59SSivaprasad Tummala  *
166*6f987b59SSivaprasad Tummala  * @param lcore_id
167*6f987b59SSivaprasad Tummala  *  lcore id.
168*6f987b59SSivaprasad Tummala  *
169*6f987b59SSivaprasad Tummala  * @return
170*6f987b59SSivaprasad Tummala  *  - 1 Turbo Boost is enabled on this lcore.
171*6f987b59SSivaprasad Tummala  *  - 0 Turbo Boost is disabled on this lcore.
172*6f987b59SSivaprasad Tummala  *  - Negative on error.
173*6f987b59SSivaprasad Tummala  */
174*6f987b59SSivaprasad Tummala int power_pstate_turbo_status(unsigned int lcore_id);
175*6f987b59SSivaprasad Tummala 
176*6f987b59SSivaprasad Tummala /**
177*6f987b59SSivaprasad Tummala  * Enable Turbo Boost on a specific lcore.
178*6f987b59SSivaprasad Tummala  * It should be protected outside of this function for threadsafe.
179*6f987b59SSivaprasad Tummala  *
180*6f987b59SSivaprasad Tummala  * @param lcore_id
181*6f987b59SSivaprasad Tummala  *  lcore id.
182*6f987b59SSivaprasad Tummala  *
183*6f987b59SSivaprasad Tummala  * @return
184*6f987b59SSivaprasad Tummala  *  - 0 Turbo Boost is enabled successfully on this lcore.
185*6f987b59SSivaprasad Tummala  *  - Negative on error.
186*6f987b59SSivaprasad Tummala  */
187*6f987b59SSivaprasad Tummala int power_pstate_enable_turbo(unsigned int lcore_id);
188*6f987b59SSivaprasad Tummala 
189*6f987b59SSivaprasad Tummala /**
190*6f987b59SSivaprasad Tummala  * Disable Turbo Boost on a specific lcore.
191*6f987b59SSivaprasad Tummala  * It should be protected outside of this function for threadsafe.
192*6f987b59SSivaprasad Tummala  *
193*6f987b59SSivaprasad Tummala  * @param lcore_id
194*6f987b59SSivaprasad Tummala  *  lcore id.
195*6f987b59SSivaprasad Tummala  *
196*6f987b59SSivaprasad Tummala  * @return
197*6f987b59SSivaprasad Tummala  *  - 0 Turbo Boost disabled successfully on this lcore.
198*6f987b59SSivaprasad Tummala  *  - Negative on error.
199*6f987b59SSivaprasad Tummala  */
200*6f987b59SSivaprasad Tummala int power_pstate_disable_turbo(unsigned int lcore_id);
201*6f987b59SSivaprasad Tummala 
202*6f987b59SSivaprasad Tummala /**
203*6f987b59SSivaprasad Tummala  * Returns power capabilities for a specific lcore.
204*6f987b59SSivaprasad Tummala  *
205*6f987b59SSivaprasad Tummala  * @param lcore_id
206*6f987b59SSivaprasad Tummala  *  lcore id.
207*6f987b59SSivaprasad Tummala  * @param caps
208*6f987b59SSivaprasad Tummala  *  pointer to rte_power_core_capabilities object.
209*6f987b59SSivaprasad Tummala  *
210*6f987b59SSivaprasad Tummala  * @return
211*6f987b59SSivaprasad Tummala  *  - 0 on success.
212*6f987b59SSivaprasad Tummala  *  - Negative on error.
213*6f987b59SSivaprasad Tummala  */
214*6f987b59SSivaprasad Tummala int power_pstate_get_capabilities(unsigned int lcore_id,
215*6f987b59SSivaprasad Tummala 		struct rte_power_core_capabilities *caps);
216*6f987b59SSivaprasad Tummala 
217*6f987b59SSivaprasad Tummala #endif /* INTEL_PSTATE_CPUFREQ_H */
218