6a1b72ec48f70ba305063508d892b0611726c701
[fw/openocd] / src / target / espressif / esp_xtensa.c
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2
3 /***************************************************************************
4  *   Espressif Xtensa target API for OpenOCD                               *
5  *   Copyright (C) 2019 Espressif Systems Ltd.                             *
6  ***************************************************************************/
7
8 #ifdef HAVE_CONFIG_H
9 #include <config.h>
10 #endif
11
12 #include <stdbool.h>
13 #include <stdint.h>
14 #include <target/smp.h>
15 #include <target/register.h>
16 #include "esp_xtensa.h"
17 #include "esp_semihosting.h"
18
19 int esp_xtensa_init_arch_info(struct target *target,
20         struct esp_xtensa_common *esp_xtensa,
21         struct xtensa_debug_module_config *dm_cfg,
22         const struct esp_semihost_ops *semihost_ops)
23 {
24         int ret = xtensa_init_arch_info(target, &esp_xtensa->xtensa, dm_cfg);
25         if (ret != ERROR_OK)
26                 return ret;
27         esp_xtensa->semihost.ops = (struct esp_semihost_ops *)semihost_ops;
28         return ERROR_OK;
29 }
30
31 int esp_xtensa_target_init(struct command_context *cmd_ctx, struct target *target)
32 {
33         return xtensa_target_init(cmd_ctx, target);
34 }
35
36 void esp_xtensa_target_deinit(struct target *target)
37 {
38         LOG_DEBUG("start");
39
40         xtensa_target_deinit(target);
41         free(target_to_esp_xtensa(target));     /* same as free(xtensa) */
42 }
43
44 int esp_xtensa_arch_state(struct target *target)
45 {
46         return ERROR_OK;
47 }
48
49 int esp_xtensa_poll(struct target *target)
50 {
51         return xtensa_poll(target);
52 }
53
54 int esp_xtensa_breakpoint_add(struct target *target, struct breakpoint *breakpoint)
55 {
56         return xtensa_breakpoint_add(target, breakpoint);
57         /* flash breakpoints will be handled in another patch */
58 }
59
60 int esp_xtensa_breakpoint_remove(struct target *target, struct breakpoint *breakpoint)
61 {
62         return xtensa_breakpoint_remove(target, breakpoint);
63         /* flash breakpoints will be handled in another patch */
64 }