Loading...
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 |