VSF Documented
wdt_template.inc
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright(C)2009-2022 by VSF Team *
3 * *
4 * Licensed under the Apache License, Version 2.0 (the "License"); *
5 * you may not use this file except in compliance with the License. *
6 * You may obtain a copy of the License at *
7 * *
8 * http://www.apache.org/licenses/LICENSE-2.0 *
9 * *
10 * Unless required by applicable law or agreed to in writing, software *
11 * distributed under the License is distributed on an "AS IS" BASIS, *
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13 * See the License for the specific language governing permissions and *
14 * limitations under the License. *
15 * *
16 ****************************************************************************/
17
18#if VSF_HAL_USE_WDT == ENABLED
19
20/*============================ INCLUDES ======================================*/
21/*============================ MACROS ========================================*/
22
23#if defined(VSF_WDT_CFG_IMP_RENAME_DEVICE_PREFIX) && (VSF_WDT_CFG_IMP_RENAME_DEVICE_PREFIX == ENABLED)
24# define vsf_real_wdt_t VSF_MCONNECT(VSF_WDT_CFG_IMP_DEVICE_PREFIX, _t)
25# define vsf_real_wdt_capability VSF_MCONNECT(VSF_WDT_CFG_IMP_DEVICE_PREFIX, _capability)
26# define vsf_real_wdt_ctrl VSF_MCONNECT(VSF_WDT_CFG_IMP_DEVICE_PREFIX, _ctrl)
27# define vsf_real_wdt_get_configuration VSF_MCONNECT(VSF_WDT_CFG_IMP_DEVICE_PREFIX, _get_configuration)
28#else
29# define vsf_real_wdt_t VSF_MCONNECT(VSF_WDT_CFG_IMP_PREFIX, _wdt_t)
30# define vsf_real_wdt_capability VSF_MCONNECT(VSF_WDT_CFG_IMP_PREFIX, _wdt_capability)
31# define vsf_real_wdt_ctrl VSF_MCONNECT(VSF_WDT_CFG_IMP_PREFIX, _wdt_ctrl)
32# define vsf_real_wdt_get_configuration VSF_MCONNECT(VSF_WDT_CFG_IMP_PREFIX, _wdt_get_configuration)
33#endif
34
35#ifndef VSF_WDT_CFG_REIMPLEMENT_API_CAPABILITY
36# define VSF_WDT_CFG_REIMPLEMENT_API_CAPABILITY DISABLED
37#endif
38
39#ifndef VSF_WDT_CFG_REIMPLEMENT_API_CTRL
40# define VSF_WDT_CFG_REIMPLEMENT_API_CTRL DISABLED
41#endif
42
43#ifndef VSF_WDT_CFG_REIMPLEMENT_API_GET_CONFIGURATION
44# define VSF_WDT_CFG_REIMPLEMENT_API_GET_CONFIGURATION DISABLED
45#endif
46
47#ifdef VSF_WDT_CFG_IMP_REMAP_PREFIX
48# undef VSF_WDT_CFG_REIMPLEMENT_API_CAPABILITY
49# define VSF_WDT_CFG_REIMPLEMENT_API_CAPABILITY ENABLED
50# undef VSF_WDT_CFG_REIMPLEMENT_API_CTRL
51# define VSF_WDT_CFG_REIMPLEMENT_API_CTRL ENABLED
52# undef VSF_WDT_CFG_REIMPLEMENT_API_GET_CONFIGURATION
53# define VSF_WDT_CFG_REIMPLEMENT_API_GET_CONFIGURATION ENABLED
54#endif
55
56#if VSF_WDT_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
57# ifndef VSF_WDT_CFG_CAPABILITY_SUPPORT_EARLY_WAKEUP
58# define VSF_WDT_CFG_CAPABILITY_SUPPORT_EARLY_WAKEUP 1
59# endif
60# ifndef VSF_WDT_CFG_CAPABILITY_SUPPORT_RESET_NONE
61# define VSF_WDT_CFG_CAPABILITY_SUPPORT_RESET_NONE 1
62# endif
63# ifndef VSF_WDT_CFG_CAPABILITY_support_reset_cpu
64# define VSF_WDT_CFG_CAPABILITY_support_reset_cpu 1
65# endif
66# ifndef VSF_WDT_CFG_CAPABILITY_SUPPORT_RESET_SOC
67# define VSF_WDT_CFG_CAPABILITY_SUPPORT_RESET_SOC 1
68# endif
69# ifndef VSF_WDT_CFG_CAPABILITY_SUPPORT_DISABLE
70# define VSF_WDT_CFG_CAPABILITY_SUPPORT_DISABLE 1
71# endif
72# ifndef VSF_WDT_CFG_CAPABILITY_MAX_TIMEOUT_MS
73# define VSF_WDT_CFG_CAPABILITY_MAX_TIMEOUT_MS (1000 * 1000)
74# endif
75#endif
76
77/*============================ LOCAL VARIABLES ===============================*/
78/*============================ IMPLEMENTATION ================================*/
79
80#if VSF_WDT_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
81vsf_wdt_capability_t vsf_real_wdt_capability(vsf_real_wdt_t *wdt_ptr)
82{
83 vsf_wdt_capability_t wdt_capability = {
84 .support_early_wakeup = VSF_WDT_CFG_CAPABILITY_SUPPORT_EARLY_WAKEUP,
85 .support_reset_none = VSF_WDT_CFG_CAPABILITY_SUPPORT_RESET_NONE,
86 .support_reset_cpu = VSF_WDT_CFG_CAPABILITY_support_reset_cpu,
87 .support_reset_soc = VSF_WDT_CFG_CAPABILITY_SUPPORT_RESET_SOC,
88 .support_disable = VSF_WDT_CFG_CAPABILITY_SUPPORT_DISABLE,
89 .max_timeout_ms = VSF_WDT_CFG_CAPABILITY_MAX_TIMEOUT_MS,
90 };
91
92 return wdt_capability;
93}
94#endif
95
96#if VSF_WDT_CFG_REIMPLEMENT_API_CTRL == DISABLED
97vsf_err_t vsf_real_wdt_ctrl(vsf_real_wdt_t *wdt_ptr, vsf_wdt_ctrl_t ctrl, void *param)
98{
99 VSF_HAL_ASSERT(NULL != wdt_ptr);
100
101 // Default implementation: not supported, trigger assertion
103
104 return VSF_ERR_NOT_SUPPORT;
105}
106#endif
107
108#if VSF_WDT_CFG_REIMPLEMENT_API_GET_CONFIGURATION == DISABLED
109vsf_err_t vsf_real_wdt_get_configuration(vsf_real_wdt_t *wdt_ptr, vsf_wdt_cfg_t *cfg_ptr)
110{
111 VSF_HAL_ASSERT(NULL != wdt_ptr);
112 VSF_HAL_ASSERT(NULL != cfg_ptr);
113
114 // Default implementation: not supported, trigger assertion
116
117 return VSF_ERR_NOT_SUPPORT;
118}
119#endif
120
121/*============================ MACROS ========================================*/
122
123#undef VSF_WDT_CFG_REIMPLEMENT_TYPE_CAPABILITY
124#undef VSF_WDT_CFG_REIMPLEMENT_TYPE_CFG
125#undef VSF_WDT_CFG_REIMPLEMENT_TYPE_MODE
126#undef VSF_WDT_CFG_REIMPLEMENT_TYPE_CTRL
127#undef VSF_WDT_CFG_REIMPLEMENT_API_CAPABILITY
128#undef VSF_WDT_CFG_REIMPLEMENT_API_CTRL
129#undef VSF_WDT_CFG_REIMPLEMENT_API_GET_CONFIGURATION
130#undef VSF_WDT_CFG_CAPABILITY_SUPPORT_EARLY_WAKEUP
131#undef VSF_WDT_CFG_CAPABILITY_SUPPORT_RESET_NONE
132#undef VSF_WDT_CFG_CAPABILITY_support_reset_cpu
133#undef VSF_WDT_CFG_CAPABILITY_SUPPORT_RESET_SOC
134#undef VSF_WDT_CFG_CAPABILITY_SUPPORT_DISABLE
135#undef VSF_WDT_CFG_CAPABILITY_MAX_TIMEOUT_MS
136
137#undef vsf_real_wdt_t
138#undef vsf_real_wdt_capability
139#undef vsf_real_wdt_ctrl
140#undef vsf_real_wdt_get_configuration
141
142/*============================ MACROS ========================================*/
143
144#ifdef VSF_WDT_CFG_IMP_REMAP_PREFIX
145
146# define vsf_imp_wdt_t VSF_MCONNECT(VSF_WDT_CFG_IMP_PREFIX, _wdt_t)
147# define vsf_imp_wdt_init VSF_MCONNECT(VSF_WDT_CFG_IMP_PREFIX, _wdt_init)
148# define vsf_imp_wdt_fini VSF_MCONNECT(VSF_WDT_CFG_IMP_PREFIX, _wdt_fini)
149# define vsf_imp_wdt_enable VSF_MCONNECT(VSF_WDT_CFG_IMP_PREFIX, _wdt_enable)
150# define vsf_imp_wdt_disable VSF_MCONNECT(VSF_WDT_CFG_IMP_PREFIX, _wdt_disable)
151# define vsf_imp_wdt_capability VSF_MCONNECT(VSF_WDT_CFG_IMP_PREFIX, _wdt_capability)
152# define vsf_imp_wdt_feed VSF_MCONNECT(VSF_WDT_CFG_IMP_PREFIX, _wdt_feed)
153# define vsf_imp_wdt_get_configuration VSF_MCONNECT(VSF_WDT_CFG_IMP_PREFIX, _wdt_get_configuration)
154# define vsf_imp_wdt_ctrl VSF_MCONNECT(VSF_WDT_CFG_IMP_PREFIX, _wdt_ctrl)
155
156# define vsf_remap_wdt_t VSF_MCONNECT(VSF_WDT_CFG_IMP_REMAP_PREFIX, _wdt_t)
157# define vsf_remap_wdt_init VSF_MCONNECT(VSF_WDT_CFG_IMP_REMAP_PREFIX, _wdt_init)
158# define vsf_remap_wdt_fini VSF_MCONNECT(VSF_WDT_CFG_IMP_REMAP_PREFIX, _wdt_fini)
159# define vsf_remap_wdt_enable VSF_MCONNECT(VSF_WDT_CFG_IMP_REMAP_PREFIX, _wdt_enable)
160# define vsf_remap_wdt_disable VSF_MCONNECT(VSF_WDT_CFG_IMP_REMAP_PREFIX, _wdt_disable)
161# define vsf_remap_wdt_capability VSF_MCONNECT(VSF_WDT_CFG_IMP_REMAP_PREFIX, _wdt_capability)
162# define vsf_remap_wdt_feed VSF_MCONNECT(VSF_WDT_CFG_IMP_REMAP_PREFIX, _wdt_feed)
163# define vsf_remap_wdt_get_configuration VSF_MCONNECT(VSF_WDT_CFG_IMP_REMAP_PREFIX, _wdt_get_configuration)
164# define vsf_remap_wdt_ctrl VSF_MCONNECT(VSF_WDT_CFG_IMP_REMAP_PREFIX, _wdt_ctrl)
165
166# define VSF_WDT_CFG_IMP_REMAP_FUNCTIONS \
167 vsf_err_t vsf_imp_wdt_init(vsf_imp_wdt_t *wdt_ptr, vsf_wdt_cfg_t *cfg_ptr) \
168 { \
169 VSF_HAL_ASSERT(wdt_ptr != NULL); \
170 return vsf_remap_wdt_init(wdt_ptr, cfg_ptr); \
171 } \
172 void vsf_imp_wdt_fini(vsf_imp_wdt_t *wdt_ptr) \
173 { \
174 VSF_HAL_ASSERT(wdt_ptr != NULL); \
175 vsf_remap_wdt_fini(wdt_ptr); \
176 } \
177 fsm_rt_t vsf_imp_wdt_enable(vsf_imp_wdt_t *wdt_ptr) \
178 { \
179 VSF_HAL_ASSERT(wdt_ptr != NULL); \
180 return vsf_remap_wdt_enable(wdt_ptr); \
181 } \
182 fsm_rt_t vsf_imp_wdt_disable(vsf_imp_wdt_t *wdt_ptr) \
183 { \
184 VSF_HAL_ASSERT(wdt_ptr != NULL); \
185 return vsf_remap_wdt_disable(wdt_ptr); \
186 } \
187 vsf_wdt_capability_t vsf_imp_wdt_capability(vsf_imp_wdt_t *wdt_ptr) \
188 { \
189 VSF_HAL_ASSERT(wdt_ptr != NULL); \
190 return vsf_remap_wdt_capability(wdt_ptr); \
191 } \
192 void vsf_imp_wdt_feed(vsf_imp_wdt_t *wdt_ptr) \
193 { \
194 VSF_HAL_ASSERT(wdt_ptr != NULL); \
195 vsf_remap_wdt_feed(wdt_ptr); \
196 } \
197 vsf_err_t vsf_imp_wdt_get_configuration(vsf_imp_wdt_t *wdt_ptr, \
198 vsf_wdt_cfg_t *cfg_ptr) \
199 { \
200 VSF_HAL_ASSERT(wdt_ptr != NULL); \
201 return vsf_remap_wdt_get_configuration(wdt_ptr, cfg_ptr); \
202 } \
203 vsf_err_t vsf_imp_wdt_ctrl(vsf_imp_wdt_t *wdt_ptr, vsf_wdt_ctrl_t ctrl, void *param) \
204 { \
205 VSF_HAL_ASSERT(wdt_ptr != NULL); \
206 return vsf_remap_wdt_ctrl(wdt_ptr, ctrl, param); \
207 }
208#endif
209
210/*============================ GLOBAL VARIABLES ==============================*/
211
212#define VSF_HAL_TEMPLATE_IMP_NAME _wdt
213#define VSF_HAL_TEMPLATE_IMP_UPCASE_NAME _WDT
214
215#if !defined(VSF_WDT_CFG_IMP_PREFIX) && !defined(VSF_WDT_CFG_IMP_DEVICE_PREFIX)
216# error "Please define VSF_WDT_CFG_IMP_PREFIX in wdt driver"
217#endif
218
219#if !defined(VSF_WDT_CFG_IMP_UPCASE_PREFIX) && !defined(VSF_WDT_CFG_IMP_DEVICE_UPCASE_PREFIX)
220# error "Please define VSF_WDT_CFG_IMP_UPCASE_PREFIX in wdt driver"
221#endif
222
223#ifndef VSF_WDT_CFG_IMP_COUNT_MASK_PREFIX
224# define VSF_WDT_CFG_IMP_COUNT_MASK_PREFIX VSF_WDT_CFG_IMP_UPCASE_PREFIX
225#endif
226
227#ifdef VSF_WDT_CFG_IMP_REMAP_FUNCTIONS
228# define VSF_HAL_CFG_IMP_REMAP_FUNCTIONS VSF_WDT_CFG_IMP_REMAP_FUNCTIONS
229#endif
230
232
233#undef VSF_WDT_CFG_IMP_PREFIX
234#undef VSF_WDT_CFG_IMP_COUNT_MASK_PREFIX
235#undef VSF_WDT_CFG_IMP_UPCASE_PREFIX
236#undef VSF_WDT_CFG_IMP_DEVICE_PREFIX
237#undef VSF_WDT_CFG_IMP_DEVICE_UPCASE_PREFIX
238#undef VSF_WDT_CFG_IMP_LV0
239#undef VSF_WDT_CFG_IMP_REMAP_FUNCTIONS
240#undef VSF_WDT_CFG_IMP_HAS_OP
241#undef VSF_WDT_CFG_IMP_EXTERN_OP
242#undef VSF_WDT_CFG_IMP_RENAME_DEVICE_PREFIX
243
244#undef vsf_imp_wdt_t
245#undef vsf_imp_wdt_init
246#undef vsf_imp_wdt_fini
247#undef vsf_imp_wdt_enable
248#undef vsf_imp_wdt_disable
249#undef vsf_imp_wdt_capability
250#undef vsf_imp_wdt_feed
251#undef vsf_imp_wdt_get_configuration
252#undef vsf_imp_wdt_ctrl
253
254#undef vsf_remap_wdt_t
255#undef vsf_remap_wdt_init
256#undef vsf_remap_wdt_fini
257#undef vsf_remap_wdt_enable
258#undef vsf_remap_wdt_disable
259#undef vsf_remap_wdt_capability
260#undef vsf_remap_wdt_feed
261#undef vsf_remap_wdt_get_configuration
262#undef vsf_remap_wdt_ctrl
263
264#undef VSF_HAL_TEMPLATE_IMP_NAME
265#undef VSF_HAL_TEMPLATE_IMP_UPCASE_NAME
266
267/*============================ STATIC ASSERTIONS ==============================*/
268
269/* User-extensible macros for custom mode and IRQ mask values
270 * Users can define these macros before including this template to append
271 * their custom enum values to the uniqueness checks.
272 *
273 * Check modes for custom values:
274 * VSF_WDT_CFG_MODE_CHECK_UNIQUE - Check mode for custom mode values
275 * Default: VSF_HAL_CHECK_MODE_LOOSE (loose mode, no overlapping bits)
276 * Can be set to: VSF_HAL_CHECK_MODE_STRICT (strict mode, no overlapping bits)
277 * VSF_WDT_CFG_IRQ_MASK_CHECK_UNIQUE - Check mode for custom IRQ mask values
278 * Default: VSF_HAL_CHECK_MODE_STRICT (strict mode, no overlapping bits)
279 * Can be set to: VSF_HAL_CHECK_MODE_LOOSE (loose mode, no overlapping bits)
280 *
281 * Example usage in vendor driver:
282 * #define VSF_WDT_CUSTOM_MODE_VALUES MY_CUSTOM_MODE1, MY_CUSTOM_MODE2
283 * #define VSF_WDT_CFG_MODE_CHECK_UNIQUE VSF_HAL_CHECK_MODE_LOOSE
284 * #define VSF_WDT_CUSTOM_IRQ_MASK_VALUES MY_CUSTOM_IRQ1, MY_CUSTOM_IRQ2
285 * #define VSF_WDT_CFG_IRQ_MASK_CHECK_UNIQUE VSF_HAL_CHECK_MODE_STRICT
286 * #include "hal/driver/common/wdt/wdt_template.inc"
287 */
288
289
290#ifdef VSF_WDT_CFG_MODE_CHECK_UNIQUE
291/* ==================== GROUP INTERNAL UNIQUENESS CHECKS ==================== */
292/* Check uniqueness within each functional group */
293
294/* Check early wakeup mode uniqueness - all early wakeup modes should have different values
295 * Mandatory: VSF_WDT_MODE_NO_EARLY_WAKEUP, VSF_WDT_MODE_EARLY_WAKEUP
296 */
301);
302
303/* Check reset mode uniqueness - all reset modes should have different values
304 * Mandatory: VSF_WDT_MODE_RESET_NONE, VSF_WDT_MODE_RESET_CPU, VSF_WDT_MODE_RESET_SOC
305 */
311);
312
313#ifdef VSF_WDT_CUSTOM_MODE_VALUES
314/* Check uniqueness among custom mode values using user-specified check mode */
316#endif
317
320 /* Mandatory modes - always included */
323 /* User-defined modes - appended by user configuration */
324#ifdef VSF_WDT_CUSTOM_MODE_VALUES
325 , VSF_WDT_CUSTOM_MODE_VALUES
326#endif
327);
328#endif /* VSF_WDT_CFG_MODE_CHECK_UNIQUE */
329
330/* ==================== IRQ MASK UNIQUENESS CHECKS ==================== */
331
332#ifdef VSF_WDT_CFG_IRQ_MASK_CHECK_UNIQUE
333
334#ifdef VSF_WDT_CUSTOM_IRQ_MASK_VALUES
335/* Check uniqueness among custom IRQ mask values using user-specified check mode */
337#endif
338
339/* Note: WDT typically doesn't have a standard IRQ mask enum, but custom IRQ masks can be added */
340#endif /* VSF_WDT_CFG_IRQ_MASK_CHECK_UNIQUE */
341
342#undef VSF_WDT_CFG_MODE_CHECK_UNIQUE
343#undef VSF_WDT_CFG_IRQ_MASK_CHECK_UNIQUE
344#undef VSF_WDT_CUSTOM_MODE_VALUES
345#undef VSF_WDT_CUSTOM_IRQ_MASK_VALUES
346
347#endif /* VSF_HAL_USE_WDT */
vsf_err_t
Definition __type.h:42
@ VSF_ERR_NOT_SUPPORT
function not supported
Definition __type.h:46
@ VSF_WDT_MODE_RESET_SOC
Definition wdt.h:36
@ VSF_WDT_MODE_NO_EARLY_WAKEUP
Definition wdt.h:32
@ VSF_WDT_MODE_RESET_CPU
Definition wdt.h:37
@ VSF_WDT_MODE_RESET_NONE
Definition wdt.h:38
@ VSF_WDT_MODE_EARLY_WAKEUP
Definition wdt.h:33
#define NULL
Definition lvgl.h:26
Predefined VSF WDT capability that can be reimplemented in specific hal drivers. The vsf_wdt_capabili...
Definition vsf_template_wdt.h:395
uint8_t support_early_wakeup
Definition wdt.h:140
WDT configuration structure.
Definition vsf_template_wdt.h:325
#define VSF_WDT_CFG_IRQ_MASK_CHECK_UNIQUE
Definition wdt.c:208
#define VSF_WDT_CFG_MODE_CHECK_UNIQUE
Definition wdt.c:207
#define VSF_HAL_ASSERT(__CON)
all hal modules use this configuration file
Definition vsf_hal_cfg.h:36
#define VSF_HAL_CHECK_UNIQUE_CUSTOM(__CHECK_FUNC,...)
Definition vsf_template_static_assert_unique.h:2426
vsf_wdt_ctrl_t
Predefined VSF WDT control commands that can be reimplemented in specific HAL drivers.
Definition vsf_template_wdt.h:362
Generated from commit: vsfteam/vsf@b2e9e8a