LCOV - code coverage report
Current view: top level - zephyr/pm - pm.h Coverage Total Hit
Test: new.info Lines: 90.9 % 11 10
Test Date: 2025-09-05 16:43:28

            Line data    Source code
       1            0 : /*
       2              :  * Copyright (c) 2012-2014 Wind River Systems, Inc.
       3              :  *
       4              :  * SPDX-License-Identifier: Apache-2.0
       5              :  */
       6              : 
       7              : #ifndef ZEPHYR_INCLUDE_PM_PM_H_
       8              : #define ZEPHYR_INCLUDE_PM_PM_H_
       9              : 
      10              : #include <zephyr/types.h>
      11              : #include <zephyr/sys/slist.h>
      12              : #include <zephyr/pm/state.h>
      13              : #include <zephyr/toolchain.h>
      14              : #include <errno.h>
      15              : #include <stdbool.h>
      16              : 
      17              : #ifdef __cplusplus
      18              : extern "C" {
      19              : #endif
      20              : 
      21              : /**
      22              :  * @brief System and device power management
      23              :  * @defgroup subsys_pm Power Management (PM)
      24              :  * @since 1.2
      25              :  * @ingroup os_services
      26              :  * @{
      27              :  * @}
      28              :  */
      29              : 
      30              : /**
      31              :  * @brief System Power Management API
      32              :  * @defgroup subsys_pm_sys System
      33              :  * @since 1.2
      34              :  * @ingroup subsys_pm
      35              :  * @{
      36              :  */
      37              : 
      38              : /**
      39              :  * Power management notifier struct
      40              :  *
      41              :  * This struct contains callbacks that are called when the target enters and
      42              :  * exits power states.
      43              :  *
      44              :  * As currently implemented the entry callback is invoked when
      45              :  * transitioning from PM_STATE_ACTIVE to another state, and the exit
      46              :  * callback is invoked when transitioning from a non-active state to
      47              :  * PM_STATE_ACTIVE. This behavior may change in the future.
      48              :  *
      49              :  * @note These callbacks can be called from the ISR of the event
      50              :  *       that caused the kernel exit from idling.
      51              :  *
      52              :  * @note It is not allowed to call @ref pm_notifier_unregister or
      53              :  *       @ref pm_notifier_register from these callbacks because they are called
      54              :  *       with the spin locked in those functions.
      55              :  */
      56            1 : struct pm_notifier {
      57              :         sys_snode_t _node;
      58              :         /**
      59              :          * Application defined function for doing any target specific operations
      60              :          * for power state entry.
      61              :          */
      62            1 :         void (*state_entry)(enum pm_state state);
      63              :         /**
      64              :          * Application defined function for doing any target specific operations
      65              :          * for power state exit.
      66              :          */
      67            1 :         void (*state_exit)(enum pm_state state);
      68              : };
      69              : 
      70              : #if defined(CONFIG_PM) || defined(__DOXYGEN__)
      71              : /**
      72              :  * @brief Force usage of given power state.
      73              :  *
      74              :  * This function overrides decision made by PM policy forcing
      75              :  * usage of given power state upon next entry of the idle thread.
      76              :  *
      77              :  * @note This function can only run in thread context
      78              :  *
      79              :  * @param cpu CPU index.
      80              :  * @param info Power state which should be used in the ongoing
      81              :  *      suspend operation.
      82              :  */
      83            1 : bool pm_state_force(uint8_t cpu, const struct pm_state_info *info);
      84              : 
      85              : /**
      86              :  * @brief Register a power management notifier
      87              :  *
      88              :  * Register the given notifier from the power management notification
      89              :  * list.
      90              :  *
      91              :  * @param notifier pm_notifier object to be registered.
      92              :  */
      93            1 : void pm_notifier_register(struct pm_notifier *notifier);
      94              : 
      95              : /**
      96              :  * @brief Unregister a power management notifier
      97              :  *
      98              :  * Remove the given notifier from the power management notification
      99              :  * list. After that this object callbacks will not be called.
     100              :  *
     101              :  * @param notifier pm_notifier object to be unregistered.
     102              :  *
     103              :  * @return 0 if the notifier was successfully removed, a negative value
     104              :  * otherwise.
     105              :  */
     106            1 : int pm_notifier_unregister(struct pm_notifier *notifier);
     107              : 
     108              : /**
     109              :  * @brief Gets the next power state that will be used.
     110              :  *
     111              :  * This function returns the next power state that will be used by the
     112              :  * SoC.
     113              :  *
     114              :  * @param cpu CPU index.
     115              :  * @return next pm_state_info that will be used
     116              :  */
     117            1 : const struct pm_state_info *pm_state_next_get(uint8_t cpu);
     118              : 
     119              : /**
     120              :  * @brief Notify exit from kernel sleep.
     121              :  *
     122              :  * This function would notify exit from kernel idling if a corresponding
     123              :  * pm_system_suspend() notification was handled and did not return
     124              :  * PM_STATE_ACTIVE.
     125              :  *
     126              :  * This function should be called from the ISR context of the event
     127              :  * that caused the exit from kernel idling.
     128              :  *
     129              :  * This is required for cpu power states that would require
     130              :  * interrupts to be enabled while entering low power states. e.g. C1 in x86. In
     131              :  * those cases, the ISR would be invoked immediately after the event wakes up
     132              :  * the CPU, before code following the CPU wait, gets a chance to execute. This
     133              :  * can be ignored if no operation needs to be done at the wake event
     134              :  * notification.
     135              :  */
     136            1 : void pm_system_resume(void);
     137              : 
     138              : /**
     139              :  * @}
     140              :  */
     141              : 
     142              : /**
     143              :  * @brief System Power Management Hooks
     144              :  * @defgroup subsys_pm_sys_hooks Hooks
     145              :  * @ingroup subsys_pm_sys
     146              :  * @{
     147              :  */
     148              : 
     149              : /**
     150              :  * @brief Put processor into a power state.
     151              :  *
     152              :  * This function implements the SoC specific details necessary
     153              :  * to put the processor into available power states.
     154              :  *
     155              :  * @param state Power state.
     156              :  * @param substate_id Power substate id.
     157              :  */
     158            1 : void pm_state_set(enum pm_state state, uint8_t substate_id);
     159              : 
     160              : /**
     161              :  * @brief Do any SoC or architecture specific post ops after sleep state exits.
     162              :  *
     163              :  * This function is a place holder to do any operations that may
     164              :  * be needed to be done after sleep state exits. Currently it enables
     165              :  * interrupts after resuming from sleep state. In future, the enabling
     166              :  * of interrupts may be moved into the kernel.
     167              :  *
     168              :  * @param state Power state.
     169              :  * @param substate_id Power substate id.
     170              :  */
     171            1 : void pm_state_exit_post_ops(enum pm_state state, uint8_t substate_id);
     172              : 
     173              : /**
     174              :  * @}
     175              :  */
     176              : 
     177              : #else  /* CONFIG_PM */
     178              : 
     179              : static inline void pm_notifier_register(struct pm_notifier *notifier)
     180              : {
     181              :         ARG_UNUSED(notifier);
     182              : }
     183              : 
     184              : static inline int pm_notifier_unregister(struct pm_notifier *notifier)
     185              : {
     186              :         ARG_UNUSED(notifier);
     187              : 
     188              :         return -ENOSYS;
     189              : }
     190              : 
     191              : static inline const struct pm_state_info *pm_state_next_get(uint8_t cpu)
     192              : {
     193              :         ARG_UNUSED(cpu);
     194              : 
     195              :         return NULL;
     196              : }
     197              : 
     198              : static inline void pm_system_resume(void)
     199              : {
     200              : }
     201              : 
     202              : #endif /* CONFIG_PM */
     203              : 
     204              : #ifdef __cplusplus
     205              : }
     206              : #endif
     207              : 
     208              : #endif /* ZEPHYR_INCLUDE_PM_PM_H_ */
        

Generated by: LCOV version 2.0-1