STM8 Target relicensing to GPLv2 and later
[fw/openocd] / src / target / stm8.h
1 /*
2 *   OpenOCD STM8 target driver
3 *   Copyright (C) 2017  Ake Rehnman
4 *   ake.rehnman(at)gmail.com
5 *
6 *   This program is free software: you can redistribute it and/or modify
7 *   it under the terms of the GNU General Public License as published by
8 *   the Free Software Foundation, either version 2 of the License, or
9 *   (at your option) any later version.
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.  If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 #ifndef OPENOCD_TARGET_STM8_H
21 #define OPENOCD_TARGET_STM8_H
22
23 struct target;
24
25 #define STM8_COMMON_MAGIC       0x53544D38
26 #define STM8_NUM_CORE_REGS 6
27
28 struct stm8_common {
29         uint32_t common_magic;
30         void *arch_info;
31         struct reg_cache *core_cache;
32         uint32_t core_regs[STM8_NUM_CORE_REGS];
33
34         /* working area for fastdata access */
35         struct working_area *fast_data_area;
36
37         bool swim_configured;
38         bool bp_scanned;
39         uint8_t num_hw_bpoints;
40         uint8_t num_hw_bpoints_avail;
41         struct stm8_comparator *hw_break_list;
42         uint32_t blocksize;
43         uint32_t flashstart;
44         uint32_t flashend;
45         uint32_t eepromstart;
46         uint32_t eepromend;
47         uint32_t optionstart;
48         uint32_t optionend;
49         bool enable_step_irq;
50
51         bool enable_stm8l;
52         uint32_t flash_cr2;
53         uint32_t flash_ncr2;
54         uint32_t flash_iapsr;
55         uint32_t flash_dukr;
56         uint32_t flash_pukr;
57
58         /* cc value used for interrupt flags restore */
59         uint32_t cc;
60         bool cc_valid;
61
62         /* register cache to processor synchronization */
63         int (*read_core_reg)(struct target *target, unsigned int num);
64         int (*write_core_reg)(struct target *target, unsigned int num);
65 };
66
67 static inline struct stm8_common *
68 target_to_stm8(struct target *target)
69 {
70         return target->arch_info;
71 }
72
73 const struct command_registration stm8_command_handlers[];
74
75 #endif /* OPENOCD_TARGET_STM8_H */