aboutsummaryrefslogtreecommitdiff
path: root/src/jtag/hla/hla_layout.h
blob: 8833d6c80ba41cbf292a38576a2a8003b86da005 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/***************************************************************************
 *   Copyright (C) 2011 by Mathias Kuester                                 *
 *   Mathias Kuester <kesmtp@freenet.de>                                   *
 *                                                                         *
 *   Copyright (C) 2012 by Spencer Oliver                                  *
 *   spen@spen-soft.co.uk                                                  *
 *                                                                         *
 *   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, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.           *
 ***************************************************************************/

#ifndef _HL_LAYOUT_H
#define _HL_LAYOUT_H

#include <target/armv7m_trace.h>

/** */
struct hl_interface_s;
struct hl_interface_param_s;

/** */
extern struct hl_layout_api_s stlink_usb_layout_api;
extern struct hl_layout_api_s icdi_usb_layout_api;

/** */
struct hl_layout_api_s {
	/** */
	int (*open) (struct hl_interface_param_s *param, void **handle);
	/** */
	int (*close) (void *handle);
	/** */
	int (*reset) (void *handle);
	/** */
	int (*assert_srst) (void *handle, int srst);
	/** */
	int (*run) (void *handle);
	/** */
	int (*halt) (void *handle);
	/** */
	int (*step) (void *handle);
	/** */
	int (*read_regs) (void *handle);
	/** */
	int (*read_reg) (void *handle, int num, uint32_t *val);
	/** */
	int (*write_reg) (void *handle, int num, uint32_t val);
	/** */
	int (*read_mem) (void *handle, uint32_t addr, uint32_t size,
			uint32_t count, uint8_t *buffer);
	/** */
	int (*write_mem) (void *handle, uint32_t addr, uint32_t size,
			uint32_t count, const uint8_t *buffer);
	/** */
	int (*write_debug_reg) (void *handle, uint32_t addr, uint32_t val);
	/**
	 * Read the idcode of the target connected to the adapter
	 *
	 * If the adapter doesn't support idcode retrieval, this callback should
	 * store 0 to indicate a wildcard match.
	 *
	 * @param handle A pointer to the device-specific handle
	 * @param idcode Storage for the detected idcode
	 * @returns ERROR_OK on success, or an error code on failure.
	 */
	int (*idcode) (void *handle, uint32_t *idcode);
	/** */
	int (*override_target) (const char *targetname);
	/** */
	int (*custom_command) (void *handle, const char *command);
	/** */
	int (*speed)(void *handle, int khz, bool query);
	/**
	 * Configure trace parameters for the adapter
	 *
	 * @param handle A handle to adapter
	 * @param enabled Whether to enable trace
	 * @param pin_protocol Configured pin protocol
	 * @param port_size Trace port width for sync mode
	 * @param trace_freq A pointer to the configured trace
	 * frequency; if it points to 0, the adapter driver must write
	 * its maximum supported rate there
	 * @returns ERROR_OK on success, an error code on failure.
	 */
	int (*config_trace)(void *handle, bool enabled, enum tpio_pin_protocol pin_protocol,
			    uint32_t port_size, unsigned int *trace_freq);
	/**
	 * Poll for new trace data
	 *
	 * @param handle A handle to adapter
	 * @param buf A pointer to buffer to store received data
	 * @param size A pointer to buffer size; must be filled with
	 * the actual amount of bytes written
	 *
	 * @returns ERROR_OK on success, an error code on failure.
	 */
	int (*poll_trace)(void *handle, uint8_t *buf, size_t *size);
	/** */
	enum target_state (*state) (void *fd);
};

/** */
struct hl_layout {
	/** */
	char *name;
	/** */
	int (*open) (struct hl_interface_s *adapter);
	/** */
	int (*close) (struct hl_interface_s *adapter);
	/** */
	struct hl_layout_api_s *api;
};

/** */
const struct hl_layout *hl_layout_get_list(void);
/** */
int hl_layout_init(struct hl_interface_s *adapter);

#endif /* _HL_LAYOUT_H */