LCOV - code coverage report
Current view: top level - zephyr/arch/common - pm_s2ram.h Hit Total Coverage
Test: new.info Lines: 5 5 100.0 %
Date: 2025-01-09 03:30:05

          Line data    Source code
       1           1 : /*
       2             :  * Copyright (c) 2022, Carlo Caione <ccaione@baylibre.com>
       3             :  */
       4             : 
       5             : /**
       6             :  * @file
       7             :  *
       8             :  * @brief public S2RAM APIs.
       9             :  * @defgroup pm_s2ram S2RAM APIs
      10             :  * @ingroup subsys_pm
      11             :  * @{
      12             :  */
      13             : 
      14             : #ifndef ZEPHYR_INCLUDE_ARCH_COMMON_PM_S2RAM_H_
      15             : #define ZEPHYR_INCLUDE_ARCH_COMMON_PM_S2RAM_H_
      16             : 
      17             : #ifdef _ASMLANGUAGE
      18             : GTEXT(arch_pm_s2ram_suspend);
      19             : #else
      20             : 
      21             : #ifdef __cplusplus
      22             : extern "C" {
      23             : #endif
      24             : 
      25             : /**
      26             :  * @brief System off function
      27             :  *
      28             :  * This function is passed as argument and called by @ref arch_pm_s2ram_suspend
      29             :  * to power the system off after the CPU context has been saved.
      30             :  *
      31             :  * This function never returns if the system is powered off. If the operation
      32             :  * cannot be performed a proper value is returned and the code must take care
      33             :  * of restoring the system in a fully operational state before returning.
      34             :  *
      35             :  * @retval none         The system is powered off.
      36             :  * @retval -EBUSY       The system is busy and cannot be powered off at this time.
      37             :  * @retval -errno       Other error codes.
      38             :  */
      39           1 : typedef int (*pm_s2ram_system_off_fn_t)(void);
      40             : 
      41             : /**
      42             :  * @brief Save CPU context on suspend
      43             :  *
      44             :  * This function is used on suspend-to-RAM (S2RAM) to save the CPU context in
      45             :  * (retained) RAM before powering the system off using the provided function.
      46             :  * This function is usually called from the PM subsystem / hooks.
      47             :  *
      48             :  * The CPU context is usually the minimum set of CPU registers which content
      49             :  * must be restored on resume to let the platform resume its execution from the
      50             :  * point it left at the time of suspension.
      51             :  *
      52             :  * @param system_off    Function to power off the system.
      53             :  *
      54             :  * @retval 0            The CPU context was successfully saved and restored.
      55             :  * @retval -EBUSY       The system is busy and cannot be suspended at this time.
      56             :  * @retval -errno       Negative errno code in case of failure.
      57             :  */
      58           1 : int arch_pm_s2ram_suspend(pm_s2ram_system_off_fn_t system_off);
      59             : 
      60             : /**
      61             :  * @brief Mark that core is entering suspend-to-RAM state.
      62             :  *
      63             :  * Function is called when system state is stored to RAM, just before going to system
      64             :  * off.
      65             :  *
      66             :  * Default implementation is setting a magic word in RAM. CONFIG_PM_S2RAM_CUSTOM_MARKING
      67             :  * allows custom implementation.
      68             :  * The following requirements must be fulfilled:
      69             :  * - the function cannot use stack (asm function or function with 'naked' attribute)
      70             :  * - the content of the R1 and R4 registers must remain unchanged
      71             :  * - returning from the function should be performed with the `bx lr` instruction
      72             :  *
      73             :  */
      74           1 : void pm_s2ram_mark_set(void);
      75             : 
      76             : /**
      77             :  * @brief Check suspend-to-RAM marking and clear its state.
      78             :  *
      79             :  * Function is used to determine if resuming after suspend-to-RAM shall be performed
      80             :  * or standard boot code shall be executed.
      81             :  *
      82             :  * Default implementation is checking a magic word in RAM. CONFIG_PM_S2RAM_CUSTOM_MARKING
      83             :  * allows custom implementation.
      84             :  * The following requirements must be fulfilled:
      85             :  * - the function cannot use stack (most likely asm function)
      86             :  * - the content of the R1 and R4 registers must remain unchanged
      87             :  * - the function's return value is passed by R0 register
      88             :  * - returning from the function should be performed with the `bx lr` instruction
      89             :  *
      90             :  * @retval true if marking is found which indicates resuming after suspend-to-RAM.
      91             :  * @retval false if marking is not found which indicates standard boot.
      92             :  */
      93           1 : bool pm_s2ram_mark_check_and_clear(void);
      94             : /**
      95             :  * @}
      96             :  */
      97             : 
      98             : #ifdef __cplusplus
      99             : }
     100             : #endif
     101             : 
     102             : #endif /* _ASMLANGUAGE */
     103             : 
     104             : #endif /* ZEPHYR_INCLUDE_ARCH_COMMON_PM_S2RAM_H_ */

Generated by: LCOV version 1.14