45 #ifndef SYS_POWER_MGR_H_
46 #define SYS_POWER_MGR_H_
58 pm_mode_extended_sleep,
65 pm_sys_wakeup_mode_normal,
66 pm_sys_wakeup_mode_fast,
70 typedef void (*periph_init_cb)(void);
71 typedef int32_t pm_id_t;
73 typedef struct _adptCB {
74 bool (*ad_prepare_for_sleep)(void);
75 void (*ad_sleep_canceled)(void);
76 void (*ad_wake_up_ind)(bool);
77 void (*ad_xtalm_ready_ind)(void);
78 uint8_t ad_sleep_preparation_time;
79 } adapter_call_backs_t;
90 typedef void (*comp_init_func)(
void *);
92 typedef struct comp_init_tree {
93 comp_init_func init_fun;
95 const struct comp_init_tree *
const *depend;
108 #define COMPONENT_INIT_WITH_DEPS(_comp, _init, _init_arg, _deps, _sect) \
110 const comp_init_tree_t _comp = { _init, (void *)_init_arg, _deps }; \
112 const comp_init_tree_t *const _comp##_ptr __attribute__((section (#_sect "_init_section"))) = &_comp; \
121 #define BUS_INIT(_id, _init, _init_arg) \
122 COMPONENT_INIT_WITH_DEPS(_id, (comp_init_func)_init, _init_arg, NULL, bus)
131 #define DEVICE_INIT(_id, _init, _init_arg) \
132 COMPONENT_INIT_WITH_DEPS(_id, (comp_init_func)_init, _init_arg, NULL, device)
134 #define ADAPTER_INIT_WITH_DEPS(_adapter, _init, _deps) \
135 COMPONENT_INIT_WITH_DEPS(_adapter, (comp_init_func)_init, NULL, _deps, adapter)
147 #define ADAPTER_INIT(_adapter, _init) \
148 ADAPTER_INIT_WITH_DEPS(_adapter, _init, NULL)
161 #define ADAPTER_INIT_DEP1(_adapter, _init, _dep1) \
162 extern const comp_init_tree_t _dep1; \
164 const comp_init_tree_t *const _adapter##_dep[2] = { &_dep1, NULL }; \
165 ADAPTER_INIT_WITH_DEPS(_adapter, _init, _adapter##_dep)
182 #define ADAPTER_INIT_DEP2(_adapter, _init, _dep1, _dep2) \
183 extern const comp_init_tree_t _dep1; \
184 extern const comp_init_tree_t _dep2; \
186 const comp_init_tree_t *_adapter##_dep[3] = { &_dep1, &_dep2, NULL }; \
187 ADAPTER_INIT_WITH_DEPS(_adapter, _init, _adapter##_dep)
202 void pm_system_init(periph_init_cb peripherals_initialization);
210 void pm_wait_debugger_detach(sleep_mode_t
mode);
227 sleep_mode_t pm_sleep_mode_set(sleep_mode_t
mode);
235 sleep_mode_t pm_sleep_mode_get(
void);
250 void pm_sleep_mode_request(sleep_mode_t
mode);
263 void pm_sleep_mode_release(sleep_mode_t
mode);
275 pm_id_t pm_register_adapter(
const adapter_call_backs_t *cb);
285 void pm_unregister_adapter(pm_id_t
id);
298 void pm_defer_sleep_for(pm_id_t
id, uint32_t time_in_LP_cycles);
318 __RETAINED_CODE
void pm_sleep_enter(uint32_t low_power_periods);
326 __RETAINED_CODE
bool pm_sleep_enter_no_os(sleep_mode_t sleep_mode);
365 __RETAINED_CODE
void pm_execute_wfi(
void);