1 /* 2 * kempld_wdt.h - Kontron PLD watchdog driver definitions 3 * 4 * Copyright (c) 2010 Kontron Embedded Modules GmbH 5 * Author: Michael Brunner <michael.brunner@kontron.com> 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License 2 as published 9 * by the Free Software Foundation. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program; see the file COPYING. If not, write to 18 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 19 */ 20 21 #ifndef _KEMPLD_WDT_H_ 22 #define _KEMPLD_WDT_H_ 23 #include <stdint.h> 24 25 #define KEMPLD_IOPORT 0x0a80 26 #define KEMPLD_IODATA (KEMPLD_IOPORT+1) 27 28 #define KEMPLD_MUTEX_KEY 0x80 29 30 /* watchdog register definitions */ 31 #define KEMPLD_WDT_KICK 0x16 32 #define KEMPLD_WDT_REV 0x16 33 #define KEMPLD_WDT_REV_GET(x) (x & 0xf) 34 #define KEMPLD_WDT_CFG 0x17 35 #define KEMPLD_WDT_CFG_STAGE_TIMEOUT_OCCURED(x) (1<<x) 36 #define KEMPLD_WDT_CFG_ENABLE_LOCK 0x8 37 #define KEMPLD_WDT_CFG_ENABLE 0x10 38 #define KEMPLD_WDT_CFG_AUTO_RELOAD 0x40 39 #define KEMPLD_WDT_CFG_GLOBAL_LOCK 0x80 40 #define KEMPLD_WDT_STAGE_CFG(x) (0x18+x) 41 #define KEMPLD_WDT_STAGE_CFG_ACTION_MASK 0x7 42 #define KEMPLD_WDT_STAGE_CFG_GET_ACTION(x) (x & 0x7) 43 #define KEMPLD_WDT_STAGE_CFG_ASSERT 0x8 44 #define KEMPLD_WDT_STAGE_CFG_PRESCALER_MASK 0x30 45 #define KEMPLD_WDT_STAGE_CFG_GET_PRESCALER(x) ((x & 0x30)>>4) 46 #define KEMPLD_WDT_STAGE_CFG_SET_PRESCALER(x) ((x & 0x30)<<4) 47 #define KEMPLD_WDT_STAGE_TIMEOUT(x) (0x1b+x*4) 48 #define KEMPLD_WDT_MAX_STAGES 3 49 50 #define KEMPLD_WDT_ACTION_NONE 0x0 51 #define KEMPLD_WDT_ACTION_RESET 0x1 52 #define KEMPLD_WDT_ACTION_NMI 0x2 53 #define KEMPLD_WDT_ACTION_SMI 0x3 54 #define KEMPLD_WDT_ACTION_SCI 0x4 55 #define KEMPLD_WDT_ACTION_DELAY 0x5 56 57 #define KEMPLD_WDT_PRESCALER_21BIT 0x0 58 #define KEMPLD_WDT_PRESCALER_17BIT 0x1 59 #define KEMPLD_WDT_PRESCALER_12BIT 0x2 60 61 const int kempld_prescaler_bits[] = { 21, 17, 12 }; 62 63 struct kempld_watchdog_stage { 64 int num; 65 uint32_t timeout_mask; 66 }; 67 68 /** 69 * struct kempld_device_data - Internal representation of the PLD device 70 * @io_base: Pointer to the IO memory 71 * @io_index: Pointer to the IO index register 72 * @io_data: Pointer to the IO data register 73 * @pld_clock: PLD clock frequency 74 * @lock: PLD spin-lock 75 * @lock_flags: PLD spin-lock flags 76 * @have_mutex: Bool value that indicates if mutex is aquired 77 * @last_index: Last written index value 78 * @rscr: Kernel resource structure 79 * @dev: Pointer to kernel device structure 80 * @info: KEMPLD info structure 81 */ 82 struct kempld_device_data { 83 uint16_t io_base; 84 uint16_t io_index; 85 uint16_t io_data; 86 uint32_t pld_clock; 87 /* spinlock_t lock; 88 unsigned long lock_flags; */ 89 int have_mutex; 90 uint8_t last_index; 91 /* struct resource rscr; 92 struct device *dev; 93 struct kempld_info info;*/ 94 }; 95 96 struct watchdog_info { 97 uint32_t options; /* Options the card/driver supports */ 98 uint32_t firmware_version; /* Firmware version of the card */ 99 uint8_t identity[32]; /* Identity of the board */ 100 }; 101 102 struct kempld_watchdog_data { 103 unsigned int revision; 104 int timeout; 105 int pretimeout; 106 unsigned long is_open; 107 unsigned long expect_close; 108 int stages; 109 struct kempld_watchdog_stage *timeout_stage; 110 struct kempld_watchdog_stage *pretimeout_stage; 111 struct kempld_device_data *pld; 112 struct kempld_watchdog_stage *stage[KEMPLD_WDT_MAX_STAGES]; 113 struct watchdog_info ident; 114 }; 115 116 #endif /* _KEMPLD_WDT_H_ */ 117 #define KEMPLD_PRESCALER(x) (0xffffffff>>(32-kempld_prescaler_bits[x])) 118