xref: /dpdk/lib/power/rte_power_qos.h (revision b3477a6bae7e889955edd8b82f359868dc0abb01)
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