Zephyr API Documentation  3.6.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
state.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2020 Intel corporation
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#ifndef ZEPHYR_INCLUDE_PM_STATE_H_
8#define ZEPHYR_INCLUDE_PM_STATE_H_
9
10#include <zephyr/sys/util.h>
11#include <zephyr/devicetree.h>
12
13#ifdef __cplusplus
14extern "C" {
15#endif
16
109};
110
116
142
150
157};
158
168#define Z_DT_PHANDLE_01(node_id, prop, idx) \
169 COND_CODE_1(DT_NODE_HAS_STATUS(DT_PHANDLE_BY_IDX(node_id, prop, idx), okay), \
170 (1), (0))
171
181#define Z_PM_STATE_INFO_FROM_DT_CPU(i, node_id) \
182 COND_CODE_1(DT_NODE_HAS_STATUS(DT_PHANDLE_BY_IDX(node_id, cpu_power_states, i), okay), \
183 (PM_STATE_INFO_DT_INIT(DT_PHANDLE_BY_IDX(node_id, cpu_power_states, i)),), ())
184
194#define Z_PM_STATE_FROM_DT_CPU(i, node_id) \
195 COND_CODE_1(DT_NODE_HAS_STATUS(DT_PHANDLE_BY_IDX(node_id, cpu_power_states, i), okay), \
196 (PM_STATE_DT_INIT(DT_PHANDLE_BY_IDX(node_id, cpu_power_states, i)),), ())
197
206#define PM_STATE_INFO_DT_INIT(node_id) \
207 { \
208 .state = PM_STATE_DT_INIT(node_id), \
209 .substate_id = DT_PROP_OR(node_id, substate_id, 0), \
210 .min_residency_us = DT_PROP_OR(node_id, min_residency_us, 0), \
211 .exit_latency_us = DT_PROP_OR(node_id, exit_latency_us, 0), \
212 }
213
220#define PM_STATE_DT_INIT(node_id) \
221 DT_ENUM_IDX(node_id, power_state_name)
222
230#define DT_NUM_CPU_POWER_STATES(node_id) \
231 COND_CODE_1(DT_NODE_HAS_PROP(node_id, cpu_power_states), \
232 (DT_FOREACH_PROP_ELEM_SEP(node_id, cpu_power_states, Z_DT_PHANDLE_01, (+))), \
233 (0))
234
278#define PM_STATE_INFO_LIST_FROM_DT_CPU(node_id) \
279 { \
280 LISTIFY(DT_PROP_LEN_OR(node_id, cpu_power_states, 0), \
281 Z_PM_STATE_INFO_FROM_DT_CPU, (), node_id) \
282 }
283
325#define PM_STATE_LIST_FROM_DT_CPU(node_id) \
326 { \
327 LISTIFY(DT_PROP_LEN_OR(node_id, cpu_power_states, 0), \
328 Z_PM_STATE_FROM_DT_CPU, (), node_id) \
329 }
330
331
332#if defined(CONFIG_PM) || defined(__DOXYGEN__)
342
347#else /* CONFIG_PM */
348
349static inline uint8_t pm_state_cpu_get_all(uint8_t cpu, const struct pm_state_info **states)
350{
351 ARG_UNUSED(cpu);
352 ARG_UNUSED(states);
353
354 return 0;
355}
356
357#endif /* CONFIG_PM */
358
359#ifdef __cplusplus
360}
361#endif
362
363#endif
Devicetree main header.
pm_state
Power management state.
Definition: state.h:27
uint8_t pm_state_cpu_get_all(uint8_t cpu, const struct pm_state_info **states)
Obtain information about all supported states by a CPU.
@ PM_STATE_SOFT_OFF
Soft off state.
Definition: state.h:106
@ PM_STATE_STANDBY
Standby state.
Definition: state.h:70
@ PM_STATE_SUSPEND_TO_RAM
Suspend to ram state.
Definition: state.h:82
@ PM_STATE_ACTIVE
Runtime active state.
Definition: state.h:35
@ PM_STATE_RUNTIME_IDLE
Runtime idle state.
Definition: state.h:46
@ PM_STATE_SUSPEND_TO_IDLE
Suspend to idle state.
Definition: state.h:58
@ PM_STATE_COUNT
Number of power management states (internal use)
Definition: state.h:108
@ PM_STATE_SUSPEND_TO_DISK
Suspend to disk state.
Definition: state.h:95
__UINT32_TYPE__ uint32_t
Definition: stdint.h:90
__UINT8_TYPE__ uint8_t
Definition: stdint.h:88
Information about a power management state.
Definition: state.h:114
uint8_t substate_id
Some platforms have multiple states that map to one Zephyr power state.
Definition: state.h:141
uint32_t min_residency_us
Minimum residency duration in microseconds.
Definition: state.h:149
uint32_t exit_latency_us
Worst case latency in microseconds required to exit the idle state.
Definition: state.h:156
enum pm_state state
Definition: state.h:115
Misc utilities.