1dd6fd75bSHuisong Li /* SPDX-License-Identifier: BSD-3-Clause 2dd6fd75bSHuisong Li * Copyright(c) 2024 HiSilicon Limited 3dd6fd75bSHuisong Li */ 4dd6fd75bSHuisong Li 5dd6fd75bSHuisong Li #ifndef RTE_POWER_QOS_H 6dd6fd75bSHuisong Li #define RTE_POWER_QOS_H 7dd6fd75bSHuisong Li 8dd6fd75bSHuisong Li #include <stdint.h> 9dd6fd75bSHuisong Li 10dd6fd75bSHuisong Li #include <rte_compat.h> 11dd6fd75bSHuisong Li 12dd6fd75bSHuisong Li #ifdef __cplusplus 13dd6fd75bSHuisong Li extern "C" { 14dd6fd75bSHuisong Li #endif 15dd6fd75bSHuisong Li 16dd6fd75bSHuisong Li /** 17dd6fd75bSHuisong Li * @file rte_power_qos.h 18dd6fd75bSHuisong Li * 19dd6fd75bSHuisong Li * PM QoS API. 20dd6fd75bSHuisong Li * 21dd6fd75bSHuisong Li * The CPU-wide resume latency limit has a positive impact on this CPU's idle 22dd6fd75bSHuisong Li * state selection in each cpuidle governor. 23dd6fd75bSHuisong Li * Please see the PM QoS on CPU wide in the following link: 24dd6fd75bSHuisong Li * https://www.kernel.org/doc/html/latest/admin-guide/abi-testing.html?highlight=pm_qos_resume_latency_us#abi-sys-devices-power-pm-qos-resume-latency-us 25dd6fd75bSHuisong Li * 26dd6fd75bSHuisong Li * The deeper the idle state, the lower the power consumption, but the 27*b3477a6bSHuisong Li * longer the resume time. Some services are latency sensitive and request 28*b3477a6bSHuisong Li * a low resume time, like interrupt packet receiving mode. 29dd6fd75bSHuisong Li * 30dd6fd75bSHuisong Li * In these case, per-CPU PM QoS API can be used to control this CPU's idle 31dd6fd75bSHuisong Li * state selection and limit just enter the shallowest idle state to low the 32dd6fd75bSHuisong Li * delay after sleep by setting strict resume latency (zero value). 33dd6fd75bSHuisong Li */ 34dd6fd75bSHuisong Li 35dd6fd75bSHuisong Li #define RTE_POWER_QOS_STRICT_LATENCY_VALUE 0 36dd6fd75bSHuisong Li #define RTE_POWER_QOS_RESUME_LATENCY_NO_CONSTRAINT INT32_MAX 37dd6fd75bSHuisong Li 38dd6fd75bSHuisong Li /** 39dd6fd75bSHuisong Li * @warning 40dd6fd75bSHuisong Li * @b EXPERIMENTAL: this API may change without prior notice. 41dd6fd75bSHuisong Li * 42dd6fd75bSHuisong Li * @param lcore_id 43dd6fd75bSHuisong Li * target logical core id 44dd6fd75bSHuisong Li * 45dd6fd75bSHuisong Li * @param latency 46dd6fd75bSHuisong Li * The latency should be greater than and equal to zero in microseconds unit. 47dd6fd75bSHuisong Li * 48dd6fd75bSHuisong Li * @return 49dd6fd75bSHuisong Li * 0 on success. Otherwise negative value is returned. 50dd6fd75bSHuisong Li */ 51dd6fd75bSHuisong Li __rte_experimental 52dd6fd75bSHuisong Li int rte_power_qos_set_cpu_resume_latency(uint16_t lcore_id, int latency); 53dd6fd75bSHuisong Li 54dd6fd75bSHuisong Li /** 55dd6fd75bSHuisong Li * @warning 56dd6fd75bSHuisong Li * @b EXPERIMENTAL: this API may change without prior notice. 57dd6fd75bSHuisong Li * 58dd6fd75bSHuisong Li * Get the current resume latency of this logical core. 59dd6fd75bSHuisong Li * The default value in kernel is @see RTE_POWER_QOS_RESUME_LATENCY_NO_CONSTRAINT 60dd6fd75bSHuisong Li * if don't set it. 61dd6fd75bSHuisong Li * 62dd6fd75bSHuisong Li * @return 63dd6fd75bSHuisong Li * Negative value on failure. 64dd6fd75bSHuisong Li * >= 0 means the actual resume latency limit on this core. 65dd6fd75bSHuisong Li */ 66dd6fd75bSHuisong Li __rte_experimental 67dd6fd75bSHuisong Li int rte_power_qos_get_cpu_resume_latency(uint16_t lcore_id); 68dd6fd75bSHuisong Li 69dd6fd75bSHuisong Li #ifdef __cplusplus 70dd6fd75bSHuisong Li } 71dd6fd75bSHuisong Li #endif 72dd6fd75bSHuisong Li 73dd6fd75bSHuisong Li #endif /* RTE_POWER_QOS_H */ 74