swim: abstract the transport in stm8 target
[fw/openocd] / src / jtag / swim.c
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2
3 /*
4  * Copyright (C) 2020 by Antonio Borneo <borneo.antonio@gmail.com
5  *
6  * SWIM (Single Wire Interface Module) is a low-pin-count debug protocol
7  * used by STMicroelectronics MCU family STM8 and documented in UM470
8  * https://www.st.com/resource/en/user_manual/cd00173911.pdf
9  */
10
11 #ifdef HAVE_CONFIG_H
12 #include "config.h"
13 #endif
14
15 #include "interface.h"
16 #include "swim.h"
17 #include "jtag/hla/hla_transport.h"
18 #include "jtag/hla/hla_interface.h"
19 #include "jtag/hla/hla_layout.h"
20
21 extern struct adapter_driver *adapter_driver;
22
23 int swim_system_reset(void)
24 {
25         assert(adapter_driver->hla_if);
26
27         return adapter_driver->hla_if->layout->api->reset(adapter_driver->hla_if->handle);
28 }
29
30 int swim_read_mem(uint32_t addr, uint32_t size, uint32_t count,
31                                   uint8_t *buffer)
32 {
33         assert(adapter_driver->hla_if);
34
35         return adapter_driver->hla_if->layout->api->read_mem(adapter_driver->hla_if->handle, addr, size, count, buffer);
36 }
37
38 int swim_write_mem(uint32_t addr, uint32_t size, uint32_t count,
39                                    const uint8_t *buffer)
40 {
41         assert(adapter_driver->hla_if);
42
43         return adapter_driver->hla_if->layout->api->write_mem(adapter_driver->hla_if->handle, addr, size, count, buffer);
44 }
45
46 int swim_reconnect(void)
47 {
48         assert(adapter_driver->hla_if);
49
50         return adapter_driver->hla_if->layout->api->state(adapter_driver->hla_if->handle);
51 }