xref: /dpdk/lib/power/rte_power_cpufreq.h (revision b462f2737eb08b07b84da4204fbd1c9b9ba00b2d)
1*f30a1bbdSSivaprasad Tummala /* SPDX-License-Identifier: BSD-3-Clause
2*f30a1bbdSSivaprasad Tummala  * Copyright(c) 2010-2014 Intel Corporation
3*f30a1bbdSSivaprasad Tummala  * Copyright(c) 2024 Advanced Micro Devices, Inc.
4*f30a1bbdSSivaprasad Tummala  */
5*f30a1bbdSSivaprasad Tummala 
6*f30a1bbdSSivaprasad Tummala #ifndef RTE_POWER_CPUFREQ_H
7*f30a1bbdSSivaprasad Tummala #define RTE_POWER_CPUFREQ_H
8*f30a1bbdSSivaprasad Tummala 
9*f30a1bbdSSivaprasad Tummala /**
10*f30a1bbdSSivaprasad Tummala  * @file
11*f30a1bbdSSivaprasad Tummala  * CPU Frequency Management
12*f30a1bbdSSivaprasad Tummala  */
13*f30a1bbdSSivaprasad Tummala 
14*f30a1bbdSSivaprasad Tummala #include <rte_common.h>
15*f30a1bbdSSivaprasad Tummala #include <rte_log.h>
16*f30a1bbdSSivaprasad Tummala 
17*f30a1bbdSSivaprasad Tummala #include "power_cpufreq.h"
18*f30a1bbdSSivaprasad Tummala 
19*f30a1bbdSSivaprasad Tummala #ifdef __cplusplus
20*f30a1bbdSSivaprasad Tummala extern "C" {
21*f30a1bbdSSivaprasad Tummala #endif
22*f30a1bbdSSivaprasad Tummala 
23*f30a1bbdSSivaprasad Tummala /* Power Management Environment State */
24*f30a1bbdSSivaprasad Tummala enum power_management_env {
25*f30a1bbdSSivaprasad Tummala 	PM_ENV_NOT_SET = 0,
26*f30a1bbdSSivaprasad Tummala 	PM_ENV_ACPI_CPUFREQ,
27*f30a1bbdSSivaprasad Tummala 	PM_ENV_KVM_VM,
28*f30a1bbdSSivaprasad Tummala 	PM_ENV_PSTATE_CPUFREQ,
29*f30a1bbdSSivaprasad Tummala 	PM_ENV_CPPC_CPUFREQ,
30*f30a1bbdSSivaprasad Tummala 	PM_ENV_AMD_PSTATE_CPUFREQ
31*f30a1bbdSSivaprasad Tummala };
32*f30a1bbdSSivaprasad Tummala 
33*f30a1bbdSSivaprasad Tummala /**
34*f30a1bbdSSivaprasad Tummala  * Check if a specific power management environment type is supported on a
35*f30a1bbdSSivaprasad Tummala  * currently running system.
36*f30a1bbdSSivaprasad Tummala  *
37*f30a1bbdSSivaprasad Tummala  * @param env
38*f30a1bbdSSivaprasad Tummala  *   The environment type to check support for.
39*f30a1bbdSSivaprasad Tummala  *
40*f30a1bbdSSivaprasad Tummala  * @return
41*f30a1bbdSSivaprasad Tummala  *   - 1 if supported
42*f30a1bbdSSivaprasad Tummala  *   - 0 if unsupported
43*f30a1bbdSSivaprasad Tummala  *   - -1 if error, with rte_errno indicating reason for error.
44*f30a1bbdSSivaprasad Tummala  */
45*f30a1bbdSSivaprasad Tummala int rte_power_check_env_supported(enum power_management_env env);
46*f30a1bbdSSivaprasad Tummala 
47*f30a1bbdSSivaprasad Tummala /**
48*f30a1bbdSSivaprasad Tummala  * Set the default power management implementation. If this is not called prior
49*f30a1bbdSSivaprasad Tummala  * to rte_power_init(), then auto-detect of the environment will take place.
50*f30a1bbdSSivaprasad Tummala  * It is thread safe. New env can be set only in uninitialized state
51*f30a1bbdSSivaprasad Tummala  * (thus rte_power_unset_env must be called if different env was already set).
52*f30a1bbdSSivaprasad Tummala  *
53*f30a1bbdSSivaprasad Tummala  * @param env
54*f30a1bbdSSivaprasad Tummala  *  env. The environment in which to initialise Power Management for.
55*f30a1bbdSSivaprasad Tummala  *
56*f30a1bbdSSivaprasad Tummala  * @return
57*f30a1bbdSSivaprasad Tummala  *  - 0 on success.
58*f30a1bbdSSivaprasad Tummala  *  - Negative on error.
59*f30a1bbdSSivaprasad Tummala  */
60*f30a1bbdSSivaprasad Tummala int rte_power_set_env(enum power_management_env env);
61*f30a1bbdSSivaprasad Tummala 
62*f30a1bbdSSivaprasad Tummala /**
63*f30a1bbdSSivaprasad Tummala  * Unset the global environment configuration.
64*f30a1bbdSSivaprasad Tummala  * This can only be called after all threads have completed.
65*f30a1bbdSSivaprasad Tummala  */
66*f30a1bbdSSivaprasad Tummala void rte_power_unset_env(void);
67*f30a1bbdSSivaprasad Tummala 
68*f30a1bbdSSivaprasad Tummala /**
69*f30a1bbdSSivaprasad Tummala  * Get the default power management implementation.
70*f30a1bbdSSivaprasad Tummala  *
71*f30a1bbdSSivaprasad Tummala  * @return
72*f30a1bbdSSivaprasad Tummala  *  power_management_env The configured environment.
73*f30a1bbdSSivaprasad Tummala  */
74*f30a1bbdSSivaprasad Tummala enum power_management_env rte_power_get_env(void);
75*f30a1bbdSSivaprasad Tummala 
76*f30a1bbdSSivaprasad Tummala /**
77*f30a1bbdSSivaprasad Tummala  * Initialize power management for a specific lcore. If rte_power_set_env() has
78*f30a1bbdSSivaprasad Tummala  * not been called then an auto-detect of the environment will start and
79*f30a1bbdSSivaprasad Tummala  * initialise the corresponding resources.
80*f30a1bbdSSivaprasad Tummala  *
81*f30a1bbdSSivaprasad Tummala  * @param lcore_id
82*f30a1bbdSSivaprasad Tummala  *  lcore id.
83*f30a1bbdSSivaprasad Tummala  *
84*f30a1bbdSSivaprasad Tummala  * @return
85*f30a1bbdSSivaprasad Tummala  *  - 0 on success.
86*f30a1bbdSSivaprasad Tummala  *  - Negative on error.
87*f30a1bbdSSivaprasad Tummala  */
88*f30a1bbdSSivaprasad Tummala int rte_power_init(unsigned int lcore_id);
89*f30a1bbdSSivaprasad Tummala 
90*f30a1bbdSSivaprasad Tummala /**
91*f30a1bbdSSivaprasad Tummala  * Exit power management on a specific lcore. This will call the environment
92*f30a1bbdSSivaprasad Tummala  * dependent exit function.
93*f30a1bbdSSivaprasad Tummala  *
94*f30a1bbdSSivaprasad Tummala  * @param lcore_id
95*f30a1bbdSSivaprasad Tummala  *  lcore id.
96*f30a1bbdSSivaprasad Tummala  *
97*f30a1bbdSSivaprasad Tummala  * @return
98*f30a1bbdSSivaprasad Tummala  *  - 0 on success.
99*f30a1bbdSSivaprasad Tummala  *  - Negative on error.
100*f30a1bbdSSivaprasad Tummala  */
101*f30a1bbdSSivaprasad Tummala int rte_power_exit(unsigned int lcore_id);
102*f30a1bbdSSivaprasad Tummala 
103*f30a1bbdSSivaprasad Tummala /**
104*f30a1bbdSSivaprasad Tummala  * Get the available frequencies of a specific lcore.
105*f30a1bbdSSivaprasad Tummala  * Function pointer definition. Review each environments
106*f30a1bbdSSivaprasad Tummala  * specific documentation for usage.
107*f30a1bbdSSivaprasad Tummala  *
108*f30a1bbdSSivaprasad Tummala  * @param lcore_id
109*f30a1bbdSSivaprasad Tummala  *  lcore id.
110*f30a1bbdSSivaprasad Tummala  * @param freqs
111*f30a1bbdSSivaprasad Tummala  *  The buffer array to save the frequencies.
112*f30a1bbdSSivaprasad Tummala  * @param num
113*f30a1bbdSSivaprasad Tummala  *  The number of frequencies to get.
114*f30a1bbdSSivaprasad Tummala  *
115*f30a1bbdSSivaprasad Tummala  * @return
116*f30a1bbdSSivaprasad Tummala  *  The number of available frequencies.
117*f30a1bbdSSivaprasad Tummala  */
118*f30a1bbdSSivaprasad Tummala uint32_t rte_power_freqs(unsigned int lcore_id, uint32_t *freqs, uint32_t num);
119*f30a1bbdSSivaprasad Tummala 
120*f30a1bbdSSivaprasad Tummala /**
121*f30a1bbdSSivaprasad Tummala  * Return the current index of available frequencies of a specific lcore.
122*f30a1bbdSSivaprasad Tummala  * Function pointer definition. Review each environments
123*f30a1bbdSSivaprasad Tummala  * specific documentation for usage.
124*f30a1bbdSSivaprasad Tummala  *
125*f30a1bbdSSivaprasad Tummala  * @param lcore_id
126*f30a1bbdSSivaprasad Tummala  *  lcore id.
127*f30a1bbdSSivaprasad Tummala  *
128*f30a1bbdSSivaprasad Tummala  * @return
129*f30a1bbdSSivaprasad Tummala  *  The current index of available frequencies.
130*f30a1bbdSSivaprasad Tummala  */
131*f30a1bbdSSivaprasad Tummala uint32_t rte_power_get_freq(unsigned int lcore_id);
132*f30a1bbdSSivaprasad Tummala 
133*f30a1bbdSSivaprasad Tummala /**
134*f30a1bbdSSivaprasad Tummala  * Set the new frequency for a specific lcore by indicating the index of
135*f30a1bbdSSivaprasad Tummala  * available frequencies.
136*f30a1bbdSSivaprasad Tummala  * Function pointer definition. Review each environments
137*f30a1bbdSSivaprasad Tummala  * specific documentation for usage.
138*f30a1bbdSSivaprasad Tummala  *
139*f30a1bbdSSivaprasad Tummala  * @param lcore_id
140*f30a1bbdSSivaprasad Tummala  *  lcore id.
141*f30a1bbdSSivaprasad Tummala  * @param index
142*f30a1bbdSSivaprasad Tummala  *  The index of available frequencies.
143*f30a1bbdSSivaprasad Tummala  *
144*f30a1bbdSSivaprasad Tummala  * @return
145*f30a1bbdSSivaprasad Tummala  *  - 1 on success with frequency changed.
146*f30a1bbdSSivaprasad Tummala  *  - 0 on success without frequency changed.
147*f30a1bbdSSivaprasad Tummala  *  - Negative on error.
148*f30a1bbdSSivaprasad Tummala  */
149*f30a1bbdSSivaprasad Tummala uint32_t rte_power_set_freq(unsigned int lcore_id, uint32_t index);
150*f30a1bbdSSivaprasad Tummala 
151*f30a1bbdSSivaprasad Tummala /**
152*f30a1bbdSSivaprasad Tummala  * Scale up the frequency of a specific lcore according to the available
153*f30a1bbdSSivaprasad Tummala  * frequencies.
154*f30a1bbdSSivaprasad Tummala  * Review each environments specific documentation for usage.
155*f30a1bbdSSivaprasad Tummala  *
156*f30a1bbdSSivaprasad Tummala  * @param lcore_id
157*f30a1bbdSSivaprasad Tummala  *  lcore id.
158*f30a1bbdSSivaprasad Tummala  *
159*f30a1bbdSSivaprasad Tummala  * @return
160*f30a1bbdSSivaprasad Tummala  *  - 1 on success with frequency changed.
161*f30a1bbdSSivaprasad Tummala  *  - 0 on success without frequency changed.
162*f30a1bbdSSivaprasad Tummala  *  - Negative on error.
163*f30a1bbdSSivaprasad Tummala  */
164*f30a1bbdSSivaprasad Tummala int rte_power_freq_up(unsigned int lcore_id);
165*f30a1bbdSSivaprasad Tummala 
166*f30a1bbdSSivaprasad Tummala /**
167*f30a1bbdSSivaprasad Tummala  * Scale down the frequency of a specific lcore according to the available
168*f30a1bbdSSivaprasad Tummala  * frequencies.
169*f30a1bbdSSivaprasad Tummala  * Review each environments specific documentation for usage.
170*f30a1bbdSSivaprasad Tummala  *
171*f30a1bbdSSivaprasad Tummala  * @param lcore_id
172*f30a1bbdSSivaprasad Tummala  *  lcore id.
173*f30a1bbdSSivaprasad Tummala  *
174*f30a1bbdSSivaprasad Tummala  * @return
175*f30a1bbdSSivaprasad Tummala  *  - 1 on success with frequency changed.
176*f30a1bbdSSivaprasad Tummala  *  - 0 on success without frequency changed.
177*f30a1bbdSSivaprasad Tummala  *  - Negative on error.
178*f30a1bbdSSivaprasad Tummala  */
179*f30a1bbdSSivaprasad Tummala int rte_power_freq_down(unsigned int lcore_id);
180*f30a1bbdSSivaprasad Tummala 
181*f30a1bbdSSivaprasad Tummala /**
182*f30a1bbdSSivaprasad Tummala  * Scale up the frequency of a specific lcore to the highest according to the
183*f30a1bbdSSivaprasad Tummala  * available frequencies.
184*f30a1bbdSSivaprasad Tummala  * Review each environments specific documentation for usage.
185*f30a1bbdSSivaprasad Tummala  *
186*f30a1bbdSSivaprasad Tummala  * @param lcore_id
187*f30a1bbdSSivaprasad Tummala  *  lcore id.
188*f30a1bbdSSivaprasad Tummala  *
189*f30a1bbdSSivaprasad Tummala  * @return
190*f30a1bbdSSivaprasad Tummala  *  - 1 on success with frequency changed.
191*f30a1bbdSSivaprasad Tummala  *  - 0 on success without frequency changed.
192*f30a1bbdSSivaprasad Tummala  *  - Negative on error.
193*f30a1bbdSSivaprasad Tummala  */
194*f30a1bbdSSivaprasad Tummala int rte_power_freq_max(unsigned int lcore_id);
195*f30a1bbdSSivaprasad Tummala 
196*f30a1bbdSSivaprasad Tummala /**
197*f30a1bbdSSivaprasad Tummala  * Scale down the frequency of a specific lcore to the lowest according to the
198*f30a1bbdSSivaprasad Tummala  * available frequencies.
199*f30a1bbdSSivaprasad Tummala  * Review each environments specific documentation for usage..
200*f30a1bbdSSivaprasad Tummala  *
201*f30a1bbdSSivaprasad Tummala  * @param lcore_id
202*f30a1bbdSSivaprasad Tummala  *  lcore id.
203*f30a1bbdSSivaprasad Tummala  *
204*f30a1bbdSSivaprasad Tummala  * @return
205*f30a1bbdSSivaprasad Tummala  *  - 1 on success with frequency changed.
206*f30a1bbdSSivaprasad Tummala  *  - 0 on success without frequency changed.
207*f30a1bbdSSivaprasad Tummala  *  - Negative on error.
208*f30a1bbdSSivaprasad Tummala  */
209*f30a1bbdSSivaprasad Tummala int rte_power_freq_min(unsigned int lcore_id);
210*f30a1bbdSSivaprasad Tummala 
211*f30a1bbdSSivaprasad Tummala /**
212*f30a1bbdSSivaprasad Tummala  * Query the Turbo Boost status of a specific lcore.
213*f30a1bbdSSivaprasad Tummala  * Review each environments specific documentation for usage..
214*f30a1bbdSSivaprasad Tummala  *
215*f30a1bbdSSivaprasad Tummala  * @param lcore_id
216*f30a1bbdSSivaprasad Tummala  *  lcore id.
217*f30a1bbdSSivaprasad Tummala  *
218*f30a1bbdSSivaprasad Tummala  * @return
219*f30a1bbdSSivaprasad Tummala  *  - 1 turbo boost enabled.
220*f30a1bbdSSivaprasad Tummala  *  - 0 turbo boost disabled.
221*f30a1bbdSSivaprasad Tummala  *  - Negative on error.
222*f30a1bbdSSivaprasad Tummala  */
223*f30a1bbdSSivaprasad Tummala int rte_power_turbo_status(unsigned int lcore_id);
224*f30a1bbdSSivaprasad Tummala 
225*f30a1bbdSSivaprasad Tummala /**
226*f30a1bbdSSivaprasad Tummala  * Enable Turbo Boost for this lcore.
227*f30a1bbdSSivaprasad Tummala  * Review each environments specific documentation for usage..
228*f30a1bbdSSivaprasad Tummala  *
229*f30a1bbdSSivaprasad Tummala  * @param lcore_id
230*f30a1bbdSSivaprasad Tummala  *  lcore id.
231*f30a1bbdSSivaprasad Tummala  *
232*f30a1bbdSSivaprasad Tummala  * @return
233*f30a1bbdSSivaprasad Tummala  *  - 0 on success.
234*f30a1bbdSSivaprasad Tummala  *  - Negative on error.
235*f30a1bbdSSivaprasad Tummala  */
236*f30a1bbdSSivaprasad Tummala int rte_power_freq_enable_turbo(unsigned int lcore_id);
237*f30a1bbdSSivaprasad Tummala 
238*f30a1bbdSSivaprasad Tummala /**
239*f30a1bbdSSivaprasad Tummala  * Disable Turbo Boost for this lcore.
240*f30a1bbdSSivaprasad Tummala  * Review each environments specific documentation for usage..
241*f30a1bbdSSivaprasad Tummala  *
242*f30a1bbdSSivaprasad Tummala  * @param lcore_id
243*f30a1bbdSSivaprasad Tummala  *  lcore id.
244*f30a1bbdSSivaprasad Tummala  *
245*f30a1bbdSSivaprasad Tummala  * @return
246*f30a1bbdSSivaprasad Tummala  *  - 0 on success.
247*f30a1bbdSSivaprasad Tummala  *  - Negative on error.
248*f30a1bbdSSivaprasad Tummala  */
249*f30a1bbdSSivaprasad Tummala int rte_power_freq_disable_turbo(unsigned int lcore_id);
250*f30a1bbdSSivaprasad Tummala 
251*f30a1bbdSSivaprasad Tummala /**
252*f30a1bbdSSivaprasad Tummala  * Returns power capabilities for a specific lcore.
253*f30a1bbdSSivaprasad Tummala  * Function pointer definition. Review each environments
254*f30a1bbdSSivaprasad Tummala  * specific documentation for usage.
255*f30a1bbdSSivaprasad Tummala  *
256*f30a1bbdSSivaprasad Tummala  * @param lcore_id
257*f30a1bbdSSivaprasad Tummala  *  lcore id.
258*f30a1bbdSSivaprasad Tummala  * @param caps
259*f30a1bbdSSivaprasad Tummala  *  pointer to rte_power_core_capabilities object.
260*f30a1bbdSSivaprasad Tummala  *
261*f30a1bbdSSivaprasad Tummala  * @return
262*f30a1bbdSSivaprasad Tummala  *  - 0 on success.
263*f30a1bbdSSivaprasad Tummala  *  - Negative on error.
264*f30a1bbdSSivaprasad Tummala  */
265*f30a1bbdSSivaprasad Tummala int rte_power_get_capabilities(unsigned int lcore_id,
266*f30a1bbdSSivaprasad Tummala 		struct rte_power_core_capabilities *caps);
267*f30a1bbdSSivaprasad Tummala 
268*f30a1bbdSSivaprasad Tummala #ifdef __cplusplus
269*f30a1bbdSSivaprasad Tummala }
270*f30a1bbdSSivaprasad Tummala #endif
271*f30a1bbdSSivaprasad Tummala 
272*f30a1bbdSSivaprasad Tummala #endif /* RTE_POWER_CPUFREQ_H */
273