LCOV - code coverage report
Current view: top level - zephyr/pm - pm.h Hit Total Coverage
Test: new.info Lines: 10 11 90.9 %
Date: 2024-12-22 00:14:23

          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             : /** @cond INTERNAL_HIDDEN */
     140             : __deprecated void z_pm_save_idle_exit(void);
     141             : /** @endcond */
     142             : 
     143             : /**
     144             :  * @}
     145             :  */
     146             : 
     147             : /**
     148             :  * @brief System Power Management Hooks
     149             :  * @defgroup subsys_pm_sys_hooks Hooks
     150             :  * @ingroup subsys_pm_sys
     151             :  * @{
     152             :  */
     153             : 
     154             : /**
     155             :  * @brief Put processor into a power state.
     156             :  *
     157             :  * This function implements the SoC specific details necessary
     158             :  * to put the processor into available power states.
     159             :  *
     160             :  * @param state Power state.
     161             :  * @param substate_id Power substate id.
     162             :  */
     163           1 : void pm_state_set(enum pm_state state, uint8_t substate_id);
     164             : 
     165             : /**
     166             :  * @brief Do any SoC or architecture specific post ops after sleep state exits.
     167             :  *
     168             :  * This function is a place holder to do any operations that may
     169             :  * be needed to be done after sleep state exits. Currently it enables
     170             :  * interrupts after resuming from sleep state. In future, the enabling
     171             :  * of interrupts may be moved into the kernel.
     172             :  *
     173             :  * @param state Power state.
     174             :  * @param substate_id Power substate id.
     175             :  */
     176           1 : void pm_state_exit_post_ops(enum pm_state state, uint8_t substate_id);
     177             : 
     178             : /**
     179             :  * @}
     180             :  */
     181             : 
     182             : #else  /* CONFIG_PM */
     183             : 
     184             : static inline void pm_notifier_register(struct pm_notifier *notifier)
     185             : {
     186             :         ARG_UNUSED(notifier);
     187             : }
     188             : 
     189             : static inline int pm_notifier_unregister(struct pm_notifier *notifier)
     190             : {
     191             :         ARG_UNUSED(notifier);
     192             : 
     193             :         return -ENOSYS;
     194             : }
     195             : 
     196             : static inline const struct pm_state_info *pm_state_next_get(uint8_t cpu)
     197             : {
     198             :         ARG_UNUSED(cpu);
     199             : 
     200             :         return NULL;
     201             : }
     202             : static inline void z_pm_save_idle_exit(void)
     203             : {
     204             : }
     205             : 
     206             : static inline void pm_system_resume(void)
     207             : {
     208             : }
     209             : 
     210             : #endif /* CONFIG_PM */
     211             : 
     212             : #ifdef __cplusplus
     213             : }
     214             : #endif
     215             : 
     216             : #endif /* ZEPHYR_INCLUDE_PM_PM_H_ */

Generated by: LCOV version 1.14