forked from zephyrproject-rtos/zephyr
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwatchdog.h
131 lines (109 loc) · 2.77 KB
/
watchdog.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/*
* Copyright (c) 2015 Intel Corporation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef _WDT_H_
#define _WDT_H_
#include <stdint.h>
#include <device.h>
#include <misc/util.h>
#ifdef __cplusplus
extern "C" {
#endif
#define WDT_MODE (BIT(1))
#define WDT_MODE_OFFSET (1)
#define WDT_TIMEOUT_MASK (0xF)
enum wdt_mode {
WDT_MODE_RESET = 0,
WDT_MODE_INTERRUPT_RESET
};
/**
* WDT clock cycles for timeout type.
*/
enum wdt_clock_timeout_cycles {
WDT_2_16_CYCLES,
WDT_2_17_CYCLES,
WDT_2_18_CYCLES,
WDT_2_19_CYCLES,
WDT_2_20_CYCLES,
WDT_2_21_CYCLES,
WDT_2_22_CYCLES,
WDT_2_23_CYCLES,
WDT_2_24_CYCLES,
WDT_2_25_CYCLES,
WDT_2_26_CYCLES,
WDT_2_27_CYCLES,
WDT_2_28_CYCLES,
WDT_2_29_CYCLES,
WDT_2_30_CYCLES,
WDT_2_31_CYCLES
};
/**
* WDT configuration struct.
*/
struct wdt_config {
uint32_t timeout;
enum wdt_mode mode;
void (*interrupt_fn)(struct device *dev);
};
typedef void (*wdt_api_enable)(struct device *dev);
typedef void (*wdt_api_disable)(struct device *dev);
typedef int (*wdt_api_set_config)(struct device *dev,
struct wdt_config *config);
typedef void (*wdt_api_get_config)(struct device *dev,
struct wdt_config *config);
typedef void (*wdt_api_reload)(struct device *dev);
struct wdt_driver_api {
wdt_api_enable enable;
wdt_api_disable disable;
wdt_api_get_config get_config;
wdt_api_set_config set_config;
wdt_api_reload reload;
};
static inline void wdt_enable(struct device *dev)
{
struct wdt_driver_api *api;
api = (struct wdt_driver_api *)dev->driver_api;
api->enable(dev);
}
static inline void wdt_disable(struct device *dev)
{
struct wdt_driver_api *api;
api = (struct wdt_driver_api *)dev->driver_api;
api->disable(dev);
}
static inline void wdt_get_config(struct device *dev,
struct wdt_config *config)
{
struct wdt_driver_api *api;
api = (struct wdt_driver_api *)dev->driver_api;
api->get_config(dev, config);
}
static inline int wdt_set_config(struct device *dev,
struct wdt_config *config)
{
struct wdt_driver_api *api;
api = (struct wdt_driver_api *)dev->driver_api;
return api->set_config(dev, config);
}
static inline void wdt_reload(struct device *dev)
{
struct wdt_driver_api *api;
api = (struct wdt_driver_api *)dev->driver_api;
api->reload(dev);
}
#ifdef __cplusplus
}
#endif
#endif