+// SPDX-License-Identifier: GPL-2.0-or-later
+
/***************************************************************************
* 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, see <http://www.gnu.org/licenses/>. *
***************************************************************************/
#ifdef HAVE_CONFIG_H
#include <target/target.h>
-static struct hl_interface_s hl_if = { {0, 0, { 0 }, { 0 }, 0, HL_TRANSPORT_UNKNOWN, false, -1}, 0, 0 };
+static struct hl_interface_s hl_if = {
+ .param = {
+ .device_desc = NULL,
+ .vid = { 0 },
+ .pid = { 0 },
+ .transport = HL_TRANSPORT_UNKNOWN,
+ .connect_under_reset = false,
+ .initial_interface_speed = -1,
+ .use_stlink_tcp = false,
+ .stlink_tcp_port = 7184,
+ },
+ .layout = NULL,
+ .handle = NULL,
+};
int hl_interface_open(enum hl_transports tr)
{
jtag_command_queue_reset();
free((void *)hl_if.param.device_desc);
- free((void *)hl_if.param.serial);
return ERROR_OK;
}
static int hl_interface_khz(int khz, int *jtag_speed)
{
- if (hl_if.layout->api->speed == NULL)
+ if (!hl_if.layout->api->speed)
return ERROR_OK;
*jtag_speed = hl_if.layout->api->speed(hl_if.handle, khz, true);
static int hl_interface_speed(int speed)
{
- if (hl_if.layout->api->speed == NULL)
+ if (!hl_if.layout->api->speed)
return ERROR_OK;
- if (hl_if.handle == NULL) {
+ if (!hl_if.handle) {
/* pass speed as initial param as interface not open yet */
hl_if.param.initial_interface_speed = speed;
return ERROR_OK;
return ERROR_FAIL;
}
-int hl_interface_config_trace(bool enabled, enum tpiu_pin_protocol pin_protocol,
+static int hl_interface_config_trace(bool enabled, enum tpiu_pin_protocol pin_protocol,
uint32_t port_size, unsigned int *trace_freq,
unsigned int traceclkin_freq, uint16_t *prescaler)
{
return ERROR_OK;
}
-int hl_interface_poll_trace(uint8_t *buf, size_t *size)
+static int hl_interface_poll_trace(uint8_t *buf, size_t *size)
{
if (hl_if.layout->api->poll_trace)
return hl_if.layout->api->poll_trace(hl_if.handle, buf, size);
return ERROR_OK;
}
-COMMAND_HANDLER(hl_interface_handle_serial_command)
-{
- LOG_DEBUG("hl_interface_handle_serial_command");
-
- if (CMD_ARGC == 1) {
- hl_if.param.serial = strdup(CMD_ARGV[0]);
- } else {
- LOG_ERROR("expected exactly one argument to hl_serial <serial-number>");
- }
-
- return ERROR_OK;
-}
-
COMMAND_HANDLER(hl_interface_handle_layout_command)
{
LOG_DEBUG("hl_interface_handle_layout_command");
return ERROR_OK;
}
+COMMAND_HANDLER(hl_interface_handle_stlink_backend_command)
+{
+ /* default values */
+ bool use_stlink_tcp = false;
+ uint16_t stlink_tcp_port = 7184;
+
+ if (CMD_ARGC == 0 || CMD_ARGC > 2)
+ return ERROR_COMMAND_SYNTAX_ERROR;
+ else if (strcmp(CMD_ARGV[0], "usb") == 0) {
+ if (CMD_ARGC > 1)
+ return ERROR_COMMAND_SYNTAX_ERROR;
+ /* else use_stlink_tcp = false (already the case ) */
+ } else if (strcmp(CMD_ARGV[0], "tcp") == 0) {
+ use_stlink_tcp = true;
+ if (CMD_ARGC == 2)
+ COMMAND_PARSE_NUMBER(u16, CMD_ARGV[1], stlink_tcp_port);
+ } else
+ return ERROR_COMMAND_SYNTAX_ERROR;
+
+ hl_if.param.use_stlink_tcp = use_stlink_tcp;
+ hl_if.param.stlink_tcp_port = stlink_tcp_port;
+
+ return ERROR_OK;
+}
+
COMMAND_HANDLER(interface_handle_hla_command)
{
if (CMD_ARGC != 1)
.name = "hla_device_desc",
.handler = &hl_interface_handle_device_desc_command,
.mode = COMMAND_CONFIG,
- .help = "set the a device description of the adapter",
+ .help = "set the device description of the adapter",
.usage = "description_string",
},
- {
- .name = "hla_serial",
- .handler = &hl_interface_handle_serial_command,
- .mode = COMMAND_CONFIG,
- .help = "set the serial number of the adapter",
- .usage = "serial_string",
- },
{
.name = "hla_layout",
.handler = &hl_interface_handle_layout_command,
.handler = &hl_interface_handle_vid_pid_command,
.mode = COMMAND_CONFIG,
.help = "the vendor and product ID of the adapter",
- .usage = "(vid pid)* ",
+ .usage = "(vid pid)*",
},
+ {
+ .name = "hla_stlink_backend",
+ .handler = &hl_interface_handle_stlink_backend_command,
+ .mode = COMMAND_CONFIG,
+ .help = "select which ST-Link backend to use",
+ .usage = "usb | tcp [port]",
+ },
{
.name = "hla_command",
.handler = &interface_handle_hla_command,
.mode = COMMAND_EXEC,
.help = "execute a custom adapter-specific command",
- .usage = "hla_command <command>",
+ .usage = "<command>",
},
COMMAND_REGISTRATION_DONE
};