X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Fjtag%2Fdrivers%2Fosbdm.c;h=3323557b7547f684179f3ec578cb9e2765beabe2;hb=HEAD;hp=385730126d490d18b69879002241f79d079826ee;hpb=94d64ccaebd3df17f5873c076fc08ca97088cb1e;p=openocd.git diff --git a/src/jtag/drivers/osbdm.c b/src/jtag/drivers/osbdm.c index 385730126d..8d4fc90d88 100644 --- a/src/jtag/drivers/osbdm.c +++ b/src/jtag/drivers/osbdm.c @@ -1,21 +1,8 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + /*************************************************************************** * Copyright (C) 2012 by Jan Dakinevich * * jan.dakinevich@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, write to the * - * Free Software Foundation, Inc., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include "config.h" @@ -25,7 +12,7 @@ #include #include #include -#include "libusb_common.h" +#include "libusb_helper.h" struct sequence { int len; @@ -107,7 +94,7 @@ static struct queue *queue_alloc(void) return queue; } -/* Size of usb communnication buffer */ +/* Size of usb communication buffer */ #define OSBDM_USB_BUFSIZE 64 /* Timeout for USB transfer, ms */ #define OSBDM_USB_TIMEOUT 1000 @@ -134,7 +121,7 @@ static const uint16_t osbdm_vid[] = { 0x15a2, 0x15a2, 0x15a2, 0 }; static const uint16_t osbdm_pid[] = { 0x0042, 0x0058, 0x005e, 0 }; struct osbdm { - struct jtag_libusb_device_handle *devh; /* USB handle */ + struct libusb_device_handle *devh; /* USB handle */ uint8_t buffer[OSBDM_USB_BUFSIZE]; /* Data to send and receive */ int count; /* Count data to send and to read */ }; @@ -146,11 +133,13 @@ static struct osbdm osbdm_context; static int osbdm_send_and_recv(struct osbdm *osbdm) { /* Send request */ - int count = jtag_libusb_bulk_write(osbdm->devh, OSBDM_USB_EP_WRITE, - (char *)osbdm->buffer, osbdm->count, OSBDM_USB_TIMEOUT); + int count, ret; - if (count != osbdm->count) { - LOG_ERROR("OSBDM communnication error: can't write"); + ret = jtag_libusb_bulk_write(osbdm->devh, OSBDM_USB_EP_WRITE, + (char *)osbdm->buffer, osbdm->count, + OSBDM_USB_TIMEOUT, &count); + if (ret || count != osbdm->count) { + LOG_ERROR("OSBDM communication error: can't write"); return ERROR_FAIL; } @@ -158,29 +147,28 @@ static int osbdm_send_and_recv(struct osbdm *osbdm) uint8_t cmd_saved = osbdm->buffer[0]; /* Reading answer */ - osbdm->count = jtag_libusb_bulk_read(osbdm->devh, OSBDM_USB_EP_READ, - (char *)osbdm->buffer, OSBDM_USB_BUFSIZE, OSBDM_USB_TIMEOUT); - + ret = jtag_libusb_bulk_read(osbdm->devh, OSBDM_USB_EP_READ, + (char *)osbdm->buffer, OSBDM_USB_BUFSIZE, + OSBDM_USB_TIMEOUT, &osbdm->count); /* Now perform basic checks for data sent by BDM device */ - - if (osbdm->count < 0) { - LOG_ERROR("OSBDM communnication error: can't read"); + if (ret) { + LOG_ERROR("OSBDM communication error: can't read"); return ERROR_FAIL; } if (osbdm->count < 2) { - LOG_ERROR("OSBDM communnication error: answer too small"); + LOG_ERROR("OSBDM communication error: reply too small"); return ERROR_FAIL; } if (osbdm->count != osbdm->buffer[1]) { - LOG_ERROR("OSBDM communnication error: answer size mismatch"); + LOG_ERROR("OSBDM communication error: reply size mismatch"); return ERROR_FAIL; } if (cmd_saved != osbdm->buffer[0]) { - LOG_ERROR("OSBDM communnication error: answer command mismatch"); + LOG_ERROR("OSBDM communication error: reply command mismatch"); return ERROR_FAIL; } @@ -219,7 +207,7 @@ static int osbdm_swap(struct osbdm *osbdm, void *tms, void *tdi, } if (length <= 0) { - LOG_ERROR("BUG: bit sequence equal or less to 0"); + LOG_ERROR("BUG: bit sequence equal or less than 0"); return ERROR_FAIL; } @@ -271,11 +259,11 @@ static int osbdm_swap(struct osbdm *osbdm, void *tms, void *tdi, /* Extra check */ if (((osbdm->buffer[2] << 8) | osbdm->buffer[3]) != 2 * swap_count) { - LOG_ERROR("OSBDM communnication error: not proper answer to swap command"); + LOG_ERROR("OSBDM communication error: invalid swap command reply"); return ERROR_FAIL; } - /* Copy TDO responce + /* Copy TDO response */ uint8_t *buffer = osbdm->buffer + 4; for (int bit_idx = 0; bit_idx < length; ) { @@ -298,7 +286,7 @@ static int osbdm_swap(struct osbdm *osbdm, void *tms, void *tdi, return ERROR_OK; } -static int osbdm_flush(struct osbdm *osbdm, struct queue* queue) +static int osbdm_flush(struct osbdm *osbdm, struct queue *queue) { uint8_t tms[DIV_ROUND_UP(OSBDM_SWAP_MAX, 8)]; uint8_t tdi[DIV_ROUND_UP(OSBDM_SWAP_MAX, 8)]; @@ -375,10 +363,10 @@ static int osbdm_flush(struct osbdm *osbdm, struct queue* queue) static int osbdm_open(struct osbdm *osbdm) { (void)memset(osbdm, 0, sizeof(*osbdm)); - if (jtag_libusb_open(osbdm_vid, osbdm_pid, &osbdm->devh) != ERROR_OK) + if (jtag_libusb_open(osbdm_vid, osbdm_pid, NULL, &osbdm->devh, NULL) != ERROR_OK) return ERROR_FAIL; - if (jtag_libusb_claim_interface(osbdm->devh, 0) != ERROR_OK) + if (libusb_claim_interface(osbdm->devh, 0) != ERROR_OK) return ERROR_FAIL; return ERROR_OK; @@ -640,7 +628,7 @@ static int osbdm_execute_command( return retval; } -static int osbdm_execute_queue(void) +static int osbdm_execute_queue(struct jtag_command *cmd_queue) { int retval = ERROR_OK; @@ -649,7 +637,7 @@ static int osbdm_execute_queue(void) LOG_ERROR("BUG: can't allocate bit queue"); retval = ERROR_FAIL; } else { - struct jtag_command *cmd = jtag_command_queue; + struct jtag_command *cmd = cmd_queue; while (retval == ERROR_OK && cmd) { retval = osbdm_execute_command(&osbdm_context, queue, cmd); @@ -678,7 +666,7 @@ static int osbdm_init(void) return ERROR_FAIL; } else { /* Device successfully opened */ - LOG_INFO("OSBDM has opened"); + LOG_DEBUG("OSBDM init"); } /* Perform initialize command */ @@ -690,12 +678,16 @@ static int osbdm_init(void) return ERROR_OK; } -struct jtag_interface osbdm_interface = { - .name = "osbdm", +static struct jtag_interface osbdm_interface = { + .execute_queue = osbdm_execute_queue, +}; +struct adapter_driver osbdm_adapter_driver = { + .name = "osbdm", .transports = jtag_only, - .execute_queue = osbdm_execute_queue, .init = osbdm_init, - .quit = osbdm_quit + .quit = osbdm_quit, + + .jtag_ops = &osbdm_interface, };