+// SPDX-License-Identifier: GPL-2.0-or-later
+
/*
* OpenOCD STM8 target driver
* Copyright (C) 2017 Ake Rehnman
* ake.rehnman(at)gmail.com
-*
-* This program is free software: you can redistribute it and/or modify
-* it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 2 of the License, or
-* (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifdef HAVE_CONFIG_H
struct stm8_core_reg {
uint32_t num;
struct target *target;
- struct stm8_common *stm8_common;
};
enum hw_break_type {
for (i = 0; i < num_regs; i++) {
arch_info[i].num = stm8_regs[i].id;
arch_info[i].target = target;
- arch_info[i].stm8_common = stm8;
reg_list[i].name = stm8_regs[i].name;
reg_list[i].size = stm8_regs[i].bits;
/* set any pending breakpoints */
while (breakpoint) {
- if (breakpoint->set == 0)
+ if (!breakpoint->is_set)
stm8_set_breakpoint(target, breakpoint);
breakpoint = breakpoint->next;
}
struct stm8_comparator *comparator_list = stm8->hw_break_list;
int retval;
- if (breakpoint->set) {
+ if (breakpoint->is_set) {
LOG_WARNING("breakpoint already set");
return ERROR_OK;
}
breakpoint->unique_id);
return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
}
- breakpoint->set = bp_num + 1;
+ breakpoint_hw_set(breakpoint, bp_num);
comparator_list[bp_num].used = true;
comparator_list[bp_num].bp_value = breakpoint->address;
comparator_list[bp_num].type = HWBRK_EXEC;
} else {
return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
}
- breakpoint->set = 1; /* Any nice value but 0 */
+ breakpoint->is_set = true;
}
return ERROR_OK;
struct stm8_comparator *comparator_list = stm8->hw_break_list;
int retval;
- if (!breakpoint->set) {
+ if (!breakpoint->is_set) {
LOG_WARNING("breakpoint not set");
return ERROR_OK;
}
if (breakpoint->type == BKPT_HARD) {
- int bp_num = breakpoint->set - 1;
- if ((bp_num < 0) || (bp_num >= stm8->num_hw_bpoints)) {
+ int bp_num = breakpoint->number;
+ if (bp_num >= stm8->num_hw_bpoints) {
LOG_DEBUG("Invalid comparator number in breakpoint (bpid: %" PRIu32 ")",
breakpoint->unique_id);
return ERROR_OK;
} else
return ERROR_FAIL;
}
- breakpoint->set = 0;
+ breakpoint->is_set = false;
return ERROR_OK;
}
return ERROR_TARGET_NOT_HALTED;
}
- if (breakpoint->set)
+ if (breakpoint->is_set)
stm8_unset_breakpoint(target, breakpoint);
if (breakpoint->type == BKPT_HARD)
int wp_num = 0;
int ret;
- if (watchpoint->set) {
+ if (watchpoint->is_set) {
LOG_WARNING("watchpoint already set");
return ERROR_OK;
}
return ret;
}
- watchpoint->set = wp_num + 1;
+ watchpoint_set(watchpoint, wp_num);
LOG_DEBUG("wp_num %i bp_value 0x%" PRIx32 "",
wp_num,
/* set any pending watchpoints */
while (watchpoint) {
- if (watchpoint->set == 0)
+ if (!watchpoint->is_set)
stm8_set_watchpoint(target, watchpoint);
watchpoint = watchpoint->next;
}
struct stm8_common *stm8 = target_to_stm8(target);
struct stm8_comparator *comparator_list = stm8->hw_break_list;
- if (!watchpoint->set) {
+ if (!watchpoint->is_set) {
LOG_WARNING("watchpoint not set");
return ERROR_OK;
}
- int wp_num = watchpoint->set - 1;
- if ((wp_num < 0) || (wp_num >= stm8->num_hw_bpoints)) {
+ int wp_num = watchpoint->number;
+ if (wp_num >= stm8->num_hw_bpoints) {
LOG_DEBUG("Invalid hw comparator number in watchpoint");
return ERROR_OK;
}
comparator_list[wp_num].used = false;
- watchpoint->set = 0;
+ watchpoint->is_set = false;
stm8_set_hwbreak(target, comparator_list);
return ERROR_TARGET_NOT_HALTED;
}
- if (watchpoint->set)
+ if (watchpoint->is_set)
stm8_unset_watchpoint(target, watchpoint);
stm8->num_hw_bpoints_avail++;
continue;
struct reg *reg = register_get_by_name(stm8->core_cache,
- reg_params[i].reg_name, 0);
+ reg_params[i].reg_name, false);
if (!reg) {
LOG_ERROR("BUG: register '%s' not found", reg_params[i].reg_name);
for (int i = 0; i < num_reg_params; i++) {
if (reg_params[i].direction != PARAM_OUT) {
struct reg *reg = register_get_by_name(stm8->core_cache,
- reg_params[i].reg_name, 0);
+ reg_params[i].reg_name, false);
if (!reg) {
LOG_ERROR("BUG: register '%s' not found",
reg_params[i].reg_name);
return ERROR_OK;
}
-static int stm8_jim_configure(struct target *target, Jim_GetOptInfo *goi)
+static int stm8_jim_configure(struct target *target, struct jim_getopt_info *goi)
{
struct stm8_common *stm8 = target_to_stm8(target);
jim_wide w;
arg = Jim_GetString(goi->argv[0], NULL);
if (!strcmp(arg, "-blocksize")) {
- e = Jim_GetOpt_String(goi, &arg, NULL);
+ e = jim_getopt_string(goi, &arg, NULL);
if (e != JIM_OK)
return e;
return JIM_ERR;
}
- e = Jim_GetOpt_Wide(goi, &w);
+ e = jim_getopt_wide(goi, &w);
if (e != JIM_OK)
return e;
return JIM_OK;
}
if (!strcmp(arg, "-flashstart")) {
- e = Jim_GetOpt_String(goi, &arg, NULL);
+ e = jim_getopt_string(goi, &arg, NULL);
if (e != JIM_OK)
return e;
return JIM_ERR;
}
- e = Jim_GetOpt_Wide(goi, &w);
+ e = jim_getopt_wide(goi, &w);
if (e != JIM_OK)
return e;
return JIM_OK;
}
if (!strcmp(arg, "-flashend")) {
- e = Jim_GetOpt_String(goi, &arg, NULL);
+ e = jim_getopt_string(goi, &arg, NULL);
if (e != JIM_OK)
return e;
return JIM_ERR;
}
- e = Jim_GetOpt_Wide(goi, &w);
+ e = jim_getopt_wide(goi, &w);
if (e != JIM_OK)
return e;
return JIM_OK;
}
if (!strcmp(arg, "-eepromstart")) {
- e = Jim_GetOpt_String(goi, &arg, NULL);
+ e = jim_getopt_string(goi, &arg, NULL);
if (e != JIM_OK)
return e;
return JIM_ERR;
}
- e = Jim_GetOpt_Wide(goi, &w);
+ e = jim_getopt_wide(goi, &w);
if (e != JIM_OK)
return e;
return JIM_OK;
}
if (!strcmp(arg, "-eepromend")) {
- e = Jim_GetOpt_String(goi, &arg, NULL);
+ e = jim_getopt_string(goi, &arg, NULL);
if (e != JIM_OK)
return e;
return JIM_ERR;
}
- e = Jim_GetOpt_Wide(goi, &w);
+ e = jim_getopt_wide(goi, &w);
if (e != JIM_OK)
return e;
return JIM_OK;
}
if (!strcmp(arg, "-optionstart")) {
- e = Jim_GetOpt_String(goi, &arg, NULL);
+ e = jim_getopt_string(goi, &arg, NULL);
if (e != JIM_OK)
return e;
return JIM_ERR;
}
- e = Jim_GetOpt_Wide(goi, &w);
+ e = jim_getopt_wide(goi, &w);
if (e != JIM_OK)
return e;
return JIM_OK;
}
if (!strcmp(arg, "-optionend")) {
- e = Jim_GetOpt_String(goi, &arg, NULL);
+ e = jim_getopt_string(goi, &arg, NULL);
if (e != JIM_OK)
return e;
return JIM_ERR;
}
- e = Jim_GetOpt_Wide(goi, &w);
+ e = jim_getopt_wide(goi, &w);
if (e != JIM_OK)
return e;
return JIM_OK;
}
if (!strcmp(arg, "-enable_step_irq")) {
- e = Jim_GetOpt_String(goi, &arg, NULL);
+ e = jim_getopt_string(goi, &arg, NULL);
if (e != JIM_OK)
return e;
return JIM_OK;
}
if (!strcmp(arg, "-enable_stm8l")) {
- e = Jim_GetOpt_String(goi, &arg, NULL);
+ e = jim_getopt_string(goi, &arg, NULL);
if (e != JIM_OK)
return e;