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